From 8cf66f52f6043a97b1620bce75b18b0e106b0a17 Mon Sep 17 00:00:00 2001 From: enricoturri1966 Date: Mon, 18 Oct 2021 15:26:31 +0200 Subject: [PATCH] Tech ENABLE_WORLD_COORDINATE - Modified method Selection::requires_uniform_scale() --- src/slic3r/GUI/Gizmos/GLGizmosManager.cpp | 19 +++++++++---------- src/slic3r/GUI/Selection.cpp | 7 +++++++ 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp index de7bdbcb6..4e761c6b4 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp @@ -241,9 +241,12 @@ void GLGizmosManager::update_data() enable_grabber(Rotate, 0, !is_wipe_tower); enable_grabber(Rotate, 1, !is_wipe_tower); +#if ENABLE_WORLD_COORDINATE + bool enable_scale_xyz = !selection.requires_uniform_scale(); +#else bool enable_scale_xyz = selection.is_single_full_instance() || selection.is_single_volume() || selection.is_single_modifier(); - for (unsigned int i = 0; i < 6; ++i) - { +#endif // ENABLE_WORLD_COORDINATE + for (unsigned int i = 0; i < 6; ++i) { enable_grabber(Scale, i, enable_scale_xyz); } @@ -252,8 +255,7 @@ void GLGizmosManager::update_data() ? get_current()->get_requirements() : CommonGizmosDataID(0)); - if (selection.is_single_full_instance()) - { + if (selection.is_single_full_instance()) { // all volumes in the selection belongs to the same instance, any of them contains the needed data, so we take the first const GLVolume* volume = selection.get_volume(*selection.get_volume_idxs().begin()); set_scale(volume->get_instance_scaling_factor()); @@ -263,8 +265,7 @@ void GLGizmosManager::update_data() set_sla_support_data(model_object); set_painter_gizmo_data(); } - else if (selection.is_single_volume() || selection.is_single_modifier()) - { + else if (selection.is_single_volume() || selection.is_single_modifier()) { const GLVolume* volume = selection.get_volume(*selection.get_volume_idxs().begin()); set_scale(volume->get_volume_scaling_factor()); set_rotation(Vec3d::Zero()); @@ -272,8 +273,7 @@ void GLGizmosManager::update_data() set_sla_support_data(nullptr); set_painter_gizmo_data(); } - else if (is_wipe_tower) - { + else if (is_wipe_tower) { DynamicPrintConfig& config = wxGetApp().preset_bundle->prints.get_edited_preset().config; set_scale(Vec3d::Ones()); set_rotation(Vec3d(0., 0., (M_PI/180.) * dynamic_cast(config.option("wipe_tower_rotation_angle"))->value)); @@ -281,8 +281,7 @@ void GLGizmosManager::update_data() set_sla_support_data(nullptr); set_painter_gizmo_data(); } - else - { + else { set_scale(Vec3d::Ones()); set_rotation(Vec3d::Zero()); set_flattening_data(selection.is_from_single_object() ? selection.get_model()->objects[selection.get_object_idx()] : nullptr); diff --git a/src/slic3r/GUI/Selection.cpp b/src/slic3r/GUI/Selection.cpp index dcdd062f6..ae960349d 100644 --- a/src/slic3r/GUI/Selection.cpp +++ b/src/slic3r/GUI/Selection.cpp @@ -600,8 +600,15 @@ bool Selection::matches(const std::vector& volume_idxs) const bool Selection::requires_uniform_scale() const { +#if ENABLE_WORLD_COORDINATE + if (is_single_modifier() || is_single_volume()) + return !Geometry::is_rotation_ninety_degrees(Geometry::Transformation(get_volume(*m_list.begin())->world_matrix()).get_rotation()); + else if (is_single_full_instance() && wxGetApp().obj_manipul()->get_world_coordinates()) + return !Geometry::is_rotation_ninety_degrees(get_volume(*m_list.begin())->get_instance_rotation()); +#else if (is_single_full_instance() || is_single_modifier() || is_single_volume()) return false; +#endif // ENABLE_WORLD_COORDINATE return true; }