mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-30 20:21:12 -06:00 
			
		
		
		
	GUI forms with SLA support parameters
This commit is contained in:
		
						commit
						ad8c7c9f97
					
				
					 16 changed files with 342 additions and 122 deletions
				
			
		|  | @ -1663,8 +1663,9 @@ void GCode::append_full_config(const Print& print, std::string& str) | |||
|     } | ||||
|     const DynamicConfig &full_config = print.placeholder_parser().config(); | ||||
| 	for (const char *key : { | ||||
| 		"print_settings_id", "filament_settings_id", "sla_material_settings_id", "printer_settings_id", | ||||
| 		"printer_model", "printer_variant", "default_print_profile", "default_filament_profile", "default_sla_material_profile", | ||||
| 		"print_settings_id", "filament_settings_id", "sla_print_settings_id", "sla_material_settings_id", "printer_settings_id", | ||||
| 		"printer_model", "printer_variant",  | ||||
| 	    "default_print_profile", "default_filament_profile", "default_sla_print_profile", "default_sla_material_profile", | ||||
| 		"compatible_printers_condition_cummulative", "inherits_cummulative" }) { | ||||
| 		const ConfigOption *opt = full_config.option(key); | ||||
| 		if (opt != nullptr) | ||||
|  |  | |||
|  | @ -2434,6 +2434,120 @@ void PrintConfigDef::init_sla_params() | |||
| 
 | ||||
|     def = this->add("sla_material_settings_id", coString); | ||||
|     def->default_value = new ConfigOptionString(""); | ||||
| 
 | ||||
| 
 | ||||
|     def = this->add("default_sla_print_profile", coString); | ||||
|     def->label = L("Default SLA material profile"); | ||||
|     def->tooltip = L("Default print profile associated with the current printer profile. " | ||||
|                    "On selection of the current printer profile, this print profile will be activated."); | ||||
|     def->default_value = new ConfigOptionString(); | ||||
| 
 | ||||
|     def = this->add("sla_print_settings_id", coString); | ||||
|     def->default_value = new ConfigOptionString(""); | ||||
| 
 | ||||
|     def = this->add("support_head_front_radius", coFloat); | ||||
|     def->label = L("Support head front radius"); | ||||
|     def->tooltip = L("Radius of the pointing side of the head"); | ||||
|     def->sidetext = L("mm"); | ||||
|     def->cli = ""; | ||||
|     def->min = 0; | ||||
|     def->default_value = new ConfigOptionFloat(0.2); | ||||
| 
 | ||||
|     def = this->add("support_head_penetration", coFloat); | ||||
|     def->label = L("Support head penetration"); | ||||
|     def->tooltip = L("How much the pinhead has to penetrate the model surface"); | ||||
|     def->sidetext = L("mm"); | ||||
|     def->cli = ""; | ||||
|     def->min = 0; | ||||
|     def->default_value = new ConfigOptionFloat(0.2); | ||||
| 
 | ||||
|     def = this->add("support_head_back_radius", coFloat); | ||||
|     def->label = L("Support head back radius"); | ||||
|     def->tooltip = L("Radius of the back side of the 3d arrow"); | ||||
|     def->sidetext = L("mm"); | ||||
|     def->cli = ""; | ||||
|     def->min = 0; | ||||
|     def->default_value = new ConfigOptionFloat(0.5); | ||||
| 
 | ||||
|     def = this->add("support_head_width", coFloat); | ||||
|     def->label = L("Support head width"); | ||||
|     def->tooltip = L("Width from the back sphere center to the front sphere center"); | ||||
|     def->sidetext = L("mm"); | ||||
|     def->cli = ""; | ||||
|     def->min = 0; | ||||
|     def->default_value = new ConfigOptionFloat(1.0); | ||||
| 
 | ||||
|     def = this->add("support_pillar_radius", coFloat); | ||||
|     def->label = L("Support pillar radius"); | ||||
|     def->tooltip = L("Radius in mm of the support pillars"); | ||||
|     def->sidetext = L("mm"); | ||||
|     def->cli = ""; | ||||
|     def->min = 0; | ||||
|     def->default_value = new ConfigOptionFloat(0.8); | ||||
| 
 | ||||
|     def = this->add("support_base_radius", coFloat); | ||||
|     def->label = L("Support base radius"); | ||||
|     def->tooltip = L("Radius in mm of the pillar base"); | ||||
|     def->sidetext = L("mm"); | ||||
|     def->cli = ""; | ||||
|     def->min = 0; | ||||
|     def->default_value = new ConfigOptionFloat(2.0); | ||||
| 
 | ||||
|     def = this->add("support_base_height", coFloat); | ||||
|     def->label = L("Support base height"); | ||||
|     def->tooltip = L("The height of the pillar base cone"); | ||||
|     def->sidetext = L("mm"); | ||||
|     def->cli = ""; | ||||
|     def->min = 0; | ||||
|     def->default_value = new ConfigOptionFloat(1.0); | ||||
| 
 | ||||
|     def = this->add("support_critical_angle", coFloat); | ||||
|     def->label = L("Critical angle"); | ||||
|     def->tooltip = L("The default angle for connecting support sticks and junctions."); | ||||
|     def->sidetext = L("°"); | ||||
|     def->cli = ""; | ||||
|     def->min = 0; | ||||
|     def->default_value = new ConfigOptionFloat(45); | ||||
| 
 | ||||
|     def = this->add("support_max_bridge_length", coFloat); | ||||
|     def->label = L("Max bridge length"); | ||||
|     def->tooltip = L("The max length of a bridge"); | ||||
|     def->sidetext = L("mm"); | ||||
|     def->cli = ""; | ||||
|     def->min = 0; | ||||
|     def->default_value = new ConfigOptionFloat(); | ||||
| 
 | ||||
|     def = this->add("pad_wall_thickness", coFloat); | ||||
|     def->label = L("Pad wall thickness"); | ||||
|     def->tooltip = L(""); | ||||
|     def->sidetext = L("mm"); | ||||
|     def->cli = ""; | ||||
|     def->min = 0; | ||||
|     def->default_value = new ConfigOptionFloat(2.0); | ||||
| 
 | ||||
|     def = this->add("pad_wall_height", coFloat); | ||||
|     def->label = L("Pad wall height"); | ||||
|     def->tooltip = L(""); | ||||
|     def->sidetext = L("mm"); | ||||
|     def->cli = ""; | ||||
|     def->min = 0; | ||||
|     def->default_value = new ConfigOptionFloat(5.0); | ||||
| 
 | ||||
|     def = this->add("pad_max_merge_distance", coFloat); | ||||
|     def->label = L("Max merge distance"); | ||||
|     def->tooltip = L(""); | ||||
|     def->sidetext = L("mm"); | ||||
|     def->cli = ""; | ||||
|     def->min = 0; | ||||
|     def->default_value = new ConfigOptionFloat(50.0); | ||||
| 
 | ||||
|     def = this->add("pad_edge_radius", coFloat); | ||||
|     def->label = L("pad edge radius"); | ||||
|     def->tooltip = L(""); | ||||
|     def->sidetext = L("mm"); | ||||
|     def->cli = ""; | ||||
|     def->min = 0; | ||||
|     def->default_value = new ConfigOptionFloat(1.0); | ||||
| } | ||||
| 
 | ||||
| void PrintConfigDef::handle_legacy(t_config_option_key &opt_key, std::string &value) | ||||
|  |  | |||
|  | @ -908,7 +908,7 @@ public: | |||
|     ConfigOptionFloat support_head_front_radius /*= 0.2*/; | ||||
| 
 | ||||
|     // How much the pinhead has to penetrate the model surface
 | ||||
|     ConfigOptionFloat support_head_penetraiton /*= 0.2*/; | ||||
|     ConfigOptionFloat support_head_penetration /*= 0.2*/; | ||||
| 
 | ||||
|     // Radius of the back side of the 3d arrow. TODO: consider renaming this
 | ||||
|     // to actual pillar radius, because that's what it boils down to.
 | ||||
