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)
This commit is contained in:
zhou.xu
2025-03-20 14:17:33 +08:00
committed by Noisyfox
parent b29174f767
commit f6784a2dda
3 changed files with 20 additions and 4 deletions

View File

@@ -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()]; const ModelInstance* mi = mo->instances[m_parent.get_selection().get_instance_idx()];
std::vector<Transform3d> trafo_matrices; std::vector<Transform3d> trafo_matrices;
for (const ModelVolume* mv : mo->volumes) { 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(); const Camera& camera = wxGetApp().plater()->get_camera();
@@ -180,6 +178,9 @@ void GLGizmoMeshBoolean::on_set_state()
CommonGizmosDataID GLGizmoMeshBoolean::on_get_requirements() const 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( return CommonGizmosDataID(
int(CommonGizmosDataID::SelectionInfo) int(CommonGizmosDataID::SelectionInfo)
| int(CommonGizmosDataID::InstancesHider) | int(CommonGizmosDataID::InstancesHider)

View File

@@ -59,6 +59,10 @@ InstancesHider* CommonGizmosDataPool::instances_hider() const
return inst_hider->is_valid() ? inst_hider : nullptr; return inst_hider->is_valid() ? inst_hider : nullptr;
} }
CommonGizmosDataObjects::Raycaster *CommonGizmosDataPool::raycaster_ptr() {
return dynamic_cast<Raycaster *>(m_data.at(CommonGizmosDataID::Raycaster).get());
}
Raycaster* CommonGizmosDataPool::raycaster() const Raycaster* CommonGizmosDataPool::raycaster() const
{ {
Raycaster* rc = dynamic_cast<Raycaster*>(m_data.at(CommonGizmosDataID::Raycaster).get()); Raycaster* rc = dynamic_cast<Raycaster*>(m_data.at(CommonGizmosDataID::Raycaster).get());
@@ -220,8 +224,13 @@ void Raycaster::on_update()
std::vector<const TriangleMesh*> meshes; std::vector<const TriangleMesh*> meshes;
const std::vector<ModelVolume*>& mvs = mo->volumes; const std::vector<ModelVolume*>& mvs = mo->volumes;
for (const ModelVolume* mv : mvs) { 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()); meshes.push_back(&mv->mesh());
}
} }
if (meshes != m_old_meshes) { if (meshes != m_old_meshes) {
@@ -246,6 +255,9 @@ std::vector<const MeshRaycaster*> Raycaster::raycasters() const
return mrcs; return mrcs;
} }
void CommonGizmosDataObjects::Raycaster::set_only_support_model_part_flag(bool flag) {
m_only_support_model_part = flag;
}
void ObjectClipper::on_update() void ObjectClipper::on_update()
{ {

View File

@@ -93,6 +93,7 @@ public:
CommonGizmosDataObjects::SelectionInfo* selection_info() const; CommonGizmosDataObjects::SelectionInfo* selection_info() const;
CommonGizmosDataObjects::InstancesHider* instances_hider() const; CommonGizmosDataObjects::InstancesHider* instances_hider() const;
// CommonGizmosDataObjects::HollowedMesh* hollowed_mesh() const; // CommonGizmosDataObjects::HollowedMesh* hollowed_mesh() const;
CommonGizmosDataObjects::Raycaster * raycaster_ptr();
CommonGizmosDataObjects::Raycaster* raycaster() const; CommonGizmosDataObjects::Raycaster* raycaster() const;
CommonGizmosDataObjects::ObjectClipper* object_clipper() const; CommonGizmosDataObjects::ObjectClipper* object_clipper() const;
// CommonGizmosDataObjects::SupportsClipper* supports_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(); } const MeshRaycaster* raycaster() const { assert(m_raycasters.size() == 1); return m_raycasters.front().get(); }
std::vector<const MeshRaycaster*> raycasters() const; std::vector<const MeshRaycaster*> raycasters() const;
void set_only_support_model_part_flag(bool);
protected: protected:
void on_update() override; void on_update() override;
@@ -219,6 +221,7 @@ protected:
private: private:
std::vector<std::unique_ptr<MeshRaycaster>> m_raycasters; std::vector<std::unique_ptr<MeshRaycaster>> m_raycasters;
std::vector<const TriangleMesh*> m_old_meshes; std::vector<const TriangleMesh*> m_old_meshes;
bool m_only_support_model_part{true};
}; };