From e5cb4f053964b29364116cea7fb868df15f11c3c Mon Sep 17 00:00:00 2001 From: "zhou.xu" Date: Tue, 9 Jul 2024 18:20:46 +0800 Subject: [PATCH] FIX:world displacement should convert to local displacement jira: none Change-Id: I6910735ad7ccf9d8393b8e0085cb486038ed0c4b --- src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp b/src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp index d4c0e2d67..95d2116f8 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp @@ -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); m_pending_scale ++; 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 { - 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(""); register_single_mesh_pick();