|  | @ -952,7 +952,7 @@ protected: | |||
|     { | ||||
|         OPT_PTR(layer_height); | ||||
|         OPT_PTR(support_head_front_radius); | ||||
|         OPT_PTR(support_head_penetraiton); | ||||
|         OPT_PTR(support_head_penetration); | ||||
|         OPT_PTR(support_head_back_radius); | ||||
|         OPT_PTR(support_head_width); | ||||
|         OPT_PTR(support_pillar_radius); | ||||
|  |  | |||
|  | @ -241,6 +241,7 @@ void AppConfig::reset_selections() | |||
|     if (it != m_storage.end()) { | ||||
|         it->second.erase("print"); | ||||
|         it->second.erase("filament"); | ||||
|         it->second.erase("sla_print"); | ||||
|         it->second.erase("sla_material"); | ||||
|         it->second.erase("printer"); | ||||
|         m_dirty = true; | ||||
|  |  | |||
|  | @ -3259,7 +3259,8 @@ bool GLCanvas3D::init(bool useVBOs, bool use_legacy_opengl) | |||
| 
 | ||||
|     if (m_gizmos.is_enabled()) { | ||||
|         if (! m_gizmos.init(*this)) {  | ||||
|             return false;  | ||||
|             std::cout << "Unable to initialize gizmos: please, check that all the required textures are available" << std::endl; | ||||
|             return false; | ||||
|         } | ||||
| 
 | ||||
|         if (m_external_gizmo_widgets_parent != nullptr) { | ||||
|  |  | |||
|  | @ -1123,7 +1123,8 @@ void ObjectList::add_object_to_list(size_t obj_idx) | |||
|             m_objects_model->AddVolumeChild(item, | ||||
|             model_object->volumes[id]->name, | ||||
|             ModelVolume::MODEL_PART, | ||||
|             model_object->volumes[id]->config.option<ConfigOptionInt>("extruder")->value, | ||||
|             !model_object->volumes[id]->config.has("extruder") ? 0 : | ||||
|                 model_object->volumes[id]->config.option<ConfigOptionInt>("extruder")->value, | ||||
|             false); | ||||
|         Expand(item); | ||||
|     } | ||||
|  |  | |||
|  | @ -109,20 +109,15 @@ void MainFrame::init_tabpanel() | |||
| 
 | ||||
|     m_tabpanel->Bind(wxEVT_NOTEBOOK_PAGE_CHANGED, [this](wxEvent&) { | ||||
|         auto panel = m_tabpanel->GetCurrentPage(); | ||||
| //             panel->OnActivate(); if panel->can('OnActivate');
 | ||||
| 
 | ||||
|         if (panel == nullptr) | ||||
|             return; | ||||
| 
 | ||||
|         for (auto& tab_name : { "print", "filament", "printer" }) { | ||||
|             if (tab_name == panel->GetName()) { | ||||
|                 // On GTK, the wxEVT_NOTEBOOK_PAGE_CHANGED event is triggered
 | ||||
|                 // before the MainFrame is fully set up.
 | ||||
|                 auto it = m_options_tabs.find(tab_name); | ||||
|                 assert(it != m_options_tabs.end()); | ||||
|                 if (it != m_options_tabs.end()) | ||||
|                     it->second->OnActivate(); | ||||
|             } | ||||
|         auto& tabs_list = wxGetApp().tabs_list; | ||||
|         if (find(tabs_list.begin(), tabs_list.end(), panel) != tabs_list.end()) { | ||||
|             // On GTK, the wxEVT_NOTEBOOK_PAGE_CHANGED event is triggered
 | ||||
|             // before the MainFrame is fully set up.
 | ||||
|             static_cast<Tab*>(panel)->OnActivate(); | ||||
|         } | ||||
|     }); | ||||
| 
 | ||||
|  | @ -140,9 +135,6 @@ void MainFrame::init_tabpanel() | |||
|     Bind(EVT_TAB_PRESETS_CHANGED, &MainFrame::on_presets_changed, this); | ||||
| 
 | ||||
|     create_preset_tabs(); | ||||
|     std::vector<std::string> tab_names = { "print", "filament", "sla_material", "printer" };     | ||||
|     for (auto tab_name : tab_names) | ||||
|         m_options_tabs[tab_name] = get_preset_tab(tab_name.c_str());  | ||||
| 
 | ||||
|     if (m_plater) { | ||||
|         // load initial config
 | ||||
|  | @ -157,44 +149,12 @@ void MainFrame::init_tabpanel() | |||
|     } | ||||
| } | ||||
| 
 | ||||
| std::vector<PresetTab> preset_tabs = { | ||||
|     { "print", nullptr, ptFFF }, | ||||
|     { "filament", nullptr, ptFFF }, | ||||
|     { "sla_material", nullptr, ptSLA } | ||||
| }; | ||||
| 
 | ||||
| std::vector<PresetTab>& MainFrame::get_preset_tabs() { | ||||
|     return preset_tabs; | ||||
| } | ||||
| 
 | ||||
| Tab* MainFrame::get_tab(const std::string& name) | ||||
| { | ||||
|     std::vector<PresetTab>::iterator it = std::find_if(preset_tabs.begin(), preset_tabs.end(), | ||||
|         [name](PresetTab& tab) { return name == tab.name; }); | ||||
|     return it != preset_tabs.end() ? it->panel : nullptr; | ||||
| } | ||||
| 
 | ||||
| Tab* MainFrame::get_preset_tab(const std::string& name) | ||||
| { | ||||
|     Tab* tab = get_tab(name); | ||||
|     if (tab) return tab; | ||||
| 
 | ||||
|     for (size_t i = 0; i < m_tabpanel->GetPageCount(); ++i) { | ||||
|         tab = dynamic_cast<Tab*>(m_tabpanel->GetPage(i)); | ||||
|         if (!tab) | ||||
|             continue; | ||||
|         if (tab->name() == name) { | ||||
|             return tab; | ||||
|         } | ||||
|     } | ||||
|     return nullptr; | ||||
| } | ||||
| 
 | ||||
| void MainFrame::create_preset_tabs() | ||||
| { | ||||
|     wxGetApp().update_label_colours_from_appconfig(); | ||||
|     add_created_tab(new TabPrint(m_tabpanel)); | ||||
|     add_created_tab(new TabFilament(m_tabpanel)); | ||||
|     add_created_tab(new TabSLAPrint(m_tabpanel)); | ||||
|     add_created_tab(new TabSLAMaterial(m_tabpanel)); | ||||
|     add_created_tab(new TabPrinter(m_tabpanel)); | ||||
| } | ||||
|  | @ -203,17 +163,9 @@ void MainFrame::add_created_tab(Tab* panel) | |||
| { | ||||
|     panel->create_preset_tab(); | ||||
| 
 | ||||
|     const wxString& tab_name = panel->GetName(); | ||||
|     bool add_panel = true; | ||||
|     const auto printer_tech = wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology(); | ||||
| 
 | ||||
|     auto it = std::find_if(preset_tabs.begin(), preset_tabs.end(), | ||||
|         [tab_name](PresetTab& tab) {return tab.name == tab_name; }); | ||||
|     if (it != preset_tabs.end()) { | ||||
|         it->panel = panel; | ||||
|         add_panel = it->technology == wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology(); | ||||
|     } | ||||
| 
 | ||||
|     if (add_panel) | ||||
|     if (panel->supports_printer_technology(printer_tech)) | ||||
|         m_tabpanel->AddPage(panel, panel->title()); | ||||
| } | ||||
| 
 | ||||
|  | @ -768,8 +720,8 @@ void MainFrame::load_configbundle(wxString file/* = wxEmptyString, const bool re | |||
| // Also update the platter with the new presets.
 | ||||
| void MainFrame::load_config(const DynamicPrintConfig& config) | ||||
| { | ||||
|     for (auto tab : m_options_tabs) | ||||
|         tab.second->load_config(config); | ||||
|     for (auto tab : wxGetApp().tabs_list) | ||||
|         tab->load_config(config); | ||||
|     if (m_plater)  | ||||
|         m_plater->on_config_change(config); | ||||
| } | ||||
|  | @ -797,7 +749,6 @@ void MainFrame::on_presets_changed(SimpleEvent &event) | |||
|     // Update preset combo boxes(Print settings, Filament, Material, Printer) from their respective tabs.
 | ||||
|     auto presets = tab->get_presets(); | ||||
|     if (m_plater != nullptr && presets != nullptr) { | ||||
| //         auto reload_dependent_tabs = tab->get_dependent_tabs();
 | ||||
| 
 | ||||
|         // FIXME: The preset type really should be a property of Tab instead
 | ||||
|         Slic3r::Preset::Type preset_type = tab->type(); | ||||
|  | @ -805,25 +756,7 @@ void MainFrame::on_presets_changed(SimpleEvent &event) | |||
|             wxASSERT(false); | ||||
|             return; | ||||
|         } | ||||
| /*
 | ||||
|         m_plater->sidebar().update_presets(preset_type); | ||||
| 
 | ||||
|         if (preset_type == Slic3r::Preset::TYPE_PRINTER) { | ||||
|             // Printer selected at the Printer tab, update "compatible" marks at the print and filament selectors.
 | ||||
|             // XXX: Do this in a more C++ way
 | ||||
|             for (const auto tab_name_other : { "print", "filament", "sla_material" }) { | ||||
|                 Tab* cur_tab = m_options_tabs[tab_name_other]; | ||||
|                 // If the printer tells us that the print or filament preset has been switched or invalidated,
 | ||||
|                 // refresh the print or filament tab page.Otherwise just refresh the combo box.
 | ||||
|                 if (reload_dependent_tabs.empty() || | ||||
|                     find(reload_dependent_tabs.begin(), reload_dependent_tabs.end(), tab_name_other) == | ||||
|                     reload_dependent_tabs.end() ) | ||||
|                     cur_tab->update_tab_ui(); | ||||
|                 else | ||||
|                     cur_tab->load_current_preset(); | ||||
|             } | ||||
|         } | ||||
| */ | ||||
|         m_plater->on_config_change(*tab->get_config()); | ||||
|         m_plater->sidebar().update_presets(preset_type); | ||||
|     } | ||||
|  | @ -858,11 +791,7 @@ void MainFrame::update_ui_from_settings() | |||
| { | ||||
|     m_menu_item_reslice_now->Enable(wxGetApp().app_config->get("background_processing") == "1"); | ||||
| //     if (m_plater) m_plater->update_ui_from_settings();
 | ||||
|     /*
 | ||||
|     std::vector<std::string> tab_names = { "print", "filament", "printer" }; | ||||
|     for (auto tab_name: tab_names) | ||||
|         m_options_tabs[tab_name]->update_ui_from_settings(); | ||||
|     */ | ||||
| 
 | ||||
|     for (auto tab: wxGetApp().tabs_list) | ||||
|         tab->update_ui_from_settings(); | ||||
| } | ||||
|  |  | |||
|  | @ -53,8 +53,6 @@ class MainFrame : public wxFrame | |||
|     wxString    m_qs_last_output_file = wxEmptyString; | ||||
|     wxString    m_last_config = wxEmptyString; | ||||
| 
 | ||||
|     std::map<std::string, Tab*>     m_options_tabs; | ||||
| 
 | ||||
|     wxMenuItem* m_menu_item_repeat { nullptr }; | ||||
|     wxMenuItem* m_menu_item_reslice_now { nullptr }; | ||||
| #if !ENABLE_NEW_MENU_LAYOUT | ||||
|  | @ -67,7 +65,6 @@ class MainFrame : public wxFrame | |||
| 
 | ||||
|     void on_presets_changed(SimpleEvent&); | ||||
|     void on_value_changed(wxCommandEvent&); | ||||
|     Tab*         get_tab(const std::string& name); | ||||
| 
 | ||||
| #if ENABLE_NEW_MENU_LAYOUT | ||||
|     bool can_save() const; | ||||
|  | @ -84,8 +81,6 @@ public: | |||
|     Plater*     plater() { return m_plater; } | ||||
| 
 | ||||
|     void        init_tabpanel(); | ||||
|     const std::map<std::string, Tab*>& options_tabs() const { return m_options_tabs; } | ||||
|     Tab*        get_preset_tab(const std::string& name); | ||||
|     void        create_preset_tabs(); | ||||
|     void        add_created_tab(Tab* panel); | ||||
|     void        init_menubar(); | ||||
|  | @ -105,8 +100,6 @@ public: | |||
|     void        select_tab(size_t tab) const; | ||||
|     void        select_view(const std::string& direction); | ||||
| 
 | ||||
|     std::vector<PresetTab>& get_preset_tabs(); | ||||
| 
 | ||||
|     Plater*             m_plater { nullptr }; | ||||
|     wxNotebook*         m_tabpanel { nullptr }; | ||||
|     wxProgressDialog*   m_progress_dialog { nullptr }; | ||||
|  |  | |||
|  | @ -424,6 +424,7 @@ struct Sidebar::priv | |||
|     PresetComboBox *combo_print; | ||||
|     std::vector<PresetComboBox*> combos_filament; | ||||
|     wxBoxSizer *sizer_filaments; | ||||
|     PresetComboBox *combo_sla_print; | ||||
|     PresetComboBox *combo_sla_material; | ||||
|     PresetComboBox *combo_printer; | ||||
| 
 | ||||
|  | @ -454,7 +455,7 @@ void Sidebar::priv::show_preset_comboboxes() | |||
|     for (size_t i = 0; i < 4; ++i) | ||||
|         sizer_presets->Show(i, !showSLA); | ||||
| 
 | ||||
|     for (size_t i = 4; i < 6; ++i) { | ||||
|     for (size_t i = 4; i < 8; ++i) { | ||||
|         if (sizer_presets->IsShown(i) != showSLA) | ||||
|             sizer_presets->Show(i, showSLA); | ||||
|     } | ||||
|  | @ -479,7 +480,7 @@ Sidebar::Sidebar(Plater *parent) | |||
|     p->scrolled->SetSizer(scrolled_sizer); | ||||
| 
 | ||||
|     // The preset chooser
 | ||||
|     p->sizer_presets = new wxFlexGridSizer(4, 2, 1, 2); | ||||
|     p->sizer_presets = new wxFlexGridSizer(5, 2, 1, 2); | ||||
|     p->sizer_presets->AddGrowableCol(1, 1); | ||||
|     p->sizer_presets->SetFlexibleDirection(wxBOTH); | ||||
|     p->sizer_filaments = new wxBoxSizer(wxVERTICAL); | ||||
|  | @ -502,10 +503,11 @@ Sidebar::Sidebar(Plater *parent) | |||
|     }; | ||||
| 
 | ||||
|     p->combos_filament.push_back(nullptr); | ||||
|     init_combo(&p->combo_print, _(L("Print settings")), Preset::TYPE_PRINT, false); | ||||
|     init_combo(&p->combos_filament[0], _(L("Filament")), Preset::TYPE_FILAMENT, true); | ||||
|     init_combo(&p->combo_sla_material, _(L("SLA material")), Preset::TYPE_SLA_MATERIAL, false); | ||||
|     init_combo(&p->combo_printer, _(L("Printer")), Preset::TYPE_PRINTER, false); | ||||
|     init_combo(&p->combo_print,         _(L("Print settings")), Preset::TYPE_PRINT,         false); | ||||
|     init_combo(&p->combos_filament[0],  _(L("Filament")),       Preset::TYPE_FILAMENT,      true); | ||||
|     init_combo(&p->combo_sla_print,     _(L("SLA print")),      Preset::TYPE_SLA_PRINT,     false); | ||||
|     init_combo(&p->combo_sla_material,  _(L("SLA material")),   Preset::TYPE_SLA_MATERIAL,  false); | ||||
|     init_combo(&p->combo_printer,       _(L("Printer")),        Preset::TYPE_PRINTER,       false); | ||||
| 
 | ||||
|     // calculate width of the preset labels 
 | ||||
|     p->sizer_presets->Layout(); | ||||
|  | @ -620,6 +622,10 @@ void Sidebar::update_presets(Preset::Type preset_type) | |||
| 		preset_bundle.prints.update_platter_ui(p->combo_print); | ||||
|         break; | ||||
| 
 | ||||
|     case Preset::TYPE_SLA_PRINT: | ||||
| 		preset_bundle.sla_prints.update_platter_ui(p->combo_sla_print); | ||||
|         break; | ||||
| 
 | ||||
|     case Preset::TYPE_SLA_MATERIAL: | ||||
| 		preset_bundle.sla_materials.update_platter_ui(p->combo_sla_material); | ||||
|         break; | ||||
|  | @ -629,8 +635,10 @@ void Sidebar::update_presets(Preset::Type preset_type) | |||
| 		// Update the print choosers to only contain the compatible presets, update the dirty flags.
 | ||||
| 		if (p->plater->printer_technology() == ptFFF) | ||||
| 			preset_bundle.prints.update_platter_ui(p->combo_print); | ||||
| 		else | ||||
| 			preset_bundle.sla_materials.update_platter_ui(p->combo_sla_material); | ||||
|         else { | ||||
|             preset_bundle.sla_prints.update_platter_ui(p->combo_sla_print); | ||||
|             preset_bundle.sla_materials.update_platter_ui(p->combo_sla_material); | ||||
|         } | ||||
| 		// Update the printer choosers, update the dirty flags.
 | ||||
| 		preset_bundle.printers.update_platter_ui(p->combo_printer); | ||||
| 		// Update the filament choosers to only contain the compatible presets, update the color preview,
 | ||||
|  | @ -1871,8 +1879,6 @@ void Plater::priv::on_select_preset(wxCommandEvent &evt) | |||
|         } | ||||
|     } | ||||
| 
 | ||||
|     // Synchronize config.ini with the current selections.
 | ||||
|     wxGetApp().preset_bundle->export_selections(*wxGetApp().app_config); | ||||
|     // update plater with new config
 | ||||
|     wxGetApp().plater()->on_config_change(wxGetApp().preset_bundle->full_config()); | ||||
| } | ||||
|  | @ -2021,7 +2027,7 @@ void Plater::priv::on_wipetower_moved(Vec3dEvent &evt) | |||
|     DynamicPrintConfig cfg; | ||||
|     cfg.opt<ConfigOptionFloat>("wipe_tower_x", true)->value = evt.data(0); | ||||
|     cfg.opt<ConfigOptionFloat>("wipe_tower_y", true)->value = evt.data(1); | ||||
|     main_frame->get_preset_tab("print")->load_config(cfg); | ||||
|     wxGetApp().get_tab(Preset::TYPE_PRINT)->load_config(cfg); | ||||
| } | ||||
| 
 | ||||
