SPE-1252 - Fixed update of contours in Cut Gizmo when modifying the orientation or the scale of a part of a multipart object
This commit is contained in:
parent
c7d44d3576
commit
6b0ea79d34
2 changed files with 17 additions and 2 deletions
|
@ -371,16 +371,29 @@ void GLGizmoCut::update_contours()
|
|||
const ModelObject* model_object = wxGetApp().model().objects[selection.get_object_idx()];
|
||||
const int instance_idx = selection.get_instance_idx();
|
||||
std::vector<ObjectID> volumes_idxs = std::vector<ObjectID>(model_object->volumes.size());
|
||||
std::vector<Transform3d> volumes_trafos = std::vector<Transform3d>(model_object->volumes.size());
|
||||
for (size_t i = 0; i < model_object->volumes.size(); ++i) {
|
||||
volumes_idxs[i] = model_object->volumes[i]->id();
|
||||
volumes_trafos[i] = model_object->volumes[i]->get_matrix();
|
||||
}
|
||||
|
||||
bool trafos_match = volumes_trafos.size() == m_cut_contours.volumes_trafos.size();
|
||||
if (trafos_match) {
|
||||
for (size_t i = 0; i < model_object->volumes.size(); ++i) {
|
||||
if (!volumes_trafos[i].isApprox(m_cut_contours.volumes_trafos[i])) {
|
||||
trafos_match = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (0.0 < m_cut_z && m_cut_z < m_max_z) {
|
||||
if (m_cut_contours.cut_z != m_cut_z || m_cut_contours.object_id != model_object->id() ||
|
||||
m_cut_contours.instance_idx != instance_idx || m_cut_contours.volumes_idxs != volumes_idxs) {
|
||||
m_cut_contours.instance_idx != instance_idx || m_cut_contours.volumes_idxs != volumes_idxs ||
|
||||
!trafos_match) {
|
||||
m_cut_contours.cut_z = m_cut_z;
|
||||
|
||||
if (m_cut_contours.object_id != model_object->id() || m_cut_contours.volumes_idxs != volumes_idxs)
|
||||
if (m_cut_contours.object_id != model_object->id() || m_cut_contours.volumes_idxs != volumes_idxs || !trafos_match)
|
||||
m_cut_contours.mesh = model_object->raw_mesh();
|
||||
|
||||
m_cut_contours.position = box.center();
|
||||
|
@ -388,6 +401,7 @@ void GLGizmoCut::update_contours()
|
|||
m_cut_contours.object_id = model_object->id();
|
||||
m_cut_contours.instance_idx = instance_idx;
|
||||
m_cut_contours.volumes_idxs = volumes_idxs;
|
||||
m_cut_contours.volumes_trafos = volumes_trafos;
|
||||
m_cut_contours.contours.reset();
|
||||
|
||||
MeshSlicingParams slicing_params;
|
||||
|
|
|
@ -39,6 +39,7 @@ class GLGizmoCut : public GLGizmoBase
|
|||
ObjectID object_id;
|
||||
int instance_idx{ -1 };
|
||||
std::vector<ObjectID> volumes_idxs;
|
||||
std::vector<Transform3d> volumes_trafos;
|
||||
};
|
||||
|
||||
CutContours m_cut_contours;
|
||||
|
|
Loading…
Reference in a new issue