From f6784a2dda6a76b3ed25c4c3e441ece7d0e730f8 Mon Sep 17 00:00:00 2001 From: "zhou.xu" Date: Thu, 20 Mar 2025 14:17:33 +0800 Subject: [PATCH] FIX:add set_only_support_model_part_flag api for support negative_volume and so on in boolean gizmo jira: none Change-Id: Id4bc54ff27652b587227c98c8fb4dc27c34da666 (cherry picked from commit 512012c8d2aaf5f91748b2b6cf9a491ca351d5cc) --- src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp | 7 ++++--- src/slic3r/GUI/Gizmos/GLGizmosCommon.cpp | 14 +++++++++++++- src/slic3r/GUI/Gizmos/GLGizmosCommon.hpp | 3 +++ 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp b/src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp index b237593f93..bfff70d315 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp @@ -34,9 +34,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(); @@ -180,6 +178,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 fdcd417796..b8d7dfa101 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosCommon.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosCommon.cpp @@ -59,6 +59,10 @@ InstancesHider* CommonGizmosDataPool::instances_hider() const return inst_hider->is_valid() ? inst_hider : 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()); @@ -220,8 +224,13 @@ void Raycaster::on_update() std::vector meshes; const std::vector& mvs = mo->volumes; 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()); + } } if (meshes != m_old_meshes) { @@ -246,6 +255,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 cad77c7e5d..2ab910785b 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosCommon.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosCommon.hpp @@ -93,6 +93,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; @@ -211,6 +212,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; @@ -219,6 +221,7 @@ protected: private: std::vector> m_raycasters; std::vector m_old_meshes; + bool m_only_support_model_part{true}; };