Fix:Retain the brim ears during model merging

jira: STUDIO-10122
Change-Id: Iae35e4137f64a6d697b90bf76f0e6fbc4d8025c4
(cherry picked from commit cf5a2c9046490a1f34346713947b0e016f127b07)
This commit is contained in:
Mack
2025-04-02 15:46:53 +08:00
committed by Noisyfox
parent 6aadc1bec7
commit ee169528c5
2 changed files with 19 additions and 2 deletions

View File

@@ -42,6 +42,11 @@ struct BrimPoint
return result.cast<float>();
}
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);

View File

@@ -2978,6 +2978,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
@@ -2986,8 +2993,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);