mirror of
https://git.mirrors.martin98.com/https://github.com/slic3r/Slic3r.git
synced 2025-08-13 19:25:54 +08:00
update on field precision
* add precision as def field * add precision to ui_layout files * precision now default to 6 (ok for float) * z_step and precision fields to 8
This commit is contained in:
parent
e96f51bfee
commit
7711fbac15
@ -41,6 +41,7 @@ each parameter is separated by ':'
|
||||
* STR, the last parameter: the id name of the setting.
|
||||
* label$STR: to override the label by this new one (if it ends with '_' it won't have a ':' ; if empty it won't have a length).
|
||||
* label_width$INT: change the width of the label. Only works if it's in a line. Override the group one. -1 for auto.
|
||||
* full_label$STR: to override the full_label by this new one (full_label is used on modifiers).
|
||||
* full_label: to override the label by the "full one".
|
||||
* full_width: to tell to create a field that span the full width.
|
||||
* sidetext$STR: the suffix at the right of the widget (like 'mm').
|
||||
@ -48,6 +49,7 @@ each parameter is separated by ':'
|
||||
* simple|advanced|expert: add one of these to modify the mode in which this setting appear.
|
||||
* width$INT: change the width of the field. Shouod work on most type of settings.
|
||||
* height$INT: change the height of the field. Don't works with every type of setting.
|
||||
* precision$INT: number of digit after the dot displayed.
|
||||
* url$STR: the url to call when clicking on it.
|
||||
* id $INT: for setting only a single value of a setting array.
|
||||
* idx: for setting only a single value of a setting array, with the index of the page (for extruder ui page)
|
||||
|
@ -1696,6 +1696,8 @@ public:
|
||||
// By setting min=0, only nonnegative input is allowed.
|
||||
double min = INT_MIN;
|
||||
double max = INT_MAX;
|
||||
// max precision after the dot, only for display
|
||||
int precision = 6;
|
||||
ConfigOptionMode mode = comSimple;
|
||||
// Legacy names for this configuration option.
|
||||
// Used when parsing legacy configuration file.
|
||||
|
@ -136,6 +136,7 @@ void PrintConfigDef::init_common_params()
|
||||
"The gap closing operation may reduce the final print resolution, therefore it is advisable to keep the value reasonably low.");
|
||||
def->sidetext = L("mm");
|
||||
def->min = 0;
|
||||
def->precision = 8;
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionFloat(0.049));
|
||||
|
||||
@ -835,6 +836,8 @@ void PrintConfigDef::init_fff_params()
|
||||
def->sidetext = L("mm or %");
|
||||
def->ratio_over = "nozzle_diameter";
|
||||
def->min = 0;
|
||||
def->max = 1000;
|
||||
def->precision = 6;
|
||||
def->can_phony = true;
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionFloatOrPercent(0, false));
|
||||
@ -849,6 +852,8 @@ void PrintConfigDef::init_fff_params()
|
||||
def->sidetext = L("mm or %");
|
||||
def->ratio_over = "nozzle_diameter";
|
||||
def->min = 0;
|
||||
def->max = 1000;
|
||||
def->precision = 6;
|
||||
def->can_phony = true;
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionFloatOrPercent(0, false, true));
|
||||
@ -1168,6 +1173,7 @@ void PrintConfigDef::init_fff_params()
|
||||
def->ratio_over = "nozzle_diameter";
|
||||
def->min = 0;
|
||||
def->max = 1000;
|
||||
def->precision = 6;
|
||||
def->can_phony = true;
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionFloatOrPercent(0, false));
|
||||
@ -1181,6 +1187,7 @@ void PrintConfigDef::init_fff_params()
|
||||
def->ratio_over = "nozzle_diameter";
|
||||
def->min = 0;
|
||||
def->max = 1000;
|
||||
def->precision = 6;
|
||||
def->can_phony = true;
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionFloatOrPercent(0, false, true));
|
||||
@ -1753,6 +1760,7 @@ void PrintConfigDef::init_fff_params()
|
||||
def->ratio_over = "nozzle_diameter";
|
||||
def->min = 0;
|
||||
def->max = 1000;
|
||||
def->precision = 6;
|
||||
def->can_phony = true;
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionFloatOrPercent(140, true));
|
||||
@ -1767,6 +1775,7 @@ void PrintConfigDef::init_fff_params()
|
||||
def->ratio_over = "nozzle_diameter";
|
||||
def->min = 0;
|
||||
def->max = 1000;
|
||||
def->precision = 6;
|
||||
def->can_phony = true;
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionFloatOrPercent(0, false, true));
|
||||
@ -2149,6 +2158,7 @@ void PrintConfigDef::init_fff_params()
|
||||
def->ratio_over = "nozzle_diameter";
|
||||
def->min = 0;
|
||||
def->max = 1000;
|
||||
def->precision = 6;
|
||||
def->can_phony = true;
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionFloatOrPercent(0, false));
|
||||
@ -2163,6 +2173,7 @@ void PrintConfigDef::init_fff_params()
|
||||
def->ratio_over = "nozzle_diameter";
|
||||
def->min = 0;
|
||||
def->max = 1000;
|
||||
def->precision = 6;
|
||||
def->can_phony = true;
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionFloatOrPercent(0, false, true));
|
||||
@ -2624,6 +2635,7 @@ void PrintConfigDef::init_fff_params()
|
||||
"\n0 to disable.");
|
||||
def->sidetext = L("mm");
|
||||
def->min = 0;
|
||||
def->precision = 8;
|
||||
def->mode = comExpert;
|
||||
def->set_default_value(new ConfigOptionFloat(0.035));
|
||||
|
||||
@ -2888,6 +2900,7 @@ void PrintConfigDef::init_fff_params()
|
||||
def->aliases = { "perimeters_extrusion_width" };
|
||||
def->min = 0;
|
||||
def->max = 1000;
|
||||
def->precision = 6;
|
||||
def->can_phony = true;
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionFloatOrPercent(0, false));
|
||||
@ -2902,6 +2915,7 @@ void PrintConfigDef::init_fff_params()
|
||||
def->aliases = { "perimeters_extrusion_width" };
|
||||
def->min = 0;
|
||||
def->max = 1000;
|
||||
def->precision = 6;
|
||||
def->can_phony = true;
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionFloatOrPercent(0, false, true));
|
||||
@ -3013,6 +3027,7 @@ void PrintConfigDef::init_fff_params()
|
||||
"\nInfill & Thin areas are simplified up to 0.0125mm.");
|
||||
def->sidetext = L("mm");
|
||||
def->min = 0;
|
||||
def->precision = 8;
|
||||
def->mode = comExpert;
|
||||
def->set_default_value(new ConfigOptionFloat(0.002));
|
||||
|
||||
@ -3244,9 +3259,10 @@ void PrintConfigDef::init_fff_params()
|
||||
def->tooltip = L("Horizontal width of the skirt that will be printed around each object."
|
||||
" If left zero, first layer extrusion width will be used if set and the skirt is only 1 layer height"
|
||||
", or perimeter extrusion width will be used (using the computed value if not set).");
|
||||
def->sidetext = L("mm");
|
||||
def->sidetext = L("mm or %");
|
||||
def->min = 0;
|
||||
def->max = 1000;
|
||||
def->precision = 6;
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionFloatOrPercent(0, false));
|
||||
|
||||
@ -3359,6 +3375,7 @@ void PrintConfigDef::init_fff_params()
|
||||
"\nIt's really only useful to smoothen functional models or very wide angles.");
|
||||
def->sidetext = L("mm");
|
||||
def->min = 0;
|
||||
def->precision = 8;
|
||||
def->cli = "curve-smoothing-precision=f";
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionFloat(0));
|
||||
@ -3415,6 +3432,7 @@ void PrintConfigDef::init_fff_params()
|
||||
def->ratio_over = "nozzle_diameter";
|
||||
def->min = 0;
|
||||
def->max = 1000;
|
||||
def->precision = 6;
|
||||
def->can_phony = true;
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionFloatOrPercent(0, false));
|
||||
@ -3429,6 +3447,7 @@ void PrintConfigDef::init_fff_params()
|
||||
def->ratio_over = "nozzle_diameter";
|
||||
def->min = 0;
|
||||
def->max = 1000;
|
||||
def->precision = 6;
|
||||
def->can_phony = true;
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionFloatOrPercent(0, false, true));
|
||||
@ -3535,6 +3554,7 @@ void PrintConfigDef::init_fff_params()
|
||||
" Put 0 to disable.");
|
||||
def->sidetext = L("mm");
|
||||
def->min = 0;
|
||||
def->precision = 8;
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionFloat(0.0001));
|
||||
|
||||
@ -3710,6 +3730,7 @@ void PrintConfigDef::init_fff_params()
|
||||
def->ratio_over = "nozzle_diameter";
|
||||
def->min = 0;
|
||||
def->max = 1000;
|
||||
def->precision = 6;
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionFloatOrPercent(0, false));
|
||||
|
||||
@ -3994,6 +4015,7 @@ void PrintConfigDef::init_fff_params()
|
||||
def->ratio_over = "nozzle_diameter";
|
||||
def->min = 0;
|
||||
def->max = 1000;
|
||||
def->precision = 6;
|
||||
def->can_phony = true;
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionFloatOrPercent(0, false));
|
||||
@ -4007,6 +4029,7 @@ void PrintConfigDef::init_fff_params()
|
||||
def->ratio_over = "nozzle_diameter";
|
||||
def->min = 0;
|
||||
def->max = 1000;
|
||||
def->precision = 6;
|
||||
def->can_phony = true;
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionFloatOrPercent(0, false, true));
|
||||
@ -4348,6 +4371,7 @@ void PrintConfigDef::init_fff_params()
|
||||
def->cli = "z-step=f";
|
||||
def->sidetext = L("mm");
|
||||
def->min = 0;
|
||||
def->precision = 8;
|
||||
def->mode = comExpert;
|
||||
def->set_default_value(new ConfigOptionFloat(0.005));
|
||||
|
||||
@ -5840,6 +5864,7 @@ bool DynamicPrintConfig::update_phony(const std::vector<const DynamicPrintConfig
|
||||
return something_changed;
|
||||
}
|
||||
|
||||
//note: width<-> spacing conversion is done via float, so max 6-7 digit of precision.
|
||||
bool DynamicPrintConfig::value_changed(const t_config_option_key& opt_key, const std::vector<const DynamicPrintConfig*> config_collection) {
|
||||
|
||||
if (opt_key == "layer_height") {
|
||||
|
@ -26,7 +26,7 @@
|
||||
|
||||
namespace Slic3r { namespace GUI {
|
||||
|
||||
wxString double_to_string(double const value, const int max_precision /*= 8*/)
|
||||
wxString double_to_string(double const value, const int max_precision /*= 6*/)
|
||||
{
|
||||
// Style_NoTrailingZeroes does not work on OSX. It also does not work correctly with some locales on Windows.
|
||||
// return wxNumberFormatter::ToString(value, max_precision, wxNumberFormatter::Style_NoTrailingZeroes);
|
||||
@ -240,7 +240,7 @@ void Field::get_value_by_opt_type(wxString& str, const bool check_value/* = true
|
||||
|
||||
wxString label = m_opt.full_label.empty() ? _(m_opt.label) : _(m_opt.full_label);
|
||||
show_error(m_parent, from_u8((boost::format(_utf8(L("%s doesn't support percentage"))) % label).str()));
|
||||
set_value(double_to_string(m_opt.min), true);
|
||||
set_value(double_to_string(m_opt.min, m_opt.precision), true);
|
||||
m_value = double(m_opt.min);
|
||||
break;
|
||||
}
|
||||
@ -260,7 +260,7 @@ void Field::get_value_by_opt_type(wxString& str, const bool check_value/* = true
|
||||
break;
|
||||
}
|
||||
show_error(m_parent, _(L("Invalid numeric input.")));
|
||||
set_value(double_to_string(val), true);
|
||||
set_value(double_to_string(val, m_opt.precision), true);
|
||||
}
|
||||
if (m_opt.min > val || val > m_opt.max)
|
||||
{
|
||||
@ -280,7 +280,7 @@ void Field::get_value_by_opt_type(wxString& str, const bool check_value/* = true
|
||||
}
|
||||
else
|
||||
val = boost::any_cast<double>(m_value);
|
||||
set_value(double_to_string(val), true);
|
||||
set_value(double_to_string(val, m_opt.precision), true);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -288,7 +288,7 @@ void Field::get_value_by_opt_type(wxString& str, const bool check_value/* = true
|
||||
show_error(m_parent, _L("Input value is out of range"));
|
||||
if (m_opt.min > val) val = m_opt.min;
|
||||
if (val > m_opt.max) val = m_opt.max;
|
||||
set_value(double_to_string(val), true);
|
||||
set_value(double_to_string(val, m_opt.precision), true);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -314,7 +314,7 @@ void Field::get_value_by_opt_type(wxString& str, const bool check_value/* = true
|
||||
break;
|
||||
}
|
||||
show_error(m_parent, _(L("Invalid numeric input.")));
|
||||
set_value(double_to_string(val), true);
|
||||
set_value(double_to_string(val, m_opt.precision), true);
|
||||
} else {
|
||||
|
||||
//at least check min, as we can want a 0 min
|
||||
@ -326,7 +326,7 @@ void Field::get_value_by_opt_type(wxString& str, const bool check_value/* = true
|
||||
}
|
||||
show_error(m_parent, _(L("Input value is out of range")));
|
||||
if (m_opt.min > val) val = m_opt.min;
|
||||
set_value(double_to_string(val), true);
|
||||
set_value(double_to_string(val, m_opt.precision), true);
|
||||
} else if (((m_opt.sidetext.rfind("mm/s") != std::string::npos && val > m_opt.max) ||
|
||||
(m_opt.sidetext.rfind("mm ") != std::string::npos && val > 1)) &&
|
||||
(m_value.empty() || std::string(str.ToUTF8().data()) != boost::any_cast<std::string>(m_value)))
|
||||
@ -356,7 +356,7 @@ void Field::get_value_by_opt_type(wxString& str, const bool check_value/* = true
|
||||
bool infill_anchors = m_opt.opt_key == "infill_anchor" || m_opt.opt_key == "infill_anchor_max";
|
||||
|
||||
const std::string sidetext = m_opt.sidetext.rfind("mm/s") != std::string::npos ? "mm/s" : "mm";
|
||||
const wxString stVal = double_to_string(val, 2);
|
||||
const wxString stVal = double_to_string(val, m_opt.precision);
|
||||
const wxString msg_text = from_u8((boost::format(_utf8(L("Do you mean %s%% instead of %s %s?\n"
|
||||
"Select YES if you want to change this value to %s%%, \n"
|
||||
"or NO if you are sure that %s %s is a correct value."))) % stVal % stVal % sidetext % stVal % stVal % sidetext).str());
|
||||
@ -456,14 +456,14 @@ void TextCtrl::BUILD() {
|
||||
switch (m_opt.type) {
|
||||
case coFloatOrPercent:
|
||||
{
|
||||
text_value = double_to_string(m_opt.default_value->getFloat());
|
||||
text_value = double_to_string(m_opt.default_value->getFloat(), m_opt.precision);
|
||||
if (m_opt.get_default_value<ConfigOptionFloatOrPercent>()->percent)
|
||||
text_value += "%";
|
||||
break;
|
||||
}
|
||||
case coPercent:
|
||||
{
|
||||
text_value = double_to_string(m_opt.default_value->getFloat());
|
||||
text_value = double_to_string(m_opt.default_value->getFloat(), m_opt.precision);
|
||||
text_value += "%";
|
||||
break;
|
||||
}
|
||||
@ -476,7 +476,7 @@ void TextCtrl::BUILD() {
|
||||
m_opt.type == coFloat ?
|
||||
m_opt.default_value->getFloat() :
|
||||
m_opt.get_default_value<ConfigOptionPercents>()->get_at(m_opt_idx);
|
||||
text_value = double_to_string(val);
|
||||
text_value = double_to_string(val, m_opt.precision);
|
||||
m_last_meaningful_value = text_value;
|
||||
break;
|
||||
}
|
||||
@ -1082,7 +1082,7 @@ void Choice::set_selection()
|
||||
break;
|
||||
}
|
||||
case coFloatOrPercent: {
|
||||
text_value = double_to_string(m_opt.default_value->getFloat());
|
||||
text_value = double_to_string(m_opt.default_value->getFloat(), m_opt.precision);
|
||||
if (m_opt.get_default_value<ConfigOptionFloatOrPercent>()->percent)
|
||||
text_value += "%";
|
||||
break;
|
||||
|
@ -36,7 +36,7 @@ using t_kill_focus = std::function<void(const std::string&)>;
|
||||
using t_change = std::function<void(const t_config_option_key&, const boost::any&)>;
|
||||
using t_back_to_init = std::function<void(const std::string&)>;
|
||||
|
||||
wxString double_to_string(double const value, const int max_precision = 8);
|
||||
wxString double_to_string(double const value, const int max_precision = 6);
|
||||
wxString get_points_string(const std::vector<Vec2d>& values);
|
||||
|
||||
class Field {
|
||||
|
@ -857,7 +857,7 @@ boost::any ConfigOptionsGroup::get_config_value(const DynamicPrintConfig& config
|
||||
double val = opt->type == coFloats ?
|
||||
config.option<ConfigOptionFloatsNullable>(opt_key)->get_at(idx) :
|
||||
config.option<ConfigOptionPercentsNullable>(opt_key)->get_at(idx);
|
||||
ret = double_to_string(val); }
|
||||
ret = double_to_string(val, opt->precision); }
|
||||
}
|
||||
break;
|
||||
case coBools:
|
||||
@ -877,7 +877,7 @@ boost::any ConfigOptionsGroup::get_config_value(const DynamicPrintConfig& config
|
||||
case coFloatOrPercent:{
|
||||
const auto &value = *config.option<ConfigOptionFloatOrPercent>(opt_key);
|
||||
|
||||
text_value = double_to_string(value.value);
|
||||
text_value = double_to_string(value.value, opt->precision);
|
||||
if (value.percent)
|
||||
text_value += "%";
|
||||
|
||||
@ -886,7 +886,7 @@ boost::any ConfigOptionsGroup::get_config_value(const DynamicPrintConfig& config
|
||||
}
|
||||
case coPercent:{
|
||||
double val = config.option<ConfigOptionPercent>(opt_key)->value;
|
||||
text_value = double_to_string(val);
|
||||
text_value = double_to_string(val, opt->precision);
|
||||
ret = text_value;
|
||||
}
|
||||
break;
|
||||
@ -897,7 +897,7 @@ boost::any ConfigOptionsGroup::get_config_value(const DynamicPrintConfig& config
|
||||
config.opt_float(opt_key, idx) :
|
||||
opt->type == coFloat ? config.opt_float(opt_key) :
|
||||
config.option<ConfigOptionPercents>(opt_key)->get_at(idx);
|
||||
ret = double_to_string(val);
|
||||
ret = double_to_string(val, opt->precision);
|
||||
}
|
||||
break;
|
||||
case coString:
|
||||
|
@ -1798,7 +1798,7 @@ bool Tab::create_pages(std::string setting_type_name, int idx_page)
|
||||
option.opt.label = option.opt.full_label;
|
||||
need_to_notified_search = true;
|
||||
}
|
||||
else if (params[i].find("label$") != std::string::npos)
|
||||
else if (boost::starts_with(params[i], "label$"))
|
||||
{
|
||||
option.opt.label = L(params[i].substr(6, params[i].size() - 6));
|
||||
need_to_notified_search = true;
|
||||
@ -1806,11 +1806,11 @@ bool Tab::create_pages(std::string setting_type_name, int idx_page)
|
||||
else if (boost::starts_with(params[i], "label_width$")) {
|
||||
option.opt.label_width = atoi(params[i].substr(12, params[i].size() - 12).c_str());
|
||||
}
|
||||
else if (params[i].find("sidetext$") != std::string::npos)
|
||||
else if (boost::starts_with(params[i], "sidetext$"))
|
||||
{
|
||||
option.opt.sidetext = L(params[i].substr(9, params[i].size() - 9));
|
||||
}
|
||||
else if (params[i].find("sidetext_width$") != std::string::npos)
|
||||
else if (boost::starts_with(params[i], "sidetext_width$"))
|
||||
{
|
||||
option.opt.sidetext_width = atoi(params[i].substr(15, params[i].size() - 15).c_str());
|
||||
}
|
||||
@ -1823,13 +1823,16 @@ bool Tab::create_pages(std::string setting_type_name, int idx_page)
|
||||
else if (boost::starts_with(params[i], "height$")) {
|
||||
option.opt.height = atoi(params[i].substr(7, params[i].size() - 7).c_str());
|
||||
}
|
||||
else if (boost::starts_with(params[i], "precision$")) {
|
||||
option.opt.precision = atoi(params[i].substr(7, params[i].size() - 7).c_str());
|
||||
}
|
||||
else if (params[i] == "color") {
|
||||
colored = true;
|
||||
}
|
||||
else if (boost::starts_with(params[i], "url$")) { // only on line
|
||||
label_path = params[i].substr(4, params[i].size() - 4);
|
||||
}
|
||||
else if (params[i].find("tooltip$") != std::string::npos)
|
||||
else if (boost::starts_with(params[i], "tooltip$"))
|
||||
{
|
||||
option.opt.tooltip = L(params[i].substr(8, params[i].size() - 8));
|
||||
need_to_notified_search = true;
|
||||
|
@ -911,12 +911,12 @@ static wxString get_string_value(std::string opt_key, const DynamicPrintConfig&
|
||||
return from_u8((boost::format("%1%%%") % int(val)).str());
|
||||
}
|
||||
case coFloat:
|
||||
return double_to_string(config.opt_float(opt_key));
|
||||
return double_to_string(config.opt_float(opt_key), opt->precision);
|
||||
case coFloats: {
|
||||
double val = is_nullable ?
|
||||
config.opt<ConfigOptionFloatsNullable>(opt_key)->get_at(opt_idx) :
|
||||
config.opt<ConfigOptionFloats>(opt_key)->get_at(opt_idx);
|
||||
return double_to_string(val);
|
||||
return double_to_string(val, opt->precision);
|
||||
}
|
||||
case coString:
|
||||
return from_u8(config.opt_string(opt_key));
|
||||
@ -937,9 +937,9 @@ static wxString get_string_value(std::string opt_key, const DynamicPrintConfig&
|
||||
break;
|
||||
}
|
||||
case coFloatOrPercent: {
|
||||
const ConfigOptionFloatOrPercent* opt = config.opt<ConfigOptionFloatOrPercent>(opt_key);
|
||||
if (opt)
|
||||
out = double_to_string(opt->value) + (opt->percent ? "%" : "");
|
||||
const ConfigOptionFloatOrPercent* float_percent = config.opt<ConfigOptionFloatOrPercent>(opt_key);
|
||||
if (float_percent)
|
||||
out = double_to_string(float_percent->value, opt->precision) + (float_percent->percent ? "%" : "");
|
||||
return out;
|
||||
}
|
||||
case coEnum: {
|
||||
|
Loading…
x
Reference in New Issue
Block a user