From 6e92b4fc3b5304812e691d1df63598aed2db17b0 Mon Sep 17 00:00:00 2001 From: enricoturri1966 Date: Mon, 15 Nov 2021 13:00:12 +0100 Subject: [PATCH] Tech ENABLE_INSTANCE_COORDINATES_FOR_VOLUMES - Mirror transform in local system for volumes and a few fixes in rotation Fixed conflicts during rebase with master --- src/slic3r/GUI/GUI_ObjectManipulation.cpp | 2 +- src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp | 4 ++++ src/slic3r/GUI/Selection.cpp | 6 ++++-- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/slic3r/GUI/GUI_ObjectManipulation.cpp b/src/slic3r/GUI/GUI_ObjectManipulation.cpp index 28d5953f9e..8a100f66ca 100644 --- a/src/slic3r/GUI/GUI_ObjectManipulation.cpp +++ b/src/slic3r/GUI/GUI_ObjectManipulation.cpp @@ -926,7 +926,7 @@ void ObjectManipulation::update_mirror_buttons_visibility() std::array new_states = {mbHidden, mbHidden, mbHidden}; #if ENABLE_INSTANCE_COORDINATES_FOR_VOLUMES - if (!is_world_coordinates()) { + if (is_local_coordinates()) { #else if (!m_world_coordinates) { #endif // ENABLE_INSTANCE_COORDINATES_FOR_VOLUMES diff --git a/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp b/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp index 1c1a658699..38a09976db 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp @@ -327,6 +327,10 @@ void GLGizmoRotate::init_data_from_selection(const Selection& selection) const GLVolume& v = *selection.get_volume(*selection.get_volume_idxs().begin()); m_orient_matrix = v.get_instance_transformation().get_matrix(true, false, true, true) * v.get_volume_transformation().get_matrix(true, false, true, true); } + else { + const GLVolume& v = *selection.get_volume(*selection.get_volume_idxs().begin()); + m_orient_matrix = v.get_instance_transformation().get_matrix(true, false, true, true); + } #else if (wxGetApp().obj_manipul()->get_world_coordinates()) m_orient_matrix = Transform3d::Identity(); diff --git a/src/slic3r/GUI/Selection.cpp b/src/slic3r/GUI/Selection.cpp index 033f798691..2ee0086ab7 100644 --- a/src/slic3r/GUI/Selection.cpp +++ b/src/slic3r/GUI/Selection.cpp @@ -779,7 +779,7 @@ void Selection::translate(const Vec3d& displacement, bool local) #if ENABLE_INSTANCE_COORDINATES_FOR_VOLUMES else if (type == ECoordinatesType::Local) { const VolumeCache& volume_data = m_cache.volumes_data[i]; - const Vec3d local_displacement = (volume_data.get_volume_rotation_matrix() * volume_data.get_volume_mirror_matrix()) * displacement; + const Vec3d local_displacement = volume_data.get_volume_rotation_matrix() * displacement; v.set_volume_offset(volume_data.get_volume_position() + local_displacement); } #endif // ENABLE_INSTANCE_COORDINATES_FOR_VOLUMES @@ -799,11 +799,13 @@ void Selection::translate(const Vec3d& displacement, bool local) if (is_from_fully_selected_instance(i)) { #if ENABLE_INSTANCE_COORDINATES_FOR_VOLUMES if (type == ECoordinatesType::Local) { + const VolumeCache& volume_data = m_cache.volumes_data[i]; + const Vec3d world_displacement = volume_data.get_instance_rotation_matrix() * displacement; #else if (local) { -#endif // ENABLE_INSTANCE_COORDINATES_FOR_VOLUMES const VolumeCache& volume_data = m_cache.volumes_data[i]; const Vec3d world_displacement = (volume_data.get_instance_rotation_matrix() * volume_data.get_instance_mirror_matrix()) * displacement; +#endif // ENABLE_INSTANCE_COORDINATES_FOR_VOLUMES v.set_instance_offset(volume_data.get_instance_position() + world_displacement); } else