diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 055d7e46a..739b7ee22 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -2447,6 +2447,7 @@ void PrintConfigDef::init_sla_params() def = this->add("support_head_front_radius", coFloat); def->label = L("Support head front radius"); + def->category = L("Supports"); def->tooltip = L("Radius of the pointing side of the head"); def->sidetext = L("mm"); def->cli = ""; @@ -2455,6 +2456,7 @@ void PrintConfigDef::init_sla_params() def = this->add("support_head_penetration", coFloat); def->label = L("Support head penetration"); + def->category = L("Supports"); def->tooltip = L("How much the pinhead has to penetrate the model surface"); def->sidetext = L("mm"); def->cli = ""; @@ -2463,6 +2465,7 @@ void PrintConfigDef::init_sla_params() def = this->add("support_head_back_radius", coFloat); def->label = L("Support head back radius"); + def->category = L("Supports"); def->tooltip = L("Radius of the back side of the 3d arrow"); def->sidetext = L("mm"); def->cli = ""; @@ -2471,6 +2474,7 @@ void PrintConfigDef::init_sla_params() def = this->add("support_head_width", coFloat); def->label = L("Support head width"); + def->category = L("Supports"); def->tooltip = L("Width from the back sphere center to the front sphere center"); def->sidetext = L("mm"); def->cli = ""; @@ -2479,6 +2483,7 @@ void PrintConfigDef::init_sla_params() def = this->add("support_pillar_radius", coFloat); def->label = L("Support pillar radius"); + def->category = L("Supports"); def->tooltip = L("Radius in mm of the support pillars"); def->sidetext = L("mm"); def->cli = ""; @@ -2487,6 +2492,7 @@ void PrintConfigDef::init_sla_params() def = this->add("support_base_radius", coFloat); def->label = L("Support base radius"); + def->category = L("Supports"); def->tooltip = L("Radius in mm of the pillar base"); def->sidetext = L("mm"); def->cli = ""; @@ -2495,6 +2501,7 @@ void PrintConfigDef::init_sla_params() def = this->add("support_base_height", coFloat); def->label = L("Support base height"); + def->category = L("Supports"); def->tooltip = L("The height of the pillar base cone"); def->sidetext = L("mm"); def->cli = ""; @@ -2503,6 +2510,7 @@ void PrintConfigDef::init_sla_params() def = this->add("support_critical_angle", coFloat); def->label = L("Critical angle"); + def->category = L("Supports"); def->tooltip = L("The default angle for connecting support sticks and junctions."); def->sidetext = L("°"); def->cli = ""; @@ -2511,6 +2519,7 @@ void PrintConfigDef::init_sla_params() def = this->add("support_max_bridge_length", coFloat); def->label = L("Max bridge length"); + def->category = L("Supports"); def->tooltip = L("The max length of a bridge"); def->sidetext = L("mm"); def->cli = ""; @@ -2519,6 +2528,7 @@ void PrintConfigDef::init_sla_params() def = this->add("support_object_elevation", coFloat); def->label = L("Object elevation"); + def->category = L("Supports"); def->tooltip = L("How much the supports should lift up the supported object."); def->sidetext = L("mm"); def->cli = ""; @@ -2527,6 +2537,7 @@ void PrintConfigDef::init_sla_params() def = this->add("pad_enable", coBool); def->label = L("Use pad"); + def->category = L("Pad"); def->tooltip = L("Add a pad underneath the supported model"); def->sidetext = L(""); def->cli = ""; @@ -2534,6 +2545,7 @@ void PrintConfigDef::init_sla_params() def = this->add("pad_wall_thickness", coFloat); def->label = L("Pad wall thickness"); + def->category = L("Pad"); def->tooltip = L(""); def->sidetext = L("mm"); def->cli = ""; @@ -2542,6 +2554,7 @@ void PrintConfigDef::init_sla_params() def = this->add("pad_wall_height", coFloat); def->label = L("Pad wall height"); + def->category = L("Pad"); def->tooltip = L(""); def->sidetext = L("mm"); def->cli = ""; @@ -2550,6 +2563,7 @@ void PrintConfigDef::init_sla_params() def = this->add("pad_max_merge_distance", coFloat); def->label = L("Max merge distance"); + def->category = L("Pad"); def->tooltip = L(""); def->sidetext = L("mm"); def->cli = ""; @@ -2558,6 +2572,7 @@ void PrintConfigDef::init_sla_params() def = this->add("pad_edge_radius", coFloat); def->label = L("Pad edge radius"); + def->category = L("Pad"); def->tooltip = L(""); def->sidetext = L("mm"); def->cli = ""; diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index da358670b..3cfcdad0f 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -25,6 +25,7 @@ ObjectList::ObjectList(wxWindow* parent) : { // Fill CATEGORY_ICON { + // ptFFF CATEGORY_ICON[L("Layers and Perimeters")] = wxBitmap(from_u8(var("layers.png")), wxBITMAP_TYPE_PNG); CATEGORY_ICON[L("Infill")] = wxBitmap(from_u8(var("infill.png")), wxBITMAP_TYPE_PNG); CATEGORY_ICON[L("Support material")] = wxBitmap(from_u8(var("building.png")), wxBITMAP_TYPE_PNG); @@ -34,6 +35,9 @@ ObjectList::ObjectList(wxWindow* parent) : // CATEGORY_ICON[L("Skirt and brim")] = wxBitmap(from_u8(var("box.png")), wxBITMAP_TYPE_PNG); // CATEGORY_ICON[L("Speed > Acceleration")] = wxBitmap(from_u8(var("time.png")), wxBITMAP_TYPE_PNG); CATEGORY_ICON[L("Advanced")] = wxBitmap(from_u8(var("wand.png")), wxBITMAP_TYPE_PNG); + // ptSLA + CATEGORY_ICON[L("Supports")] = wxBitmap(from_u8(var("building.png")), wxBITMAP_TYPE_PNG); + CATEGORY_ICON[L("Pad")] = wxBitmap(from_u8(var("brick.png")), wxBITMAP_TYPE_PNG); } // create control @@ -310,8 +314,8 @@ void ObjectList::show_context_menu() if (!(m_objects_model->GetItemType(item) & (itObject | itVolume))) return; const auto menu = m_objects_model->GetParent(item) == wxDataViewItem(0) ? - create_add_part_popupmenu() : - create_part_settings_popupmenu(); + create_object_popupmenu() : + create_part_popupmenu(); wxGetApp().tab_panel()->GetPage(0)->PopupMenu(menu); } } @@ -436,6 +440,13 @@ void ObjectList::on_drop(wxDataViewEvent &event) std::vector get_options(const bool is_part) { + if (wxGetApp().plater()->printer_technology() == ptSLA) { + SLAPrintObjectConfig full_sla_config; + auto options = full_sla_config.keys(); + options.erase(find(options.begin(), options.end(), "layer_height")); + return options; + } + PrintRegionConfig reg_config; auto options = reg_config.keys(); if (!is_part) { @@ -463,7 +474,10 @@ void get_options_menu(settings_menu_hierarchy& settings_menu, bool is_part) if (category.empty() || (category == "Extruders" && extruders_cnt == 1)) continue; - std::pair option_label(option, opt->label); + const std::string& label = opt->label.empty() ? opt->full_label : + opt->full_label.empty() ? opt->label : + opt->full_label + " " + opt->label;; + std::pair option_label(option, label); std::vector< std::pair > new_category; auto& cat_opt_label = settings_menu.find(category) == settings_menu.end() ? new_category : settings_menu.at(category); cat_opt_label.push_back(option_label); @@ -575,14 +589,27 @@ wxMenuItem* ObjectList::menu_item_settings(wxMenu* menu, int id, const bool is_p auto menu_item = new wxMenuItem(menu, id, _(L("Add settings"))); menu_item->SetBitmap(m_bmp_cog); - auto sub_menu = create_add_settings_popupmenu(is_part); + auto sub_menu = create_settings_popupmenu(is_part); menu_item->SetSubMenu(sub_menu); return menu_item; } -wxMenu* ObjectList::create_add_part_popupmenu() +wxMenu* ObjectList::create_object_popupmenu() { wxMenu *menu = new wxMenu; + if (wxGetApp().plater()->printer_technology() == ptSLA) + { + wxWindowID config_id_base = NewControlId(1); + // Append settings popupmenu + menu->Append(menu_item_settings(menu, config_id_base, false)); + + menu->Bind(wxEVT_MENU, [menu, this](wxEvent &event) { + get_settings_choice(menu, event.GetId(), false); + }); + + return menu; + } + // Note: id accords to type of the sub-object, so sequence of the menu items is important std::vector menu_object_types_items = {L("Add part"), // ~ModelVolume::MODEL_PART L("Add modifier"), // ~ModelVolume::PARAMETER_MODIFIER @@ -635,7 +662,7 @@ wxMenu* ObjectList::create_add_part_popupmenu() return menu; } -wxMenu* ObjectList::create_part_settings_popupmenu() +wxMenu* ObjectList::create_part_popupmenu() { wxMenu *menu = new wxMenu; wxWindowID config_id_base = NewControlId(3); @@ -671,7 +698,7 @@ wxMenu* ObjectList::create_part_settings_popupmenu() return menu; } -wxMenu* ObjectList::create_add_settings_popupmenu(bool is_part) +wxMenu* ObjectList::create_settings_popupmenu(bool is_part) { wxMenu *menu = new wxMenu; diff --git a/src/slic3r/GUI/GUI_ObjectList.hpp b/src/slic3r/GUI/GUI_ObjectList.hpp index 31ae5f5ed..862e0237b 100644 --- a/src/slic3r/GUI/GUI_ObjectList.hpp +++ b/src/slic3r/GUI/GUI_ObjectList.hpp @@ -98,9 +98,9 @@ public: void menu_item_add_generic(wxMenuItem* &menu, int id, const int type); wxMenuItem* menu_item_split(wxMenu* menu, int id); wxMenuItem* menu_item_settings(wxMenu* menu, int id, const bool is_part); - wxMenu* create_add_part_popupmenu(); - wxMenu* create_part_settings_popupmenu(); - wxMenu* create_add_settings_popupmenu(bool is_part); + wxMenu* create_object_popupmenu(); + wxMenu* create_part_popupmenu(); + wxMenu* create_settings_popupmenu(bool is_part); void load_subobject(int type); void load_part(ModelObject* model_object, wxArrayString& part_names, int type); diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 85220b8ad..2cc24eca5 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -3011,6 +3011,7 @@ void TabSLAPrint::build() optgroup->append_single_option_line("support_critical_angle"); optgroup->append_single_option_line("support_max_bridge_length"); + page = add_options_page(_(L("Pad")), "brick.png"); optgroup = page->new_optgroup(_(L("Pad"))); optgroup->append_single_option_line("pad_enable"); optgroup->append_single_option_line("pad_wall_thickness");