Fix float number not working properly for option min/max (#11211)

* ConfigOptionDef: min/max values type are changed from INT to FLOAT.

(cherry picked from commit f277bc80c22e0c9a067481a4301922e2c96aed47)

* Fix infinite loop and crash when `fuzzy_skin_point_distance` = 0 (SoftFever/OrcaSlicer#11069)

* Fix Linux build issue

* Fix float comparison due to precision loss
This commit is contained in:
Noisyfox
2026-01-01 05:23:46 +08:00
committed by GitHub
parent 32cf44fc0a
commit 69861b57f9
5 changed files with 38 additions and 20 deletions

View File

@@ -318,6 +318,19 @@ ConfigOption* ConfigOptionDef::create_default_option() const
return this->create_empty_option();
}
bool ConfigOptionDef::is_value_valid(const double value, const int max_precision /*= 4*/) const
{
if (this->min == 0.f && value < 0) { // Special handling of 0
return false;
}
const double ep = std::pow(0.1, max_precision);
if (is_approx(value, (double) this->min, ep) || is_approx(value, (double) this->max, ep))
return true;
return this->min <= value && value <= this->max;
}
// Assignment of the serialization IDs is not thread safe. The Defs shall be initialized from the main thread!
ConfigOptionDef* ConfigDef::add(const t_config_option_key &opt_key, ConfigOptionType type)
{