From b58713c06ff154b8d421343496a64d29ffb9b1db Mon Sep 17 00:00:00 2001 From: tamasmeszaros <meszaros.q@gmail.com> Date: Tue, 20 Aug 2019 17:24:48 +0200 Subject: [PATCH] SLA exposure bounds to printer params. --- src/libslic3r/PrintConfig.cpp | 8 +-- src/libslic3r/PrintConfig.hpp | 16 +++--- src/libslic3r/SLAPrint.cpp | 20 ++++---- src/slic3r/GUI/Preset.cpp | 6 ++- src/slic3r/GUI/Tab.cpp | 94 +++++++++-------------------------- 5 files changed, 50 insertions(+), 94 deletions(-) diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 037b24800..8f56c1b83 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -2412,7 +2412,7 @@ void PrintConfigDef::init_sla_params() def->mode = comExpert; def->set_default_value(new ConfigOptionInt(10)); - def = this->add("exposure_time_min", coFloat); + def = this->add("min_exposure_time", coFloat); def->label = L("Minimum exposure time"); def->tooltip = L("Minimum exposure time"); def->sidetext = L("s"); @@ -2420,7 +2420,7 @@ void PrintConfigDef::init_sla_params() def->mode = comExpert; def->set_default_value(new ConfigOptionFloat(0)); - def = this->add("exposure_time_max", coFloat); + def = this->add("max_exposure_time", coFloat); def->label = L("Maximum exposure time"); def->tooltip = L("Maximum exposure time"); def->sidetext = L("s"); @@ -2435,7 +2435,7 @@ void PrintConfigDef::init_sla_params() def->min = 0; def->set_default_value(new ConfigOptionFloat(10)); - def = this->add("initial_exposure_time_min", coFloat); + def = this->add("min_initial_exposure_time", coFloat); def->label = L("Minimum initial exposure time"); def->tooltip = L("Minimum initial exposure time"); def->sidetext = L("s"); @@ -2443,7 +2443,7 @@ void PrintConfigDef::init_sla_params() def->mode = comExpert; def->set_default_value(new ConfigOptionFloat(0)); - def = this->add("initial_exposure_time_max", coFloat); + def = this->add("max_initial_exposure_time", coFloat); def->label = L("Maximum initial exposure time"); def->tooltip = L("Maximum initial exposure time"); def->sidetext = L("s"); diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index ca2a210f2..35025fcd1 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -1098,22 +1098,14 @@ class SLAMaterialConfig : public StaticPrintConfig STATIC_PRINT_CONFIG_CACHE(SLAMaterialConfig) public: ConfigOptionFloat initial_layer_height; - ConfigOptionFloat exposure_time_min; - ConfigOptionFloat exposure_time_max; ConfigOptionFloat exposure_time; - ConfigOptionFloat initial_exposure_time_min; - ConfigOptionFloat initial_exposure_time_max; ConfigOptionFloat initial_exposure_time; ConfigOptionFloats material_correction; protected: void initialize(StaticCacheBase &cache, const char *base_ptr) { OPT_PTR(initial_layer_height); - OPT_PTR(exposure_time_min); - OPT_PTR(exposure_time_max); OPT_PTR(exposure_time); - OPT_PTR(initial_exposure_time_min); - OPT_PTR(initial_exposure_time_max); OPT_PTR(initial_exposure_time); OPT_PTR(material_correction); } @@ -1139,6 +1131,10 @@ public: ConfigOptionFloat fast_tilt_time; ConfigOptionFloat slow_tilt_time; ConfigOptionFloat area_fill; + ConfigOptionFloat min_exposure_time; + ConfigOptionFloat max_exposure_time; + ConfigOptionFloat min_initial_exposure_time; + ConfigOptionFloat max_initial_exposure_time; protected: void initialize(StaticCacheBase &cache, const char *base_ptr) { @@ -1158,6 +1154,10 @@ protected: OPT_PTR(fast_tilt_time); OPT_PTR(slow_tilt_time); OPT_PTR(area_fill); + OPT_PTR(min_exposure_time); + OPT_PTR(max_exposure_time); + OPT_PTR(min_initial_exposure_time); + OPT_PTR(max_initial_exposure_time); } }; diff --git a/src/libslic3r/SLAPrint.cpp b/src/libslic3r/SLAPrint.cpp index 8e99d6ddc..21aec8384 100644 --- a/src/libslic3r/SLAPrint.cpp +++ b/src/libslic3r/SLAPrint.cpp @@ -692,19 +692,19 @@ std::string SLAPrint::validate() const } } - double expt_max = m_material_config.exposure_time_max.getFloat(); - double expt_min = m_material_config.exposure_time_min.getFloat(); + double expt_max = m_printer_config.max_exposure_time.getFloat(); + double expt_min = m_printer_config.min_exposure_time.getFloat(); double expt_cur = m_material_config.exposure_time.getFloat(); if (expt_cur < expt_min || expt_cur > expt_max) - return L("Exposition time is out of predefined bounds."); + return L("Exposition time is out of printer profile bounds."); - double iexpt_max = m_material_config.initial_exposure_time_max.getFloat(); - double iexpt_min = m_material_config.initial_exposure_time_min.getFloat(); + double iexpt_max = m_printer_config.max_initial_exposure_time.getFloat(); + double iexpt_min = m_printer_config.min_initial_exposure_time.getFloat(); double iexpt_cur = m_material_config.initial_exposure_time.getFloat(); if (iexpt_cur < iexpt_min || iexpt_cur > iexpt_max) - return L("Initial exposition time is out of predefined bounds."); + return L("Initial exposition time is out of printer profile bounds."); return ""; } @@ -1600,11 +1600,11 @@ bool SLAPrint::invalidate_state_by_config_options(const std::vector<t_config_opt // Cache the plenty of parameters, which influence the final rasterization only, // or they are only notes not influencing the rasterization step. static std::unordered_set<std::string> steps_rasterize = { - "exposure_time_min", - "exposure_time_max", + "min_exposure_time", + "max_exposure_time", "exposure_time", - "initial_exposure_time_min", - "initial_exposure_time_max", + "min_initial_exposure_time", + "max_initial_exposure_time", "initial_exposure_time", "display_width", "display_height", diff --git a/src/slic3r/GUI/Preset.cpp b/src/slic3r/GUI/Preset.cpp index 82124761a..64793630c 100644 --- a/src/slic3r/GUI/Preset.cpp +++ b/src/slic3r/GUI/Preset.cpp @@ -500,8 +500,8 @@ const std::vector<std::string>& Preset::sla_material_options() if (s_opts.empty()) { s_opts = { "initial_layer_height", - "exposure_time_min", "exposure_time_max", "exposure_time", - "initial_exposure_time_min", "initial_exposure_time_max", "initial_exposure_time", + "exposure_time", + "initial_exposure_time", "material_correction", "material_notes", "default_sla_material_profile", @@ -527,6 +527,8 @@ const std::vector<std::string>& Preset::sla_printer_options() "relative_correction", "absolute_correction", "gamma_correction", + "min_exposure_time", "max_exposure_time", + "min_initial_exposure_time", "max_initial_exposure_time", "print_host", "printhost_apikey", "printhost_cafile", "printer_notes", "inherits" diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 030165337..368854222 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -838,7 +838,7 @@ static wxString support_combo_value_for_config(const DynamicPrintConfig &config, static wxString pad_combo_value_for_config(const DynamicPrintConfig &config) { - return config.opt_bool("pad_enable") ? (config.opt_bool("pad_zero_elevation") ? _("Around object") : _("Below object")) : _("None"); + return config.opt_bool("pad_enable") ? (config.opt_bool("pad_zero_elevation") ? _("Around object") : _("Below object")) : _("None"); } void Tab::on_value_change(const std::string& opt_key, const boost::any& value) @@ -860,8 +860,8 @@ void Tab::on_value_change(const std::string& opt_key, const boost::any& value) (opt_key == "supports_enable" || opt_key == "support_buildplate_only")) og_freq_chng_params->set_value("support", support_combo_value_for_config(*m_config, is_fff)); - if (! is_fff && (opt_key == "pad_enable" || opt_key == "pad_zero_elevation")) - og_freq_chng_params->set_value("pad", pad_combo_value_for_config(*m_config)); + if (! is_fff && (opt_key == "pad_enable" || opt_key == "pad_zero_elevation")) + og_freq_chng_params->set_value("pad", pad_combo_value_for_config(*m_config)); if (opt_key == "brim_width") { @@ -998,7 +998,7 @@ void Tab::update_frequently_changed_parameters() og_freq_chng_params->set_value("support", support_combo_value_for_config(*m_config, is_fff)); if (! is_fff) - og_freq_chng_params->set_value("pad", pad_combo_value_for_config(*m_config)); + og_freq_chng_params->set_value("pad", pad_combo_value_for_config(*m_config)); const std::string updated_value_key = is_fff ? "fill_density" : "pad_enable"; @@ -1772,13 +1772,13 @@ void TabFilament::reload_config() void TabFilament::update_volumetric_flow_preset_hints() { - wxString text; - try { - text = from_u8(PresetHints::maximum_volumetric_flow_description(*m_preset_bundle)); - } catch (std::exception &ex) { - text = _(L("Volumetric flow hints not available\n\n")) + from_u8(ex.what()); - } - m_volumetric_speed_description_line->SetText(text); + wxString text; + try { + text = from_u8(PresetHints::maximum_volumetric_flow_description(*m_preset_bundle)); + } catch (std::exception &ex) { + text = _(L("Volumetric flow hints not available\n\n")) + from_u8(ex.what()); + } + m_volumetric_speed_description_line->SetText(text); } void TabFilament::update() @@ -1788,9 +1788,9 @@ void TabFilament::update() m_update_cnt++; - wxString text = from_u8(PresetHints::cooling_description(m_presets->get_edited_preset())); - m_cooling_description_line->SetText(text); - this->update_volumetric_flow_preset_hints(); + wxString text = from_u8(PresetHints::cooling_description(m_presets->get_edited_preset())); + m_cooling_description_line->SetText(text); + this->update_volumetric_flow_preset_hints(); Layout(); bool cooling = m_config->opt_bool("cooling", 0); @@ -1812,8 +1812,8 @@ void TabFilament::update() void TabFilament::OnActivate() { - this->update_volumetric_flow_preset_hints(); - Tab::OnActivate(); + this->update_volumetric_flow_preset_hints(); + Tab::OnActivate(); } wxSizer* Tab::description_line_widget(wxWindow* parent, ogStaticText* *StaticText) @@ -2290,6 +2290,12 @@ void TabPrinter::build_sla() optgroup->append_single_option_line("absolute_correction"); optgroup->append_single_option_line("gamma_correction"); + optgroup = page->new_optgroup(_(L("Exposure"))); + optgroup->append_single_option_line("min_exposure_time"); + optgroup->append_single_option_line("max_exposure_time"); + optgroup->append_single_option_line("min_initial_exposure_time"); + optgroup->append_single_option_line("max_initial_exposure_time"); + optgroup = page->new_optgroup(_(L("Print Host upload"))); build_printhost(optgroup.get()); @@ -2560,7 +2566,7 @@ void TabPrinter::build_unregular_pages() optgroup = page->new_optgroup(_(L("Preview"))); auto reset_to_filament_color = [this, extruder_idx](wxWindow* parent) { - add_scaled_button(parent, &m_reset_to_filament_color, "undo", + add_scaled_button(parent, &m_reset_to_filament_color, "undo", _(L("Reset to Filament Color")), wxBU_LEFT | wxBU_EXACTFIT); ScalableButton* btn = m_reset_to_filament_color; btn->SetFont(Slic3r::GUI::wxGetApp().normal_font()); @@ -2571,7 +2577,7 @@ void TabPrinter::build_unregular_pages() { std::vector<std::string> colors = static_cast<const ConfigOptionStrings*>(m_config->option("extruder_colour"))->values; colors[extruder_idx] = ""; - + DynamicPrintConfig new_conf = *m_config; new_conf.set_key_value("extruder_colour", new ConfigOptionStrings(colors)); load_config(new_conf); @@ -3614,11 +3620,7 @@ void TabSLAMaterial::build() optgroup->append_single_option_line("initial_layer_height"); optgroup = page->new_optgroup(_(L("Exposure"))); - optgroup->append_single_option_line("exposure_time_min"); - optgroup->append_single_option_line("exposure_time_max"); optgroup->append_single_option_line("exposure_time"); - optgroup->append_single_option_line("initial_exposure_time_min"); - optgroup->append_single_option_line("initial_exposure_time_max"); optgroup->append_single_option_line("initial_exposure_time"); optgroup = page->new_optgroup(_(L("Corrections"))); @@ -3683,59 +3685,11 @@ void TabSLAMaterial::reload_config() Tab::reload_config(); } - -namespace { - -enum e_cmp {EQUAL = 1, SMALLER = 2, GREATER = 4, SMALLER_EQ = 3, GREATER_EQ = 5}; - -void bound_check(Tab &tb, e_cmp cmp, const char *id, const char *boundid) -{ - double bound = tb.m_config->opt_float(boundid); - double value = tb.m_config->opt_float(id); - - auto boundlabel = tb.m_config->def()->get(boundid)->label; - auto valuelabel = tb.m_config->def()->get(id)->label; - - double ddiff = value - bound; - int diff = ddiff < 0 ? SMALLER : (std::abs(ddiff) < EPSILON ? EQUAL : GREATER); - - if ((cmp | diff) != cmp) { - wxString fmt; - - switch (cmp) { - case EQUAL: fmt = _(L("%s should be equal to %s")); break; - case SMALLER: fmt = _(L("%s should be smaller than %s")); break; - case GREATER: fmt = _(L("%s should be greater than %s")); break; - case SMALLER_EQ: fmt = _(L("%s should be smaller or equal to %s")); break; - case GREATER_EQ: fmt = _(L("%s should be greater or equal to %s")); break; - } - - wxString msg_text = wxString::Format(fmt, valuelabel, boundlabel); - - wxMessageDialog dialog(tb.parent(), msg_text, - _(L("Value outside bounds")), - wxICON_WARNING | wxOK); - - DynamicPrintConfig new_conf = *tb.m_config; - if (dialog.ShowModal() == wxID_OK) - new_conf.set_key_value(id, new ConfigOptionFloat(bound)); - - tb.load_config(new_conf); - } -}; - -} - void TabSLAMaterial::update() { if (m_preset_bundle->printers.get_selected_preset().printer_technology() == ptFFF) return; - bound_check(*this, e_cmp::GREATER_EQ, "exposure_time", "exposure_time_min"); - bound_check(*this, e_cmp::SMALLER_EQ, "exposure_time", "exposure_time_max"); - bound_check(*this, e_cmp::GREATER_EQ, "initial_exposure_time", "initial_exposure_time_min"); - bound_check(*this, e_cmp::SMALLER_EQ, "initial_exposure_time", "initial_exposure_time_max"); - // #ys_FIXME. Just a template for this function // m_update_cnt++; // ! something to update