| void Plater::priv::on_enable_action_buttons(Event<bool>&) | ||||
|  |  | |||
|  | @ -396,6 +396,34 @@ const std::vector<std::string>& Preset::sla_material_options() | |||
|     return s_opts; | ||||
| } | ||||
| 
 | ||||
| const std::vector<std::string>& Preset::sla_print_options() | ||||
| {     | ||||
|     static std::vector<std::string> s_opts; | ||||
|     if (s_opts.empty()) { | ||||
|         s_opts = { | ||||
|             "layer_height", | ||||
|             "support_head_front_radius", | ||||
|             "support_head_penetration", | ||||
|             "support_head_back_radius", | ||||
|             "support_head_width", | ||||
|             "support_pillar_radius", | ||||
|             "support_base_radius", | ||||
|             "support_base_height", | ||||
|             "support_critical_angle", | ||||
|             "support_max_bridge_length", | ||||
|             "pad_wall_thickness", | ||||
|             "pad_wall_height", | ||||
|             "pad_max_merge_distance", | ||||
|             "pad_edge_radius", | ||||
|             "default_sla_print_profile", | ||||
|             "compatible_printers", | ||||
|             "compatible_printers_condition",  | ||||
|             "inherits" | ||||
|         }; | ||||
|     } | ||||
|     return s_opts; | ||||
| } | ||||
| 
 | ||||
