From aea6681adf122d514fecb668fa3a43aada76042a Mon Sep 17 00:00:00 2001 From: Enrico Turri Date: Thu, 24 Jan 2019 10:52:48 +0100 Subject: [PATCH 1/3] Fixed visual hints orientation for sidebar rotation fields and single full instance selection --- src/slic3r/GUI/GLCanvas3D.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 63b9864b71..f3de5a7391 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -2172,7 +2172,7 @@ void GLCanvas3D::Selection::render_sidebar_hints(const std::string& sidebar_fiel if (is_single_full_instance()) { ::glTranslated(center(0), center(1), center(2)); - if (boost::starts_with(sidebar_field, "scale") || boost::starts_with(sidebar_field, "size")) + if (!boost::starts_with(sidebar_field, "position")) { Transform3d orient_matrix = (*m_volumes)[*m_list.begin()]->get_instance_transformation().get_matrix(true, false, true, true); ::glMultMatrixd(orient_matrix.data()); @@ -2181,9 +2181,7 @@ void GLCanvas3D::Selection::render_sidebar_hints(const std::string& sidebar_fiel else if (is_single_volume() || is_single_modifier()) { Transform3d orient_matrix = (*m_volumes)[*m_list.begin()]->get_instance_transformation().get_matrix(true, false, true, true); - const Vec3d& offset = get_bounding_box().center(); - - ::glTranslated(offset(0), offset(1), offset(2)); + ::glTranslated(center(0), center(1), center(2)); ::glMultMatrixd(orient_matrix.data()); } else From a406a44946dd5df626e454b161173bd2f215e9de Mon Sep 17 00:00:00 2001 From: Enrico Turri Date: Thu, 24 Jan 2019 11:37:58 +0100 Subject: [PATCH 2/3] Sidebar object manipulation fields updated on idle event --- src/slic3r/GUI/GUI_App.cpp | 2 -- src/slic3r/GUI/GUI_ObjectManipulation.cpp | 14 ++++---------- src/slic3r/GUI/GUI_ObjectManipulation.hpp | 2 -- 3 files changed, 4 insertions(+), 14 deletions(-) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 462f3c3286..6ff6a37a46 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -169,10 +169,8 @@ bool GUI_App::OnInit() if (app_config->dirty()) app_config->save(); -#if !ENABLE_IMPROVED_SIDEBAR_OBJECTS_MANIPULATION if (this->plater() != nullptr) this->obj_manipul()->update_if_dirty(); -#endif // !ENABLE_IMPROVED_SIDEBAR_OBJECTS_MANIPULATION }); // On OS X the UI tends to freeze in weird ways if modal dialogs(config wizard, update notifications, ...) diff --git a/src/slic3r/GUI/GUI_ObjectManipulation.cpp b/src/slic3r/GUI/GUI_ObjectManipulation.cpp index 77bf29120a..363294ce83 100644 --- a/src/slic3r/GUI/GUI_ObjectManipulation.cpp +++ b/src/slic3r/GUI/GUI_ObjectManipulation.cpp @@ -327,15 +327,14 @@ void ObjectManipulation::update_settings_value(const GLCanvas3D::Selection& sele else reset_settings_value(); -#if ENABLE_IMPROVED_SIDEBAR_OBJECTS_MANIPULATION - update_if_dirty(); -#else m_dirty = true; -#endif // ENABLE_IMPROVED_SIDEBAR_OBJECTS_MANIPULATION } void ObjectManipulation::update_if_dirty() { + if (!m_dirty) + return; + #if ENABLE_IMPROVED_SIDEBAR_OBJECTS_MANIPULATION if (m_cache.move_label_string != _(m_new_move_label_string)+ ":") { @@ -414,9 +413,6 @@ void ObjectManipulation::update_if_dirty() else m_og->disable(); #else - if (! m_dirty) - return; - m_move_Label->SetLabel(_(m_new_move_label_string)); m_rotate_Label->SetLabel(_(m_new_rotate_label_string)); m_scale_Label->SetLabel(_(m_new_scale_label_string)); @@ -446,9 +442,9 @@ void ObjectManipulation::update_if_dirty() m_og->enable(); else m_og->disable(); +#endif // ENABLE_IMPROVED_SIDEBAR_OBJECTS_MANIPULATION m_dirty = false; -#endif // ENABLE_IMPROVED_SIDEBAR_OBJECTS_MANIPULATION } void ObjectManipulation::reset_settings_value() @@ -461,9 +457,7 @@ void ObjectManipulation::reset_settings_value() #if ENABLE_IMPROVED_SIDEBAR_OBJECTS_MANIPULATION m_cache.instance.reset(); #endif // ENABLE_IMPROVED_SIDEBAR_OBJECTS_MANIPULATION -#if !ENABLE_IMPROVED_SIDEBAR_OBJECTS_MANIPULATION m_dirty = true; -#endif // !ENABLE_IMPROVED_SIDEBAR_OBJECTS_MANIPULATION } void ObjectManipulation::change_position_value(const Vec3d& position) diff --git a/src/slic3r/GUI/GUI_ObjectManipulation.hpp b/src/slic3r/GUI/GUI_ObjectManipulation.hpp index d0afa528eb..09e6db15b7 100644 --- a/src/slic3r/GUI/GUI_ObjectManipulation.hpp +++ b/src/slic3r/GUI/GUI_ObjectManipulation.hpp @@ -62,10 +62,8 @@ class ObjectManipulation : public OG_Settings wxStaticText* m_scale_Label = nullptr; wxStaticText* m_rotate_Label = nullptr; -#if !ENABLE_IMPROVED_SIDEBAR_OBJECTS_MANIPULATION // Needs to be updated from OnIdle? bool m_dirty = false; -#endif // !ENABLE_IMPROVED_SIDEBAR_OBJECTS_MANIPULATION // Cached labels for the delayed update, not localized! std::string m_new_move_label_string; std::string m_new_rotate_label_string; From 8366ac4a07e607174c44cec2f2deeb097dc3e3ef Mon Sep 17 00:00:00 2001 From: Enrico Turri Date: Thu, 24 Jan 2019 13:32:45 +0100 Subject: [PATCH 3/3] Fixed output of volumes to .amf files --- src/libslic3r/Format/AMF.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/libslic3r/Format/AMF.cpp b/src/libslic3r/Format/AMF.cpp index 83f931b0cf..a9ebca8047 100644 --- a/src/libslic3r/Format/AMF.cpp +++ b/src/libslic3r/Format/AMF.cpp @@ -918,12 +918,14 @@ bool store_amf(const char *path, Model *model, const DynamicPrintConfig *config) auto &stl = volume->mesh.stl; if (stl.v_shared == nullptr) stl_generate_shared_vertices(&stl); - for (size_t i = 0; i < stl.stats.shared_vertices; ++ i) { + const Transform3d& matrix = volume->get_matrix(); + for (size_t i = 0; i < stl.stats.shared_vertices; ++i) { stream << " \n"; stream << " \n"; - stream << " " << stl.v_shared[i](0) << "\n"; - stream << " " << stl.v_shared[i](1) << "\n"; - stream << " " << stl.v_shared[i](2) << "\n"; + Vec3d v = matrix * stl.v_shared[i].cast(); + stream << " " << v(0) << "\n"; + stream << " " << v(1) << "\n"; + stream << " " << v(2) << "\n"; stream << " \n"; stream << " \n"; }