From 89a7cc4ab0c5541481b4716e060ad36e43b11f10 Mon Sep 17 00:00:00 2001 From: "salt.wei" Date: Fri, 7 Jul 2023 14:36:38 +0800 Subject: [PATCH] ENH: model with a volume but multi-mesh should can be mesh union As title Signed-off-by: salt.wei Change-Id: I4cf12198980a9a5a7d8dbbfc49fd5d807ca97902 --- src/slic3r/GUI/GUI_Factories.cpp | 2 +- src/slic3r/GUI/GUI_ObjectList.cpp | 10 ++++++++++ src/slic3r/GUI/GUI_ObjectList.hpp | 1 + 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/GUI_Factories.cpp b/src/slic3r/GUI/GUI_Factories.cpp index d545bf0d0..7e2710336 100644 --- a/src/slic3r/GUI/GUI_Factories.cpp +++ b/src/slic3r/GUI/GUI_Factories.cpp @@ -927,7 +927,7 @@ void MenuFactory::append_menu_item_merge_parts_to_single_part(wxMenu* menu) menu->AppendSeparator(); append_menu_item(menu, wxID_ANY, _L("Mesh boolean"), _L("Mesh boolean operations including union and subtraction"), [](wxCommandEvent&) { obj_list()->boolean/*merge_volumes*/(); }, "", menu, - []() { return obj_list()->can_merge_to_single_object(); }, m_parent); + []() { return obj_list()->can_mesh_boolean(); }, m_parent); } void MenuFactory::append_menu_items_mirror(wxMenu* menu) diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index 6b7512838..7191737a9 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -3076,6 +3076,16 @@ bool ObjectList::can_merge_to_single_object() const return (*m_objects)[obj_idx]->volumes.size() > 1; } +bool ObjectList::can_mesh_boolean() const +{ + int obj_idx = get_selected_obj_idx(); + if (obj_idx < 0) + return false; + + // selected object should be multi mesh + return (*m_objects)[obj_idx]->volumes.size() > 1 || ((*m_objects)[obj_idx]->volumes.size() == 1 && (*m_objects)[obj_idx]->volumes[0]->is_splittable()); +} + bool ObjectList::has_selected_cut_object() const { wxDataViewItemArray sels; diff --git a/src/slic3r/GUI/GUI_ObjectList.hpp b/src/slic3r/GUI/GUI_ObjectList.hpp index 3316df325..b581b7841 100644 --- a/src/slic3r/GUI/GUI_ObjectList.hpp +++ b/src/slic3r/GUI/GUI_ObjectList.hpp @@ -311,6 +311,7 @@ public: bool can_split_instances(); bool can_merge_to_multipart_object() const; bool can_merge_to_single_object() const; + bool can_mesh_boolean() const; bool has_selected_cut_object() const; void invalidate_cut_info_for_selection();