diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index 3cc18172e..08d3b6c4b 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -2193,7 +2193,7 @@ int ObjectList::load_mesh_part(const TriangleMesh &mesh, const wxString &name, c Geometry::Transformation instance_transformation = mo->instances[0]->get_transformation(); // apply the instance transform to all volumes and reset instance transform except the offset - apply_object_instance_transfrom_to_all_volumes(mo); + apply_object_instance_transfrom_to_all_volumes(mo, !is_temp); ModelVolume *mv = mo->add_volume(mesh); mv->name = name.ToStdString(); @@ -5210,17 +5210,20 @@ bool ObjectList::has_paint_on_segmentation() return m_objects_model->HasInfoItem(InfoItemType::MmuSegmentation); } -void ObjectList::apply_object_instance_transfrom_to_all_volumes(ModelObject *model_object) { +void ObjectList::apply_object_instance_transfrom_to_all_volumes(ModelObject *model_object, bool need_update_assemble_matrix) +{ const Geometry::Transformation &instance_transformation = model_object->instances[0]->get_transformation(); Vec3d original_instance_center = instance_transformation.get_offset(); - // apply the instance_transform(except offset) to assemble_transform - Geometry::Transformation instance_transformation_copy = instance_transformation; - instance_transformation_copy.set_offset(Vec3d(0, 0, 0)); // remove the effect of offset - const Transform3d & instance_inverse_matrix = instance_transformation_copy.get_matrix().inverse(); - const Transform3d & assemble_matrix = model_object->instances[0]->get_assemble_transformation().get_matrix(); - Transform3d new_assemble_transform = assemble_matrix * instance_inverse_matrix; - model_object->instances[0]->set_assemble_from_transform(new_assemble_transform); + if (need_update_assemble_matrix) { + // apply the instance_transform(except offset) to assemble_transform + Geometry::Transformation instance_transformation_copy = instance_transformation; + instance_transformation_copy.set_offset(Vec3d(0, 0, 0)); // remove the effect of offset + const Transform3d &instance_inverse_matrix = instance_transformation_copy.get_matrix().inverse(); + const Transform3d &assemble_matrix = model_object->instances[0]->get_assemble_transformation().get_matrix(); + Transform3d new_assemble_transform = assemble_matrix * instance_inverse_matrix; + model_object->instances[0]->set_assemble_from_transform(new_assemble_transform); + } // apply the instance_transform to volumn const Transform3d &transformation_matrix = instance_transformation.get_matrix(); diff --git a/src/slic3r/GUI/GUI_ObjectList.hpp b/src/slic3r/GUI/GUI_ObjectList.hpp index a69e4f63e..1ec7c0bdd 100644 --- a/src/slic3r/GUI/GUI_ObjectList.hpp +++ b/src/slic3r/GUI/GUI_ObjectList.hpp @@ -455,7 +455,7 @@ private: void OnEditingDone(wxDataViewEvent &event); // apply the instance transform to all volumes and reset instance transform except the offset - void apply_object_instance_transfrom_to_all_volumes(ModelObject *model_object); + void apply_object_instance_transfrom_to_all_volumes(ModelObject *model_object, bool need_update_assemble_matrix = true); std::vector m_columns_width; };