76{
78 struct OnExit
79 {
80 std::function<void(TextureDisplacementPrepareOutcome)> fn;
82 ~OnExit() { if (fn) fn(*outcome); }
84
85 if (canceled || eptr)
86 return;
87
88
89
90 for (
const TextureDisplacementPrepareResult &result :
m_results)
91 if (result.paint_lost) {
93 return;
94 }
95
97
98
99
100
101
102 std::vector<std::pair<size_t, ModelVolume *>> to_commit;
103 for (
size_t i = 0; i <
m_results.size(); ++i) {
105 continue;
107 volume !=
nullptr && volume->
get_object() !=
nullptr)
108 to_commit.emplace_back(i, volume);
109 }
110 if (to_commit.empty()) {
111
113 return;
114 }
115
116 ModelObject *object = to_commit.front().second->get_object();
117 {
119
120 for (const auto &[i, volume] : to_commit) {
121
122
123
124
125 std::optional<TriangleSelector::SavedPainting> saved_painting = volume->save_painting();
126 volume->set_mesh(TriangleMesh(std::move(
m_results[i].mesh)));
127 volume->set_new_unique_id();
128 volume->calculate_convex_hull();
129 volume->restore_painting(saved_painting);
131 volume->texture_displacement_facet(slot).set_data(std::move(
m_results[i].masks[
size_t(slot)]));
132
133
134
135 volume->texture_uv = std::move(
m_results[i].uv);
136 }
137
140 auto it = std::find(objs.begin(), objs.end(), object);
141 if (it != objs.end())
143 }
145 }
147}
void update_info_items(size_t obj_idx, wxDataViewItemArray *selections=nullptr, bool added_object=false, bool color_mode_changed=false)
Definition GUI_ObjectList.cpp:4039
void changed_object(ModelObject &object)
Definition Plater.cpp:22227
const Model & model() const
Definition Plater.cpp:16047
std::vector< TextureDisplacementPrepareResult > m_results
Definition TextureDisplacementPrepareJob.hpp:77
ModelObject * get_object() const
Definition Model.hpp:1022
ModelObjectPtrs objects
Definition Model.hpp:1702
static ObjectList * obj_list()
Definition GUI_Factories.cpp:405
static Plater * plater()
Definition GUI_Factories.cpp:400
static ModelVolume * get_model_volume(const Selection &selection, Model &model)
Definition GLGizmoBrimEars.cpp:66
TextureDisplacementPrepareOutcome
Definition TextureDisplacementPrepareJob.hpp:33
@ Unchanged
Definition TextureDisplacementPrepareJob.hpp:35
@ PaintLost
Definition TextureDisplacementPrepareJob.hpp:36
@ Failed
Definition TextureDisplacementPrepareJob.hpp:37
@ Committed
Definition TextureDisplacementPrepareJob.hpp:34
@ ObjectList
Definition Shortcuts.hpp:21
@ Plater
Definition Shortcuts.hpp:21
@ GizmoAction
Definition UndoRedo.hpp:36
static constexpr size_t TEXTURE_DISPLACEMENT_MAX_LAYERS
Definition TextureDisplacement.hpp:44
std::vector< ModelObject * > ModelObjectPtrs
Definition CutUtils.hpp:13