FIX:world displacement should convert to local displacement

jira: none
Change-Id: I6910735ad7ccf9d8393b8e0085cb486038ed0c4b
This commit is contained in:
zhou.xu 2024-07-09 18:20:46 +08:00 committed by Lane.Wei
parent ba035f55a4
commit e5cb4f0539
1 changed files with 5 additions and 2 deletions

View File

@ -2440,9 +2440,12 @@ void GLGizmoMeasure::set_distance(bool same_model_object, const Vec3d &displacem
selection->set_mode(same_model_object ? Selection::Volume : Selection::Instance); selection->set_mode(same_model_object ? Selection::Volume : Selection::Instance);
m_pending_scale ++; m_pending_scale ++;
if (same_model_object == false) { if (same_model_object == false) {
selection->translate(v->object_idx(), v->instance_idx(), displacement); auto object_displacement = v->get_instance_transformation().get_matrix_no_offset().inverse() * displacement;
selection->translate(v->object_idx(), v->instance_idx(), object_displacement);
} else { } else {
selection->translate(v->object_idx(), v->instance_idx(), v->volume_idx(), displacement); Geometry::Transformation tran(v->world_matrix());
auto local_displacement = tran.get_matrix_no_offset().inverse() * displacement;
selection->translate(v->object_idx(), v->instance_idx(), v->volume_idx(), local_displacement);
} }
wxGetApp().plater()->canvas3D()->do_move(""); wxGetApp().plater()->canvas3D()->do_move("");
register_single_mesh_pick(); register_single_mesh_pick();