diff --git a/src/libslic3r/BrimEarsPoint.hpp b/src/libslic3r/BrimEarsPoint.hpp index d768d2197..a859d54f2 100644 --- a/src/libslic3r/BrimEarsPoint.hpp +++ b/src/libslic3r/BrimEarsPoint.hpp @@ -42,6 +42,11 @@ struct BrimPoint return result.cast(); } + void set_transform(const Transform3d& trsf) + { + pos = transform(trsf); + } + bool operator==(const BrimPoint &sp) const { float rdiff = std::abs(head_front_radius - sp.head_front_radius); diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index 5df9547d8..83ab04286 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -3039,6 +3039,13 @@ void ObjectList::merge(bool to_multipart_object) // merge layers for (const auto& range : object->layer_config_ranges) new_object->layer_config_ranges.emplace(range); + + // merge brim ears + BrimPoints temp_brim_points = object->brim_points; + for(auto& p : temp_brim_points) { + p.set_transform(transformation_matrix); + new_object->brim_points.push_back(p); + } } //BBS: ensure on bed, and no need to center around origin @@ -3047,8 +3054,13 @@ void ObjectList::merge(bool to_multipart_object) new_object->translate_instances(-new_object->origin_translation); new_object->origin_translation = Vec3d::Zero(); //BBS init asssmble transformation - Geometry::Transformation t = new_object->instances[0]->get_transformation(); - new_object->instances[0]->set_assemble_transformation(t); + Geometry::Transformation new_object_trsf = new_object->instances[0]->get_transformation(); + new_object->instances[0]->set_assemble_transformation(new_object_trsf); + + const Transform3d& new_object_inverse_matrix = new_object_trsf.get_matrix().inverse(); + for (auto& p : new_object->brim_points) { + p.set_transform(new_object_inverse_matrix); + } //BBS: notify it before remove notify_instance_updated(m_objects->size() - 1);