From 7d2038eefba883c4b30db6048bd60f33c1db2e2c Mon Sep 17 00:00:00 2001 From: Filip Sykala - NTB T15p Date: Tue, 26 Sep 2023 13:34:12 +0200 Subject: [PATCH] Fix rotation of mirrored volume(object) Text + SVG Issue SPE-1924 --- src/slic3r/GUI/SurfaceDrag.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/slic3r/GUI/SurfaceDrag.cpp b/src/slic3r/GUI/SurfaceDrag.cpp index c15e17a590..0730811c65 100644 --- a/src/slic3r/GUI/SurfaceDrag.cpp +++ b/src/slic3r/GUI/SurfaceDrag.cpp @@ -341,6 +341,25 @@ void do_local_z_rotate(GLCanvas3D &canvas, double relative_angle) assert(selection.is_single_full_object() || selection.is_single_volume()); if (!selection.is_single_full_object() && !selection.is_single_volume()) return; + // Fix angle for mirrored volume + bool is_mirrored = false; + const GLVolume* gl_volume = selection.get_first_volume(); + if (gl_volume != nullptr) { + if (selection.is_single_full_object()) { + const ModelInstance *instance = get_model_instance(*gl_volume, selection.get_model()->objects); + if (instance != nullptr) + is_mirrored = has_reflection(instance->get_matrix()); + } else { + // selection.is_single_volume() + const ModelVolume *volume = get_model_volume(*gl_volume, selection.get_model()->objects); + if (volume != nullptr) + is_mirrored = has_reflection(volume->get_matrix()); + } + } + if (is_mirrored) + relative_angle *= -1; + + selection.setup_cache(); auto selection_rotate_fnc = [&selection, &relative_angle](){