mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-08-16 19:15:56 +08:00
Implemented menu for Text Volume
This commit is contained in:
parent
6482775f0d
commit
1627e30aaf
@ -991,19 +991,8 @@ void MenuFactory::create_sla_object_menu()
|
|||||||
m_sla_object_menu.AppendSeparator();
|
m_sla_object_menu.AppendSeparator();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MenuFactory::create_part_menu()
|
void MenuFactory::append_immutable_part_menu_items(wxMenu* menu)
|
||||||
{
|
{
|
||||||
wxMenu* menu = &m_part_menu;
|
|
||||||
#ifdef __WXOSX__
|
|
||||||
append_menu_items_osx(menu);
|
|
||||||
#endif // __WXOSX__
|
|
||||||
append_menu_item_edit_text(menu);
|
|
||||||
append_menu_item_delete(menu);
|
|
||||||
append_menu_item_reload_from_disk(menu);
|
|
||||||
append_menu_item_replace_with_stl(menu);
|
|
||||||
append_menu_item_export_stl(menu);
|
|
||||||
append_menu_item_fix_through_netfabb(menu);
|
|
||||||
append_menu_item_simplify(menu);
|
|
||||||
append_menu_items_mirror(menu);
|
append_menu_items_mirror(menu);
|
||||||
|
|
||||||
append_menu_item(menu, wxID_ANY, _L("Split"), _L("Split the selected object into individual parts"),
|
append_menu_item(menu, wxID_ANY, _L("Split"), _L("Split the selected object into individual parts"),
|
||||||
@ -1012,7 +1001,42 @@ void MenuFactory::create_part_menu()
|
|||||||
|
|
||||||
menu->AppendSeparator();
|
menu->AppendSeparator();
|
||||||
append_menu_item_change_type(menu);
|
append_menu_item_change_type(menu);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MenuFactory::append_mutable_part_menu_items(wxMenu* menu)
|
||||||
|
{
|
||||||
|
append_menu_item_settings(menu);
|
||||||
|
append_menu_item_change_extruder(menu);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MenuFactory::create_part_menu()
|
||||||
|
{
|
||||||
|
wxMenu* menu = &m_part_menu;
|
||||||
|
#ifdef __WXOSX__
|
||||||
|
append_menu_items_osx(menu);
|
||||||
|
#endif // __WXOSX__
|
||||||
|
append_menu_item_delete(menu);
|
||||||
|
append_menu_item_reload_from_disk(menu);
|
||||||
|
append_menu_item_replace_with_stl(menu);
|
||||||
|
append_menu_item_export_stl(menu);
|
||||||
|
append_menu_item_fix_through_netfabb(menu);
|
||||||
|
append_menu_item_simplify(menu);
|
||||||
|
|
||||||
|
append_immutable_part_menu_items(menu);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MenuFactory::create_text_part_menu()
|
||||||
|
{
|
||||||
|
wxMenu* menu = &m_text_part_menu;
|
||||||
|
#ifdef __WXOSX__
|
||||||
|
append_menu_items_osx(menu);
|
||||||
|
#endif // __WXOSX__
|
||||||
|
append_menu_item_edit_text(menu);
|
||||||
|
menu->AppendSeparator();
|
||||||
|
append_menu_item_delete(menu);
|
||||||
|
menu->AppendSeparator();
|
||||||
|
|
||||||
|
append_immutable_part_menu_items(menu);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MenuFactory::create_instance_menu()
|
void MenuFactory::create_instance_menu()
|
||||||
@ -1031,6 +1055,7 @@ void MenuFactory::init(wxWindow* parent)
|
|||||||
create_object_menu();
|
create_object_menu();
|
||||||
create_sla_object_menu();
|
create_sla_object_menu();
|
||||||
create_part_menu();
|
create_part_menu();
|
||||||
|
create_text_part_menu();
|
||||||
create_instance_menu();
|
create_instance_menu();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1067,12 +1092,19 @@ wxMenu* MenuFactory::sla_object_menu()
|
|||||||
wxMenu* MenuFactory::part_menu()
|
wxMenu* MenuFactory::part_menu()
|
||||||
{
|
{
|
||||||
append_menu_items_convert_unit(&m_part_menu, 2);
|
append_menu_items_convert_unit(&m_part_menu, 2);
|
||||||
append_menu_item_settings(&m_part_menu);
|
|
||||||
append_menu_item_change_extruder(&m_part_menu);
|
append_mutable_part_menu_items(&m_part_menu);
|
||||||
|
|
||||||
return &m_part_menu;
|
return &m_part_menu;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wxMenu* MenuFactory::text_part_menu()
|
||||||
|
{
|
||||||
|
append_mutable_part_menu_items(&m_text_part_menu);
|
||||||
|
|
||||||
|
return &m_text_part_menu;
|
||||||
|
}
|
||||||
|
|
||||||
wxMenu* MenuFactory::instance_menu()
|
wxMenu* MenuFactory::instance_menu()
|
||||||
{
|
{
|
||||||
return &m_instance_menu;
|
return &m_instance_menu;
|
||||||
|
@ -52,6 +52,7 @@ public:
|
|||||||
wxMenu* object_menu();
|
wxMenu* object_menu();
|
||||||
wxMenu* sla_object_menu();
|
wxMenu* sla_object_menu();
|
||||||
wxMenu* part_menu();
|
wxMenu* part_menu();
|
||||||
|
wxMenu* text_part_menu();
|
||||||
wxMenu* instance_menu();
|
wxMenu* instance_menu();
|
||||||
wxMenu* layer_menu();
|
wxMenu* layer_menu();
|
||||||
wxMenu* multi_selection_menu();
|
wxMenu* multi_selection_menu();
|
||||||
@ -67,6 +68,7 @@ private:
|
|||||||
|
|
||||||
MenuWithSeparators m_object_menu;
|
MenuWithSeparators m_object_menu;
|
||||||
MenuWithSeparators m_part_menu;
|
MenuWithSeparators m_part_menu;
|
||||||
|
MenuWithSeparators m_text_part_menu;
|
||||||
MenuWithSeparators m_sla_object_menu;
|
MenuWithSeparators m_sla_object_menu;
|
||||||
MenuWithSeparators m_default_menu;
|
MenuWithSeparators m_default_menu;
|
||||||
MenuWithSeparators m_instance_menu;
|
MenuWithSeparators m_instance_menu;
|
||||||
@ -80,7 +82,10 @@ private:
|
|||||||
void create_common_object_menu(wxMenu *menu);
|
void create_common_object_menu(wxMenu *menu);
|
||||||
void create_object_menu();
|
void create_object_menu();
|
||||||
void create_sla_object_menu();
|
void create_sla_object_menu();
|
||||||
|
void append_immutable_part_menu_items(wxMenu* menu);
|
||||||
|
void append_mutable_part_menu_items(wxMenu* menu);
|
||||||
void create_part_menu();
|
void create_part_menu();
|
||||||
|
void create_text_part_menu();
|
||||||
void create_instance_menu();
|
void create_instance_menu();
|
||||||
|
|
||||||
wxMenu* append_submenu_add_generic(wxMenu* menu, ModelVolumeType type);
|
wxMenu* append_submenu_add_generic(wxMenu* menu, ModelVolumeType type);
|
||||||
|
@ -955,11 +955,17 @@ void ObjectList::show_context_menu(const bool evt_context_menu)
|
|||||||
const ItemType type = m_objects_model->GetItemType(item);
|
const ItemType type = m_objects_model->GetItemType(item);
|
||||||
if (!(type & (itObject | itVolume | itLayer | itInstance)))
|
if (!(type & (itObject | itVolume | itLayer | itInstance)))
|
||||||
return;
|
return;
|
||||||
|
if (type & itVolume) {
|
||||||
menu = type & itInstance ? plater->instance_menu() :
|
int obj_idx, vol_idx;
|
||||||
type & itLayer ? plater->layer_menu() :
|
get_selected_item_indexes(obj_idx, vol_idx, item);
|
||||||
m_objects_model->GetParent(item) != wxDataViewItem(nullptr) ? plater->part_menu() :
|
if (obj_idx < 0 || vol_idx < 0)
|
||||||
printer_technology() == ptFFF ? plater->object_menu() : plater->sla_object_menu();
|
return;
|
||||||
|
menu = object(obj_idx)->volumes[vol_idx]->text_configuration.has_value() ? plater->text_part_menu() : plater->part_menu();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
menu = type & itInstance ? plater->instance_menu() :
|
||||||
|
type & itLayer ? plater->layer_menu() :
|
||||||
|
printer_technology() == ptFFF ? plater->object_menu() : plater->sla_object_menu();
|
||||||
}
|
}
|
||||||
else if (evt_context_menu)
|
else if (evt_context_menu)
|
||||||
menu = plater->default_menu();
|
menu = plater->default_menu();
|
||||||
@ -3782,8 +3788,13 @@ void ObjectList::change_part_type()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const wxString names[] = { _L("Part"), _L("Negative Volume"), _L("Modifier"), _L("Support Blocker"), _L("Support Enforcer") };
|
wxArrayString names;
|
||||||
auto new_type = ModelVolumeType(wxGetSingleChoiceIndex(_L("Type:"), _L("Select type of part"), wxArrayString(5, names), int(type)));
|
for (const wxString& name : { _L("Part"), _L("Negative Volume"), _L("Modifier") })
|
||||||
|
names.Add(name);
|
||||||
|
if (!volume->text_configuration.has_value())
|
||||||
|
for (const wxString& name : { _L("Support Blocker"), _L("Support Enforcer") })
|
||||||
|
names.Add(name);
|
||||||
|
auto new_type = ModelVolumeType(wxGetSingleChoiceIndex(_L("Type:"), _L("Select type of part"), names, int(type)));
|
||||||
|
|
||||||
if (new_type == type || new_type == ModelVolumeType::INVALID)
|
if (new_type == type || new_type == ModelVolumeType::INVALID)
|
||||||
return;
|
return;
|
||||||
|
@ -4196,13 +4196,20 @@ void Plater::priv::on_right_click(RBtnEvent& evt)
|
|||||||
menu = menus.sla_object_menu();
|
menu = menus.sla_object_menu();
|
||||||
else {
|
else {
|
||||||
const Selection& selection = get_selection();
|
const Selection& selection = get_selection();
|
||||||
// show "Object menu" for each one or several FullInstance instead of FullObject
|
// check if selected item is object's part
|
||||||
const bool is_some_full_instances = selection.is_single_full_instance() ||
|
if (selection.is_single_volume() || selection.is_single_modifier()) {
|
||||||
selection.is_single_full_object() ||
|
int vol_idx = get_selected_volume_idx();
|
||||||
selection.is_multiple_full_instance();
|
if (vol_idx < 0)
|
||||||
const bool is_part = selection.is_single_volume() || selection.is_single_modifier();
|
return;
|
||||||
menu = is_some_full_instances ? menus.object_menu() :
|
menu = model.objects[obj_idx]->volumes[vol_idx]->text_configuration.has_value() ? menus.text_part_menu() : menus.part_menu();
|
||||||
is_part ? menus.part_menu() : menus.multi_selection_menu();
|
}
|
||||||
|
else {
|
||||||
|
// show "Object menu" for each one or several FullInstance instead of FullObject
|
||||||
|
const bool is_some_full_instances = selection.is_single_full_instance() ||
|
||||||
|
selection.is_single_full_object() ||
|
||||||
|
selection.is_multiple_full_instance();
|
||||||
|
menu = is_some_full_instances ? menus.object_menu() : menus.multi_selection_menu();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -6841,6 +6848,7 @@ void Plater::bring_instance_forward()
|
|||||||
|
|
||||||
wxMenu* Plater::object_menu() { return p->menus.object_menu(); }
|
wxMenu* Plater::object_menu() { return p->menus.object_menu(); }
|
||||||
wxMenu* Plater::part_menu() { return p->menus.part_menu(); }
|
wxMenu* Plater::part_menu() { return p->menus.part_menu(); }
|
||||||
|
wxMenu* Plater::text_part_menu() { return p->menus.text_part_menu(); }
|
||||||
wxMenu* Plater::sla_object_menu() { return p->menus.sla_object_menu(); }
|
wxMenu* Plater::sla_object_menu() { return p->menus.sla_object_menu(); }
|
||||||
wxMenu* Plater::default_menu() { return p->menus.default_menu(); }
|
wxMenu* Plater::default_menu() { return p->menus.default_menu(); }
|
||||||
wxMenu* Plater::instance_menu() { return p->menus.instance_menu(); }
|
wxMenu* Plater::instance_menu() { return p->menus.instance_menu(); }
|
||||||
|
@ -420,6 +420,7 @@ public:
|
|||||||
// get same Plater/ObjectList menus
|
// get same Plater/ObjectList menus
|
||||||
wxMenu* object_menu();
|
wxMenu* object_menu();
|
||||||
wxMenu* part_menu();
|
wxMenu* part_menu();
|
||||||
|
wxMenu* text_part_menu();
|
||||||
wxMenu* sla_object_menu();
|
wxMenu* sla_object_menu();
|
||||||
wxMenu* default_menu();
|
wxMenu* default_menu();
|
||||||
wxMenu* instance_menu();
|
wxMenu* instance_menu();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user