Adding new sla material parameters: (initial) exposition min/max
This commit is contained in:
parent
448d773da0
commit
7c94db0634
@ -2412,6 +2412,22 @@ void PrintConfigDef::init_sla_params()
|
||||
def->mode = comExpert;
|
||||
def->set_default_value(new ConfigOptionInt(10));
|
||||
|
||||
def = this->add("exposure_time_min", coFloat);
|
||||
def->label = L("Minimum exposure time");
|
||||
def->tooltip = L("Minimum exposure time");
|
||||
def->sidetext = L("s");
|
||||
def->min = 0;
|
||||
def->mode = comExpert;
|
||||
def->set_default_value(new ConfigOptionFloat(0));
|
||||
|
||||
def = this->add("exposure_time_max", coFloat);
|
||||
def->label = L("Maximum exposure time");
|
||||
def->tooltip = L("Maximum exposure time");
|
||||
def->sidetext = L("s");
|
||||
def->min = 0;
|
||||
def->mode = comExpert;
|
||||
def->set_default_value(new ConfigOptionFloat(100));
|
||||
|
||||
def = this->add("exposure_time", coFloat);
|
||||
def->label = L("Exposure time");
|
||||
def->tooltip = L("Exposure time");
|
||||
@ -2419,6 +2435,22 @@ void PrintConfigDef::init_sla_params()
|
||||
def->min = 0;
|
||||
def->set_default_value(new ConfigOptionFloat(10));
|
||||
|
||||
def = this->add("initial_exposure_time_min", coFloat);
|
||||
def->label = L("Minimum initial exposure time");
|
||||
def->tooltip = L("Minimum initial exposure time");
|
||||
def->sidetext = L("s");
|
||||
def->min = 0;
|
||||
def->mode = comExpert;
|
||||
def->set_default_value(new ConfigOptionFloat(0));
|
||||
|
||||
def = this->add("initial_exposure_time_max", coFloat);
|
||||
def->label = L("Maximum initial exposure time");
|
||||
def->tooltip = L("Maximum initial exposure time");
|
||||
def->sidetext = L("s");
|
||||
def->min = 0;
|
||||
def->mode = comExpert;
|
||||
def->set_default_value(new ConfigOptionFloat(150));
|
||||
|
||||
def = this->add("initial_exposure_time", coFloat);
|
||||
def->label = L("Initial exposure time");
|
||||
def->tooltip = L("Initial exposure time");
|
||||
|
@ -1098,14 +1098,22 @@ 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);
|
||||
}
|
||||
|
@ -692,6 +692,20 @@ 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_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.");
|
||||
|
||||
double iexpt_max = m_material_config.initial_exposure_time_max.getFloat();
|
||||
double iexpt_min = m_material_config.initial_exposure_time_min.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 "";
|
||||
}
|
||||
|
||||
@ -1586,7 +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",
|
||||
"exposure_time",
|
||||
"initial_exposure_time_min",
|
||||
"initial_exposure_time_max",
|
||||
"initial_exposure_time",
|
||||
"display_width",
|
||||
"display_height",
|
||||
|
@ -500,7 +500,8 @@ const std::vector<std::string>& Preset::sla_material_options()
|
||||
if (s_opts.empty()) {
|
||||
s_opts = {
|
||||
"initial_layer_height",
|
||||
"exposure_time", "initial_exposure_time",
|
||||
"exposure_time_min", "exposure_time_max", "exposure_time",
|
||||
"initial_exposure_time_min", "initial_exposure_time_max", "initial_exposure_time",
|
||||
"material_correction",
|
||||
"material_notes",
|
||||
"default_sla_material_profile",
|
||||
|
@ -3614,7 +3614,11 @@ 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")));
|
||||
@ -3679,11 +3683,58 @@ 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);
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
if ((cmp | diff) != cmp) {
|
||||
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
|
||||
|
Loading…
Reference in New Issue
Block a user