| PresetCollection::PresetCollection(Preset::Type type, const std::vector<std::string> &keys, const Slic3r::StaticPrintConfig &defaults, const std::string &default_name) : | ||||
|     m_type(type), | ||||
|     m_edited_preset(type, "", false), | ||||
|  |  | |||
|  | @ -84,6 +84,7 @@ public: | |||
|     { | ||||
|         TYPE_INVALID, | ||||
|         TYPE_PRINT, | ||||
|         TYPE_SLA_PRINT, | ||||
|         TYPE_FILAMENT, | ||||
|         TYPE_SLA_MATERIAL, | ||||
|         TYPE_PRINTER, | ||||
|  | @ -173,6 +174,7 @@ public: | |||
| 
 | ||||
|     static const std::vector<std::string>&  sla_printer_options(); | ||||
|     static const std::vector<std::string>&  sla_material_options(); | ||||
|     static const std::vector<std::string>&  sla_print_options(); | ||||
| 
 | ||||
| 	static void                             update_suffix_modified(); | ||||
|     static void                             normalize(DynamicPrintConfig &config); | ||||
|  |  | |||
|  | @ -45,6 +45,7 @@ PresetBundle::PresetBundle() : | |||
|     prints(Preset::TYPE_PRINT, Preset::print_options(), static_cast<const HostConfig&>(FullPrintConfig::defaults())),  | ||||
|     filaments(Preset::TYPE_FILAMENT, Preset::filament_options(), static_cast<const HostConfig&>(FullPrintConfig::defaults())),  | ||||
|     sla_materials(Preset::TYPE_SLA_MATERIAL, Preset::sla_material_options(), static_cast<const SLAMaterialConfig&>(SLAFullPrintConfig::defaults())),  | ||||
|     sla_prints(Preset::TYPE_SLA_PRINT, Preset::sla_print_options(), static_cast<const SLAPrintObjectConfig&>(SLAFullPrintConfig::defaults())), | ||||
|     printers(Preset::TYPE_PRINTER, Preset::printer_options(), static_cast<const HostConfig&>(FullPrintConfig::defaults()), "- default FFF -"), | ||||
|     m_bitmapCompatible(new wxBitmap), | ||||
|     m_bitmapIncompatible(new wxBitmap), | ||||
|  | @ -76,6 +77,10 @@ PresetBundle::PresetBundle() : | |||
|     this->sla_materials.default_preset().compatible_printers_condition(); | ||||
|     this->sla_materials.default_preset().inherits(); | ||||
| 
 | ||||
|     this->sla_prints.default_preset().config.optptr("sla_print_settings_id", true); | ||||
|     this->sla_prints.default_preset().compatible_printers_condition(); | ||||
|     this->sla_prints.default_preset().inherits(); | ||||
| 
 | ||||
|     this->printers.add_default_preset(Preset::sla_printer_options(), static_cast<const SLAMaterialConfig&>(SLAFullPrintConfig::defaults()), "- default SLA -"); | ||||
|     this->printers.preset(1).printer_technology() = ptSLA; | ||||
|     for (size_t i = 0; i < 2; ++ i) { | ||||
|  | @ -88,14 +93,18 @@ PresetBundle::PresetBundle() : | |||
|         if (i == 0) { | ||||
|             preset.config.optptr("default_print_profile", true); | ||||
|             preset.config.option<ConfigOptionStrings>("default_filament_profile", true)->values = { "" }; | ||||
|         } else  | ||||
|         } | ||||
|         else { | ||||
|             preset.config.optptr("default_sla_material_profile", true); | ||||
|             preset.config.optptr("default_sla_print_profile", true); | ||||
|         } | ||||
|         // default_sla_material_profile
 | ||||
|         preset.inherits(); | ||||
|     } | ||||
| 
 | ||||
| 	// Load the default preset bitmaps.
 | ||||
|     this->prints       .load_bitmap_default("cog.png"); | ||||
|     this->sla_prints   .load_bitmap_default("package_green.png"); | ||||
|     this->filaments    .load_bitmap_default("spool.png"); | ||||
|     this->sla_materials.load_bitmap_default("package_green.png"); | ||||
|     this->printers     .load_bitmap_default("printer_empty.png"); | ||||
|  | @ -103,6 +112,7 @@ PresetBundle::PresetBundle() : | |||
| 
 | ||||
|     // Re-activate the default presets, so their "edited" preset copies will be updated with the additional configuration values above.
 | ||||
|     this->prints       .select_preset(0); | ||||
|     this->sla_prints   .select_preset(0); | ||||
|     this->filaments    .select_preset(0); | ||||
|     this->sla_materials.select_preset(0); | ||||
|     this->printers     .select_preset(0); | ||||
|  | @ -133,12 +143,14 @@ void PresetBundle::reset(bool delete_files) | |||
|     // Clear the existing presets, delete their respective files.
 | ||||
