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();