ENH:adjust cut-cutter menu content in 3d view

jira: none
Change-Id: I384ea7216b5dcebb0869ef7e1b41a4391d7d3b6b
This commit is contained in:
zhou.xu 2024-09-26 16:40:40 +08:00 committed by Lane.Wei
parent f1d774f6c0
commit c1fd68051d
5 changed files with 43 additions and 10 deletions

View File

@ -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;

View File

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

View File

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

View File

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

View File

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