|     this->vendors.clear(); | ||||
|     this->prints       .reset(delete_files); | ||||
|     this->sla_prints   .reset(delete_files); | ||||
|     this->filaments    .reset(delete_files); | ||||
|     this->sla_materials.reset(delete_files); | ||||
|     this->printers     .reset(delete_files); | ||||
|     this->filament_presets.clear(); | ||||
|     this->filament_presets.emplace_back(this->filaments.get_selected_preset_name()); | ||||
|     this->obsolete_presets.prints.clear(); | ||||
|     this->obsolete_presets.sla_prints.clear(); | ||||
|     this->obsolete_presets.filaments.clear(); | ||||
|     this->obsolete_presets.sla_materials.clear(); | ||||
|     this->obsolete_presets.printers.clear(); | ||||
|  | @ -156,12 +168,14 @@ void PresetBundle::setup_directories() | |||
|         data_dir / "presets",  | ||||
|         data_dir / "presets" / "print",  | ||||
|         data_dir / "presets" / "filament",  | ||||
|         data_dir / "presets" / "sla_print",   | ||||
|         data_dir / "presets" / "sla_material",  | ||||
|         data_dir / "presets" / "printer"  | ||||
| #else | ||||
|         // Store the print/filament/printer presets at the same location as the upstream Slic3r.
 | ||||
