diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp b/src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp index 970ee6d5b..bfcb4b2ba 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp @@ -71,9 +71,7 @@ bool GLGizmoMeshBoolean::gizmo_event(SLAGizmoEventType action, const Vec2d& mous const ModelInstance* mi = mo->instances[m_parent.get_selection().get_instance_idx()]; std::vector trafo_matrices; for (const ModelVolume* mv : mo->volumes) { - //if (mv->is_model_part()) { - trafo_matrices.emplace_back(mi->get_transformation().get_matrix() * mv->get_matrix()); - //} + trafo_matrices.emplace_back(mi->get_transformation().get_matrix() * mv->get_matrix()); } const Camera& camera = wxGetApp().plater()->get_camera(); @@ -211,6 +209,9 @@ void GLGizmoMeshBoolean::on_set_state() CommonGizmosDataID GLGizmoMeshBoolean::on_get_requirements() const { + if (m_c && m_c->raycaster_ptr()) { + m_c->raycaster_ptr()->set_only_support_model_part_flag(false); + } return CommonGizmosDataID( int(CommonGizmosDataID::SelectionInfo) | int(CommonGizmosDataID::InstancesHider) diff --git a/src/slic3r/GUI/Gizmos/GLGizmosCommon.cpp b/src/slic3r/GUI/Gizmos/GLGizmosCommon.cpp index 27d05ca9c..c0d88108f 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosCommon.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosCommon.cpp @@ -66,6 +66,10 @@ HollowedMesh* CommonGizmosDataPool::hollowed_mesh() const return hol_mesh->is_valid() ? hol_mesh : nullptr; } +CommonGizmosDataObjects::Raycaster *CommonGizmosDataPool::raycaster_ptr() { + return dynamic_cast(m_data.at(CommonGizmosDataID::Raycaster).get()); +} + Raycaster* CommonGizmosDataPool::raycaster() const { Raycaster* rc = dynamic_cast(m_data.at(CommonGizmosDataID::Raycaster).get()); @@ -326,8 +330,13 @@ void Raycaster::on_update() } if (meshes.empty()) { for (const ModelVolume* mv : mvs) { - if (mv->is_model_part()) + if (m_only_support_model_part) { + if (mv->is_model_part()) { + meshes.push_back(&mv->mesh()); + } + } else { meshes.push_back(&mv->mesh()); + } } } @@ -353,9 +362,9 @@ std::vector Raycaster::raycasters() const return mrcs; } - - - +void CommonGizmosDataObjects::Raycaster::set_only_support_model_part_flag(bool flag) { + m_only_support_model_part = flag; +} void ObjectClipper::on_update() { diff --git a/src/slic3r/GUI/Gizmos/GLGizmosCommon.hpp b/src/slic3r/GUI/Gizmos/GLGizmosCommon.hpp index 8e5956c50..a3414c652 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosCommon.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosCommon.hpp @@ -90,6 +90,7 @@ public: CommonGizmosDataObjects::SelectionInfo* selection_info() const; CommonGizmosDataObjects::InstancesHider* instances_hider() const; CommonGizmosDataObjects::HollowedMesh* hollowed_mesh() const; + CommonGizmosDataObjects::Raycaster * raycaster_ptr(); CommonGizmosDataObjects::Raycaster* raycaster() const; CommonGizmosDataObjects::ObjectClipper* object_clipper() const; CommonGizmosDataObjects::SupportsClipper* supports_clipper() const; @@ -242,6 +243,7 @@ public: const MeshRaycaster* raycaster() const { assert(m_raycasters.size() == 1); return m_raycasters.front().get(); } std::vector raycasters() const; + void set_only_support_model_part_flag(bool); protected: void on_update() override; @@ -250,6 +252,7 @@ protected: private: std::vector> m_raycasters; std::vector m_old_meshes; + bool m_only_support_model_part{true}; };