From c1fd68051de29dfa97cd4388f3d1217ba4cc4637 Mon Sep 17 00:00:00 2001 From: "zhou.xu" Date: Thu, 26 Sep 2024 16:40:40 +0800 Subject: [PATCH] ENH:adjust cut-cutter menu content in 3d view jira: none Change-Id: I384ea7216b5dcebb0869ef7e1b41a4391d7d3b6b --- src/slic3r/GUI/GUI_Factories.cpp | 14 +++++++++++++- src/slic3r/GUI/GUI_Factories.hpp | 3 +++ src/slic3r/GUI/GUI_ObjectList.cpp | 23 ++++++++++++++++------- src/slic3r/GUI/Plater.cpp | 12 ++++++++++-- src/slic3r/GUI/Plater.hpp | 1 + 5 files changed, 43 insertions(+), 10 deletions(-) diff --git a/src/slic3r/GUI/GUI_Factories.cpp b/src/slic3r/GUI/GUI_Factories.cpp index 2292e3fc5..c66139ea3 100644 --- a/src/slic3r/GUI/GUI_Factories.cpp +++ b/src/slic3r/GUI/GUI_Factories.cpp @@ -1337,6 +1337,13 @@ void MenuFactory::create_bbl_assemble_part_menu() menu->AppendSeparator(); } +void MenuFactory::create_cut_cutter_menu() +{ + wxMenu *menu = &m_cut_cutter_menu; + append_menu_item_delete(menu); + append_menu_item_change_type(menu); +} + //BBS: add part plate related logic void MenuFactory::create_plate_menu() { @@ -1436,7 +1443,7 @@ void MenuFactory::init(wxWindow* parent) create_bbl_part_menu(); create_bbl_assemble_object_menu(); create_bbl_assemble_part_menu(); - + create_cut_cutter_menu(); //BBS: add part plate related logic create_plate_menu(); @@ -1511,6 +1518,11 @@ wxMenu *MenuFactory::svg_part_menu() return &m_svg_part_menu; } +wxMenu *MenuFactory::cut_connector_menu() +{ + return &m_cut_cutter_menu; +} + wxMenu* MenuFactory::instance_menu() { return &m_instance_menu; diff --git a/src/slic3r/GUI/GUI_Factories.hpp b/src/slic3r/GUI/GUI_Factories.hpp index a54e4bc79..18147383b 100644 --- a/src/slic3r/GUI/GUI_Factories.hpp +++ b/src/slic3r/GUI/GUI_Factories.hpp @@ -69,6 +69,7 @@ public: wxMenu* part_menu(); wxMenu *text_part_menu(); wxMenu *svg_part_menu(); + wxMenu* cut_connector_menu(); wxMenu* instance_menu(); wxMenu* layer_menu(); wxMenu* multi_selection_menu(); @@ -91,6 +92,7 @@ private: MenuWithSeparators m_part_menu; MenuWithSeparators m_text_part_menu; MenuWithSeparators m_svg_part_menu; + MenuWithSeparators m_cut_cutter_menu; MenuWithSeparators m_sla_object_menu; MenuWithSeparators m_default_menu; MenuWithSeparators m_instance_menu; @@ -126,6 +128,7 @@ private: void create_bbl_part_menu(); void create_bbl_assemble_object_menu(); void create_bbl_assemble_part_menu(); + void create_cut_cutter_menu(); wxMenu* append_submenu_add_generic(wxMenu* menu, ModelVolumeType type); void append_menu_item_add_svg(wxMenu *menu, ModelVolumeType type, bool is_submenu_item = true); diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index 8cca45235..f708e485e 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -5192,9 +5192,16 @@ ModelVolume* ObjectList::get_selected_model_volume() void ObjectList::change_part_type() { ModelVolume* volume = get_selected_model_volume(); - if (!volume) - return; - + if (!volume) { + auto canvas_type = wxGetApp().plater()->get_current_canvas3D()->get_canvas_type(); + if (canvas_type == GLCanvas3D::ECanvasType::CanvasView3D && is_connectors_item_selected()) { + const Selection &selection = wxGetApp().plater()->get_view3D_canvas3D()->get_selection(); + const GLVolume * gl_volume = selection.get_first_volume(); + volume = get_model_volume(*gl_volume, selection.get_model()->objects); + } else { + return; + } + } const int obj_idx = get_selected_obj_idx(); if (obj_idx < 0) return; @@ -5217,10 +5224,12 @@ void ObjectList::change_part_type() wxArrayString names; names.Add(_L("Part")); names.Add(_L("Negative Part")); - names.Add(_L("Modifier")); - if (!volume->is_svg()) { - names.Add(_L("Support Blocker")); - names.Add(_L("Support Enforcer")); + if (!volume->is_cut_connector()) { + names.Add(_L("Modifier")); + if (!volume->is_svg()) { + names.Add(_L("Support Blocker")); + names.Add(_L("Support Enforcer")); + } } SingleChoiceDialog dlg(_L("Type:"), _L("Choose part type"), names, int(type)); diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index f2ca4d139..65051be87 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -7445,8 +7445,15 @@ void Plater::priv::on_right_click(RBtnEvent& evt) else if (is_part) { const GLVolume * gl_volume = selection.get_first_volume(); const ModelVolume *model_volume = get_model_volume(*gl_volume, selection.get_model()->objects); - menu = (model_volume != nullptr && model_volume->is_svg()) ? menus.svg_part_menu() : - menus.part_menu(); + if (model_volume != nullptr) { + if (model_volume->is_svg()) { + menu = menus.svg_part_menu(); + } else if (model_volume->is_cut_connector()) { + menu = menus.cut_connector_menu(); + } else { + menu = menus.part_menu(); + } + } } else menu = menus.multi_selection_menu(); } @@ -14364,6 +14371,7 @@ wxMenu* Plater::plate_menu() { return p->menus.plate_menu(); wxMenu* Plater::object_menu() { return p->menus.object_menu(); } wxMenu *Plater::part_menu() { return p->menus.part_menu(); } wxMenu *Plater::svg_part_menu() { return p->menus.svg_part_menu(); } +wxMenu* Plater::cut_connector_menu() { return p->menus.cut_connector_menu(); } wxMenu* Plater::sla_object_menu() { return p->menus.sla_object_menu(); } wxMenu* Plater::default_menu() { return p->menus.default_menu(); } wxMenu* Plater::instance_menu() { return p->menus.instance_menu(); } diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index 92183fdfa..221ca4d57 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -726,6 +726,7 @@ public: wxMenu* object_menu(); wxMenu* part_menu(); wxMenu* svg_part_menu(); + wxMenu* cut_connector_menu(); wxMenu* sla_object_menu(); wxMenu* default_menu(); wxMenu* instance_menu();