|         data_dir / "print",  | ||||
|         data_dir / "filament",  | ||||
|         data_dir / "sla_print",  | ||||
|         data_dir / "sla_material",  | ||||
|         data_dir / "printer"  | ||||
| #endif | ||||
|  | @ -193,6 +207,11 @@ void PresetBundle::load_presets(const AppConfig &config) | |||
|     } catch (const std::runtime_error &err) { | ||||
|         errors_cummulative += err.what(); | ||||
|     } | ||||
|     try { | ||||
|         this->sla_prints.load_presets(dir_user_presets, "sla_print"); | ||||
|     } catch (const std::runtime_error &err) { | ||||
|         errors_cummulative += err.what(); | ||||
|     } | ||||
|     try { | ||||
|         this->filaments.load_presets(dir_user_presets, "filament"); | ||||
|     } catch (const std::runtime_error &err) { | ||||
|  | @ -267,13 +286,16 @@ std::vector<std::string> PresetBundle::merge_presets(PresetBundle &&other) | |||
| { | ||||
|     this->vendors.insert(other.vendors.begin(), other.vendors.end()); | ||||
|     std::vector<std::string> duplicate_prints        = this->prints       .merge_presets(std::move(other.prints),        this->vendors); | ||||
|     std::vector<std::string> duplicate_sla_prints    = this->sla_prints   .merge_presets(std::move(other.sla_prints),    this->vendors); | ||||
|     std::vector<std::string> duplicate_filaments     = this->filaments    .merge_presets(std::move(other.filaments),     this->vendors); | ||||
|     std::vector<std::string> duplicate_sla_materials = this->sla_materials.merge_presets(std::move(other.sla_materials), this->vendors); | ||||
|     std::vector<std::string> duplicate_printers      = this->printers     .merge_presets(std::move(other.printers),      this->vendors); | ||||
| 	append(this->obsolete_presets.prints,        std::move(other.obsolete_presets.prints)); | ||||
| 	append(this->obsolete_presets.sla_prints,    std::move(other.obsolete_presets.sla_prints)); | ||||
| 	append(this->obsolete_presets.filaments,     std::move(other.obsolete_presets.filaments)); | ||||
|     append(this->obsolete_presets.sla_materials, std::move(other.obsolete_presets.sla_materials)); | ||||
| 	append(this->obsolete_presets.printers,      std::move(other.obsolete_presets.printers)); | ||||
| 	append(duplicate_prints, std::move(duplicate_sla_prints)); | ||||
| 	append(duplicate_prints, std::move(duplicate_filaments)); | ||||
|     append(duplicate_prints, std::move(duplicate_sla_materials)); | ||||
|     append(duplicate_prints, std::move(duplicate_printers)); | ||||
|  | @ -307,6 +329,7 @@ void PresetBundle::load_selections(const AppConfig &config) | |||
| 
 | ||||
|     // Parse the initial print / filament / printer profile names.
 | ||||
|     std::string initial_print_profile_name        = remove_ini_suffix(config.get("presets", "print")); | ||||
|     std::string initial_sla_print_profile_name    = remove_ini_suffix(config.get("presets", "sla_print")); | ||||
|     std::string initial_filament_profile_name     = remove_ini_suffix(config.get("presets", "filament")); | ||||
|     std::string initial_sla_material_profile_name = remove_ini_suffix(config.get("presets", "sla_material")); | ||||
| 	std::string initial_printer_profile_name      = remove_ini_suffix(config.get("presets", "printer")); | ||||
|  | @ -320,10 +343,12 @@ void PresetBundle::load_selections(const AppConfig &config) | |||
|     if (printer_technology == ptFFF) { | ||||
|         prints.select_preset_by_name_strict(initial_print_profile_name); | ||||
|         filaments.select_preset_by_name_strict(initial_filament_profile_name); | ||||
|         sla_prints.select_preset_by_name(initial_sla_material_profile_name, true); | ||||
|         sla_materials.select_preset_by_name(initial_sla_material_profile_name, true); | ||||
|     } else { | ||||
|         prints.select_preset_by_name(initial_print_profile_name, true); | ||||
|         filaments.select_preset_by_name(initial_filament_profile_name, true); | ||||
|         sla_prints.select_preset_by_name_strict(initial_sla_material_profile_name); | ||||
|         sla_materials.select_preset_by_name_strict(initial_sla_material_profile_name); | ||||
|     } | ||||
| 
 | ||||
|  | @ -364,6 +389,7 @@ void PresetBundle::export_selections(AppConfig &config) | |||
|         sprintf(name, "filament_%d", i); | ||||
|         config.set("presets", name, filament_presets[i]); | ||||
|     } | ||||
|     config.set("presets", "sla_print",    sla_prints.get_selected_preset_name()); | ||||
|     config.set("presets", "sla_material", sla_materials.get_selected_preset_name()); | ||||
|     config.set("presets", "printer",  printers.get_selected_preset_name()); | ||||
| } | ||||
|  | @ -378,6 +404,7 @@ void PresetBundle::export_selections(PlaceholderParser &pp) | |||
|         pp.set("filament_preset",     filament_presets); | ||||
|         break; | ||||
|     case ptSLA: | ||||
|         pp.set("sla_print_preset",    sla_prints.get_selected_preset().name); | ||||
|         pp.set("sla_material_preset", sla_materials.get_selected_preset().name); | ||||
|         break; | ||||
|     } | ||||
|  | @ -401,24 +428,28 @@ bool PresetBundle::load_compatible_bitmaps() | |||
|     if (loaded_compatible) { | ||||
|         prints       .set_bitmap_compatible(m_bitmapCompatible); | ||||
|         filaments    .set_bitmap_compatible(m_bitmapCompatible); | ||||
|         sla_prints   .set_bitmap_compatible(m_bitmapCompatible); | ||||
|         sla_materials.set_bitmap_compatible(m_bitmapCompatible); | ||||
| //        printers .set_bitmap_compatible(m_bitmapCompatible);
 | ||||
|     } | ||||
|     if (loaded_incompatible) { | ||||
|         prints       .set_bitmap_incompatible(m_bitmapIncompatible); | ||||
|         filaments    .set_bitmap_incompatible(m_bitmapIncompatible); | ||||
|         sla_prints   .set_bitmap_incompatible(m_bitmapIncompatible); | ||||
|         sla_materials.set_bitmap_incompatible(m_bitmapIncompatible); | ||||
| //        printers .set_bitmap_incompatible(m_bitmapIncompatible);
 | ||||
|     } | ||||
|     if (loaded_lock) { | ||||
|         prints       .set_bitmap_lock(m_bitmapLock); | ||||
|         filaments    .set_bitmap_lock(m_bitmapLock); | ||||
|         sla_prints   .set_bitmap_lock(m_bitmapLock); | ||||
|         sla_materials.set_bitmap_lock(m_bitmapLock); | ||||
|         printers     .set_bitmap_lock(m_bitmapLock); | ||||
|     } | ||||
|     if (loaded_lock_open) { | ||||
|         prints       .set_bitmap_lock_open(m_bitmapLock); | ||||
|         filaments    .set_bitmap_lock_open(m_bitmapLock); | ||||
|         sla_prints   .set_bitmap_lock_open(m_bitmapLock); | ||||
|         sla_materials.set_bitmap_lock_open(m_bitmapLock); | ||||
|         printers     .set_bitmap_lock_open(m_bitmapLock); | ||||
|     } | ||||
|  | @ -533,14 +564,17 @@ DynamicPrintConfig PresetBundle::full_sla_config() const | |||
| {     | ||||
|     DynamicPrintConfig out; | ||||
|     out.apply(SLAFullPrintConfig::defaults()); | ||||
|     out.apply(this->sla_prints.get_edited_preset().config); | ||||
|     out.apply(this->sla_materials.get_edited_preset().config); | ||||
|     out.apply(this->printers.get_edited_preset().config); | ||||
|     // There are no project configuration values as of now, the project_config is reserved for FFF printers.
 | ||||
| //    out.apply(this->project_config);
 | ||||
| 
 | ||||
|     // Collect the "compatible_printers_condition" and "inherits" values over all presets (sla_materials, printers) into a single vector.
 | ||||
|     // Collect the "compatible_printers_condition" and "inherits" values over all presets (sla_prints, sla_materials, printers) into a single vector.
 | ||||
|     std::vector<std::string> compatible_printers_condition; | ||||
|     std::vector<std::string> inherits; | ||||
|     compatible_printers_condition.emplace_back(this->/*prints*/sla_prints.get_edited_preset().compatible_printers_condition()); | ||||
|     inherits                     .emplace_back(this->/*prints*/sla_prints.get_edited_preset().inherits()); | ||||
|     compatible_printers_condition.emplace_back(this->/*prints*/sla_materials.get_edited_preset().compatible_printers_condition()); | ||||
|     inherits                     .emplace_back(this->/*prints*/sla_materials.get_edited_preset().inherits()); | ||||
|     inherits                     .emplace_back(this->printers.get_edited_preset().inherits()); | ||||
|  | @ -550,6 +584,7 @@ DynamicPrintConfig PresetBundle::full_sla_config() const | |||
|     out.erase("compatible_printers_condition"); | ||||
|     out.erase("inherits"); | ||||
|      | ||||
|     out.option<ConfigOptionString >("sla_print_settings_id",    true)->value  = this->sla_prints.get_selected_preset().name; | ||||
|     out.option<ConfigOptionString >("sla_material_settings_id", true)->value  = this->sla_materials.get_selected_preset().name; | ||||
|     out.option<ConfigOptionString >("printer_settings_id",      true)->value  = this->printers.get_selected_preset().name; | ||||
| 
 | ||||
|  | @ -661,6 +696,8 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool | |||
| 
 | ||||
|     // 2) If the loading succeeded, split and load the config into print / filament / printer settings.
 | ||||
|     // First load the print and printer presets.
 | ||||
| 
 | ||||
|     // #ys_FIXME_SLA_PRINT
 | ||||
|     for (size_t i_group = 0; i_group < 2; ++ i_group) { | ||||
|         PresetCollection &presets = (i_group == 0) ? ((printer_technology == ptFFF) ? this->prints : this->sla_materials) : this->printers; | ||||
|         // Split the "compatible_printers_condition" and "inherits" values one by one from a single vector to the print & printer profiles.
 | ||||
|  | @ -794,6 +831,7 @@ void PresetBundle::load_config_file_config_bundle(const std::string &path, const | |||
|         return preset_name_dst; | ||||
|     }; | ||||
|     load_one(this->prints,        tmp_bundle.prints,        tmp_bundle.prints       .get_selected_preset().name, true); | ||||
|     load_one(this->sla_prints,    tmp_bundle.sla_prints,    tmp_bundle.sla_prints   .get_selected_preset().name, true); | ||||
|     load_one(this->filaments,     tmp_bundle.filaments,     tmp_bundle.filaments    .get_selected_preset().name, true); | ||||
|     load_one(this->sla_materials, tmp_bundle.sla_materials, tmp_bundle.sla_materials.get_selected_preset().name, true); | ||||
|     load_one(this->printers,      tmp_bundle.printers,      tmp_bundle.printers     .get_selected_preset().name, true); | ||||
|  | @ -920,6 +958,7 @@ static void flatten_configbundle_hierarchy(boost::property_tree::ptree &tree) | |||
| { | ||||
|     flatten_configbundle_hierarchy(tree, "print"); | ||||
|     flatten_configbundle_hierarchy(tree, "filament"); | ||||
|     flatten_configbundle_hierarchy(tree, "sla_print"); | ||||
|     flatten_configbundle_hierarchy(tree, "sla_material"); | ||||
|     flatten_configbundle_hierarchy(tree, "printer"); | ||||
| } | ||||
|  | @ -957,10 +996,12 @@ size_t PresetBundle::load_configbundle(const std::string &path, unsigned int fla | |||
|     // Parse the obsolete preset names, to be deleted when upgrading from the old configuration structure.
 | ||||
|     std::vector<std::string> loaded_prints; | ||||
|     std::vector<std::string> loaded_filaments; | ||||
|     std::vector<std::string> loaded_sla_prints; | ||||
|     std::vector<std::string> loaded_sla_materials; | ||||
|     std::vector<std::string> loaded_printers; | ||||
|     std::string              active_print; | ||||
|     std::vector<std::string> active_filaments; | ||||
|     std::string              active_sla_print; | ||||
|     std::string              active_sla_material; | ||||
|     std::string              active_printer; | ||||
|     size_t                   presets_loaded = 0; | ||||
|  | @ -976,6 +1017,10 @@ size_t PresetBundle::load_configbundle(const std::string &path, unsigned int fla | |||
|             presets = &this->filaments; | ||||
|             loaded  = &loaded_filaments; | ||||
|             preset_name = section.first.substr(9); | ||||
|         } else if (boost::starts_with(section.first, "sla_print:")) { | ||||
|             presets = &this->sla_prints; | ||||
|             loaded  = &loaded_sla_prints; | ||||
|             preset_name = section.first.substr(10); | ||||
|         } else if (boost::starts_with(section.first, "sla_material:")) { | ||||
|             presets = &this->sla_materials; | ||||
|             loaded  = &loaded_sla_materials; | ||||
|  | @ -996,6 +1041,8 @@ size_t PresetBundle::load_configbundle(const std::string &path, unsigned int fla | |||
|                             active_filaments.resize(idx + 1, std::string()); | ||||
|                         active_filaments[idx] = kvp.second.data(); | ||||
|                     } | ||||
|                 } else if (kvp.first == "sla_print") { | ||||
|                     active_sla_print = kvp.second.data(); | ||||
|                 } else if (kvp.first == "sla_material") { | ||||
|                     active_sla_material = kvp.second.data(); | ||||
|                 } else if (kvp.first == "printer") { | ||||
|  | @ -1011,6 +1058,8 @@ size_t PresetBundle::load_configbundle(const std::string &path, unsigned int fla | |||
|                     dst = &this->obsolete_presets.prints; | ||||
|                 else if (kvp.first == "filament") | ||||
|                     dst = &this->obsolete_presets.filaments; | ||||
|                 else if (kvp.first == "sla_print") | ||||
|                     dst = &this->obsolete_presets.sla_prints; | ||||
|                 else if (kvp.first == "sla_material") | ||||
|                     dst = &this->obsolete_presets.sla_materials; | ||||
|                 else if (kvp.first == "printer") | ||||
|  | @ -1113,6 +1162,8 @@ size_t PresetBundle::load_configbundle(const std::string &path, unsigned int fla | |||
|     if ((flags & LOAD_CFGBNDLE_SYSTEM) == 0) { | ||||
|         if (! active_print.empty())  | ||||
|             prints.select_preset_by_name(active_print, true); | ||||
|         if (! active_sla_print.empty())  | ||||
|             sla_materials.select_preset_by_name(active_sla_print, true); | ||||
|         if (! active_sla_material.empty())  | ||||
|             sla_materials.select_preset_by_name(active_sla_material, true); | ||||
|         if (! active_printer.empty()) | ||||
|  | @ -1217,6 +1268,13 @@ void PresetBundle::update_compatible_with_printer(bool select_other_if_incompati | |||
|             this->sla_materials.update_compatible_with_printer(printer_preset, select_other_if_incompatible) : | ||||
| 			this->sla_materials.update_compatible_with_printer(printer_preset, select_other_if_incompatible, | ||||
|                 [&prefered_sla_material_profile](const std::string& profile_name){ return profile_name == prefered_sla_material_profile; }); | ||||
| 		 | ||||
|         const std::string              &prefered_sla_print_profile        = printer_preset.config.opt_string("default_sla_print_profile"); | ||||
|         prefered_sla_print_profile.empty() ? | ||||
|             this->sla_prints.update_compatible_with_printer(printer_preset, select_other_if_incompatible) : | ||||
| 			this->sla_prints.update_compatible_with_printer(printer_preset, select_other_if_incompatible, | ||||
|             [&prefered_sla_print_profile](const std::string& profile_name){ return profile_name == prefered_sla_print_profile; }); | ||||
| 
 | ||||
| 		break; | ||||
| 	} | ||||
|     } | ||||
|  | @ -1231,6 +1289,8 @@ void PresetBundle::export_configbundle(const std::string &path) //, const Dynami | |||
|     c << "# " << Slic3r::header_slic3r_generated() << std::endl; | ||||
| 
 | ||||
|     // Export the print, filament and printer profiles.
 | ||||
| 
 | ||||
|     // #ys_FIXME_SLA_PRINT
 | ||||
|     for (size_t i_group = 0; i_group < 3; ++ i_group) { | ||||
|         const PresetCollection &presets = (i_group == 0) ? this->prints : (i_group == 1) ? this->filaments : this->printers; | ||||
|         for (const Preset &preset : presets()) { | ||||
|  | @ -1246,6 +1306,7 @@ void PresetBundle::export_configbundle(const std::string &path) //, const Dynami | |||
|     // Export the names of the active presets.
 | ||||
|     c << std::endl << "[presets]" << std::endl; | ||||
|     c << "print = " << this->prints.get_selected_preset().name << std::endl; | ||||
|     c << "sla_print = " << this->sla_prints.get_selected_preset().name << std::endl; | ||||
|     c << "sla_material = " << this->sla_materials.get_selected_preset().name << std::endl; | ||||
|     c << "printer = " << this->printers.get_selected_preset().name << std::endl; | ||||
|     for (size_t i = 0; i < this->filament_presets.size(); ++ i) { | ||||
|  | @ -1401,6 +1462,7 @@ void PresetBundle::set_default_suppressed(bool default_suppressed) | |||
| { | ||||
|     prints.set_default_suppressed(default_suppressed); | ||||
|     filaments.set_default_suppressed(default_suppressed); | ||||
|     sla_prints.set_default_suppressed(default_suppressed); | ||||
|     sla_materials.set_default_suppressed(default_suppressed); | ||||
|     printers.set_default_suppressed(default_suppressed); | ||||
| } | ||||
|  |  | |||
|  | @ -39,6 +39,7 @@ public: | |||
|     void            export_selections(PlaceholderParser &pp); | ||||
| 
 | ||||
|     PresetCollection            prints; | ||||
|     PresetCollection            sla_prints; | ||||
|     PresetCollection            filaments; | ||||
|     PresetCollection            sla_materials; | ||||
|     PrinterPresetCollection     printers; | ||||
|  | @ -57,6 +58,7 @@ public: | |||
| 
 | ||||
|     struct ObsoletePresets { | ||||
|         std::vector<std::string> prints; | ||||
|         std::vector<std::string> sla_prints; | ||||
|         std::vector<std::string> filaments; | ||||
|         std::vector<std::string> sla_materials; | ||||
|         std::vector<std::string> printers; | ||||
|  |  | |||
|  | @ -27,7 +27,6 @@ | |||
| #include "wxExtensions.hpp" | ||||
| #include <wx/wupdlock.h> | ||||
| 
 | ||||
| #include <chrono> | ||||
| #include "GUI_App.hpp" | ||||
| 
 | ||||
| namespace Slic3r { | ||||
|  | @ -41,6 +40,7 @@ wxDEFINE_EVENT(EVT_TAB_PRESETS_CHANGED, SimpleEvent); | |||
| void Tab::set_type() | ||||
| { | ||||
|     if (m_name == "print")              { m_type = Slic3r::Preset::TYPE_PRINT; } | ||||
|     else if (m_name == "sla_print")     { m_type = Slic3r::Preset::TYPE_SLA_PRINT; } | ||||
|     else if (m_name == "filament")      { m_type = Slic3r::Preset::TYPE_FILAMENT; } | ||||
|     else if (m_name == "sla_material")  { m_type = Slic3r::Preset::TYPE_SLA_MATERIAL; } | ||||
|     else if (m_name == "printer")       { m_type = Slic3r::Preset::TYPE_PRINTER; } | ||||
|  | @ -765,9 +765,7 @@ void Tab::on_presets_changed() | |||
|         { | ||||
|             // If the printer tells us that the print or filament/sla_material preset has been switched or invalidated,
 | ||||
|             // refresh the print or filament/sla_material tab page.
 | ||||
|             Tab* tab = wxGetApp().get_tab(t); | ||||
|             if (tab) | ||||
|                 tab->load_current_preset(); | ||||
|             wxGetApp().get_tab(t)->load_current_preset(); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|  | @ -828,6 +826,10 @@ void Tab::update_preset_description_line() | |||
| 				const std::string &default_sla_material_profile = preset.config.opt_string("default_sla_material_profile"); | ||||
| 				if (!default_sla_material_profile.empty()) | ||||
| 					description_line += "\n\n\t" + _(L("default SLA material profile")) + ": \n\t\t" + default_sla_material_profile; | ||||
| 
 | ||||
| 				const std::string &default_sla_print_profile = preset.config.opt_string("default_sla_print_profile"); | ||||
| 				if (!default_sla_print_profile.empty()) | ||||
| 					description_line += "\n\n\t" + _(L("default SLA print profile")) + ": \n\t\t" + default_sla_print_profile; | ||||
| 				break; | ||||
| 			} | ||||
| 			} | ||||
|  | @ -2247,14 +2249,16 @@ void Tab::load_current_preset() | |||
|             PrinterTechnology& printer_technology = m_presets->get_edited_preset().printer_technology(); | ||||
|             if (printer_technology != static_cast<TabPrinter*>(this)->m_printer_technology) | ||||
|             { | ||||
|                 for (auto& tab : wxGetApp().mainframe->get_preset_tabs()) { | ||||
|                     if (tab.technology != printer_technology) | ||||
|                     { | ||||
|                         int page_id = wxGetApp().tab_panel()->FindPage(tab.panel); | ||||
|                 for (auto tab : wxGetApp().tabs_list) { | ||||
|                     if (tab->type() == Preset::TYPE_PRINTER) // Printer tab is shown every time
 | ||||
|                         continue; | ||||
|                     if (tab->supports_printer_technology(printer_technology)) | ||||
|                         wxGetApp().tab_panel()->InsertPage(wxGetApp().tab_panel()->FindPage(this), tab, tab->title()); | ||||
|                     else { | ||||
|                         int page_id = wxGetApp().tab_panel()->FindPage(tab); | ||||
|                         wxGetApp().tab_panel()->GetPage(page_id)->Show(false); | ||||
|                         wxGetApp().tab_panel()->RemovePage(page_id); | ||||
|                     } else | ||||
|                         wxGetApp().tab_panel()->InsertPage(wxGetApp().tab_panel()->FindPage(this), tab.panel, tab.panel->title()); | ||||
|                     }  | ||||
|                 } | ||||
|                 static_cast<TabPrinter*>(this)->m_printer_technology = printer_technology; | ||||
|             } | ||||
|  | @ -2347,6 +2351,7 @@ void Tab::select_preset(std::string preset_name) | |||
| 	auto current_dirty = m_presets->current_is_dirty(); | ||||
| 	auto printer_tab   = m_presets->name() == "printer"; | ||||
| 	auto canceled      = false; | ||||
| // 	m_reload_dependent_tabs = {};
 | ||||
| 	m_dependent_tabs = {}; | ||||
| 	if (current_dirty && !may_discard_current_dirty_preset()) { | ||||
| 		canceled = true; | ||||
|  | @ -2370,6 +2375,7 @@ void Tab::select_preset(std::string preset_name) | |||
| 		}; | ||||
| 		std::vector<PresetUpdate> updates = { | ||||
| 			{ Preset::Type::TYPE_PRINT,       &m_preset_bundle->prints,			ptFFF }, | ||||
| 			{ Preset::Type::TYPE_SLA_PRINT,   &m_preset_bundle->sla_prints,		ptSLA }, | ||||
| 			{ Preset::Type::TYPE_FILAMENT,    &m_preset_bundle->filaments,		ptFFF }, | ||||
|  			{ Preset::Type::TYPE_SLA_MATERIAL,&m_preset_bundle->sla_materials,	ptSLA } | ||||
| 		}; | ||||
|  | @ -2382,8 +2388,10 @@ void Tab::select_preset(std::string preset_name) | |||
| 		if (! canceled) { | ||||
| 			for (PresetUpdate &pu : updates) { | ||||
| 				// The preset will be switched to a different, compatible preset, or the '-- default --'.
 | ||||
|                 if (pu.technology == new_printer_technology) | ||||
|                 if (pu.technology == new_printer_technology) { | ||||
| // 				    m_reload_dependent_tabs.emplace_back(pu.name);
 | ||||
| 					m_dependent_tabs.emplace_back(pu.tab_type); | ||||
| 				} | ||||
| 				if (pu.old_preset_dirty) | ||||
| 					pu.presets->discard_current_changes(); | ||||
| 			} | ||||
|  | @ -2918,7 +2926,7 @@ void TabSLAMaterial::build() | |||
|     auto page = add_options_page(_(L("Material")), "package_green.png"); | ||||
| 
 | ||||
|     auto optgroup = page->new_optgroup(_(L("Layers"))); | ||||
|     optgroup->append_single_option_line("layer_height"); | ||||
| //     optgroup->append_single_option_line("layer_height");
 | ||||
|     optgroup->append_single_option_line("initial_layer_height"); | ||||
| 
 | ||||
|     optgroup = page->new_optgroup(_(L("Exposure"))); | ||||
|  | @ -2973,7 +2981,65 @@ void TabSLAMaterial::build() | |||
| void TabSLAMaterial::update() | ||||
| { | ||||
|     if (m_preset_bundle->printers.get_selected_preset().printer_technology() == ptFFF) | ||||
|         return; // ys_FIXME
 | ||||
|         return; // #ys_FIXME
 | ||||
| } | ||||
| 
 | ||||
| void TabSLAPrint::build() | ||||
| { | ||||
|     m_presets = &m_preset_bundle->sla_prints; | ||||
|     load_initial_data(); | ||||
| 
 | ||||
|     auto page = add_options_page(_(L("Layers and perimeters")), "package_green.png"); | ||||
| 
 | ||||
|     auto optgroup = page->new_optgroup(_(L("Layers"))); | ||||
|     optgroup->append_single_option_line("layer_height"); | ||||
| 
 | ||||
|     page = add_options_page(_(L("Supports")), "building.png"); | ||||
|     optgroup = page->new_optgroup(_(L("Support head"))); | ||||
|     optgroup->append_single_option_line("support_head_front_radius"); | ||||
|     optgroup->append_single_option_line("support_head_back_radius"); | ||||
|     optgroup->append_single_option_line("support_head_penetration"); | ||||
|     optgroup->append_single_option_line("support_head_width"); | ||||
| 
 | ||||
|     optgroup = page->new_optgroup(_(L("Support pillar"))); | ||||
|     optgroup->append_single_option_line("support_pillar_radius"); | ||||
|     optgroup->append_single_option_line("support_base_radius"); | ||||
|     optgroup->append_single_option_line("support_base_height"); | ||||
| 
 | ||||
|     optgroup = page->new_optgroup(_(L("Connection of the support sticks and junctions"))); | ||||
|     optgroup->append_single_option_line("support_critical_angle"); | ||||
|     optgroup->append_single_option_line("support_max_bridge_length"); | ||||
| 
 | ||||
|     optgroup = page->new_optgroup(_(L("Pad"))); | ||||
|     optgroup->append_single_option_line("pad_wall_thickness"); | ||||
|     optgroup->append_single_option_line("pad_wall_height"); | ||||
|     optgroup->append_single_option_line("pad_max_merge_distance"); | ||||
|     optgroup->append_single_option_line("pad_edge_radius"); | ||||
| 
 | ||||
|     page = add_options_page(_(L("Dependencies")), "wrench.png"); | ||||
|     optgroup = page->new_optgroup(_(L("Profile dependencies"))); | ||||
|     Line line = optgroup->create_single_option_line("compatible_printers");//Line { _(L("Compatible printers")), "" };
 | ||||
|     line.widget = [this](wxWindow* parent) { | ||||
|         return compatible_printers_widget(parent, &m_compatible_printers_checkbox, &m_compatible_printers_btn); | ||||
|     }; | ||||
|     optgroup->append_line(line, &m_colored_Label); | ||||
| 
 | ||||
|     Option option = optgroup->get_option("compatible_printers_condition"); | ||||
|     option.opt.full_width = true; | ||||
|     optgroup->append_single_option_line(option); | ||||
| 
 | ||||
|     line = Line{ "", "" }; | ||||
|     line.full_width = 1; | ||||
|     line.widget = [this](wxWindow* parent) { | ||||
|         return description_line_widget(parent, &m_parent_preset_description_line); | ||||
|     }; | ||||
|     optgroup->append_line(line); | ||||
| } | ||||
| 
 | ||||
| void TabSLAPrint::update() | ||||
| { | ||||
|     if (m_preset_bundle->printers.get_selected_preset().printer_technology() == ptFFF) | ||||
|         return; // #ys_FIXME
 | ||||
| } | ||||
| 
 | ||||
| } // GUI
 | ||||
|  |  | |||
|  | @ -370,6 +370,19 @@ public: | |||
|     bool 		supports_printer_technology(const PrinterTechnology tech) override { return tech == ptSLA; } | ||||
| }; | ||||
| 
 | ||||
| class TabSLAPrint : public Tab | ||||
| { | ||||
| public: | ||||
|     TabSLAPrint() {} | ||||
|     TabSLAPrint(wxNotebook* parent) : | ||||
|         Tab(parent, _(L("SLA Print Settings")), "sla_print") {} | ||||
|     ~TabSLAPrint() {} | ||||
|         void		build() override; | ||||
|     void		update() override; | ||||
| //     void		init_options_list() override;
 | ||||
|     bool 		supports_printer_technology(const PrinterTechnology tech) override { return tech == ptSLA; } | ||||
| }; | ||||
| 
 | ||||
| class SavePresetWindow :public wxDialog | ||||
| { | ||||
| public: | ||||
|  |  | |||
|  | @ -448,7 +448,8 @@ void PresetUpdater::priv::perform_updates(Updates &&updates, bool snapshot) cons | |||
| 
 | ||||
| 			for (const auto &name : bundle.obsolete_presets.prints)    { obsolete_remover("print", name); } | ||||
| 			for (const auto &name : bundle.obsolete_presets.filaments) { obsolete_remover("filament", name); } | ||||
| 			for (const auto &name : bundle.obsolete_presets.filaments) { obsolete_remover("sla_material", name); } | ||||
| 			for (const auto &name : bundle.obsolete_presets.sla_prints) { obsolete_remover("sla_print", name); }  | ||||
| 			for (const auto &name : bundle.obsolete_presets.sla_materials/*filaments*/) { obsolete_remover("sla_material", name); }  | ||||
| 			for (const auto &name : bundle.obsolete_presets.printers)  { obsolete_remover("printer", name); } | ||||
| 		} | ||||
| 	} | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 tamasmeszaros
						tamasmeszaros