mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-08 07:27:41 -06:00
small perimeter threshold
This commit is contained in:
parent
397e0f0a29
commit
dd77599dea
12 changed files with 33 additions and 10 deletions
|
@ -1030,6 +1030,12 @@ msgstr "自动Brim"
|
||||||
msgid "Outer wall speed"
|
msgid "Outer wall speed"
|
||||||
msgstr "外墙速度"
|
msgstr "外墙速度"
|
||||||
|
|
||||||
|
msgid "Small perimeters"
|
||||||
|
msgstr "微小部位"
|
||||||
|
|
||||||
|
msgid "Small perimeters threshold"
|
||||||
|
msgstr "微小部位周长阈值"
|
||||||
|
|
||||||
msgid "Plate"
|
msgid "Plate"
|
||||||
msgstr "盘"
|
msgstr "盘"
|
||||||
|
|
||||||
|
|
Binary file not shown.
|
@ -3324,7 +3324,7 @@ std::string GCode::extrude_loop(ExtrusionLoop loop, std::string description, dou
|
||||||
// BBS: remove small small_perimeter_speed config, and will absolutely
|
// BBS: remove small small_perimeter_speed config, and will absolutely
|
||||||
// remove related code if no other issue in the coming release.
|
// remove related code if no other issue in the coming release.
|
||||||
// apply the small perimeter speed
|
// apply the small perimeter speed
|
||||||
if (is_perimeter(paths.front().role()) && loop.length() <= SMALL_PERIMETER_LENGTH && speed == -1)
|
if (is_perimeter(paths.front().role()) && loop.length() <= SMALL_PERIMETER_LENGTH(m_config.small_perimeter_threshold.value) && speed == -1)
|
||||||
speed = m_config.small_perimeter_speed.get_abs_value(m_config.outer_wall_speed);
|
speed = m_config.small_perimeter_speed.get_abs_value(m_config.outer_wall_speed);
|
||||||
|
|
||||||
// extrude along the path
|
// extrude along the path
|
||||||
|
|
|
@ -2786,7 +2786,7 @@ double Model::findMaxSpeed(const ModelObject* object) {
|
||||||
if (objectKey == "outer_wall_speed")
|
if (objectKey == "outer_wall_speed")
|
||||||
externalPerimeterSpeedObj = object->config.opt_float(objectKey);
|
externalPerimeterSpeedObj = object->config.opt_float(objectKey);
|
||||||
if (objectKey == "small_perimeter_speed")
|
if (objectKey == "small_perimeter_speed")
|
||||||
smallPerimeterSpeedObj = object->config.opt_float(objectKey);
|
smallPerimeterSpeedObj = object->config.get_abs_value(objectKey);
|
||||||
}
|
}
|
||||||
objMaxSpeed = std::max(perimeterSpeedObj, std::max(externalPerimeterSpeedObj, std::max(infillSpeedObj, std::max(solidInfillSpeedObj, std::max(topSolidInfillSpeedObj, std::max(supportSpeedObj, std::max(smallPerimeterSpeedObj, objMaxSpeed)))))));
|
objMaxSpeed = std::max(perimeterSpeedObj, std::max(externalPerimeterSpeedObj, std::max(infillSpeedObj, std::max(solidInfillSpeedObj, std::max(topSolidInfillSpeedObj, std::max(supportSpeedObj, std::max(smallPerimeterSpeedObj, objMaxSpeed)))))));
|
||||||
if (objMaxSpeed <= 0) objMaxSpeed = 250.;
|
if (objMaxSpeed <= 0) objMaxSpeed = 250.;
|
||||||
|
|
|
@ -695,7 +695,7 @@ static std::vector<std::string> s_Preset_print_options {
|
||||||
#ifdef HAS_PRESSURE_EQUALIZER
|
#ifdef HAS_PRESSURE_EQUALIZER
|
||||||
"max_volumetric_extrusion_rate_slope_positive", "max_volumetric_extrusion_rate_slope_negative",
|
"max_volumetric_extrusion_rate_slope_positive", "max_volumetric_extrusion_rate_slope_negative",
|
||||||
#endif /* HAS_PRESSURE_EQUALIZER */
|
#endif /* HAS_PRESSURE_EQUALIZER */
|
||||||
"inner_wall_speed", "outer_wall_speed", "small_perimeter_speed", "sparse_infill_speed", "internal_solid_infill_speed",
|
"inner_wall_speed", "outer_wall_speed", "small_perimeter_speed", "small_perimeter_threshold", "sparse_infill_speed", "internal_solid_infill_speed",
|
||||||
"top_surface_speed", "support_speed", "support_object_xy_distance", "support_interface_speed",
|
"top_surface_speed", "support_speed", "support_object_xy_distance", "support_interface_speed",
|
||||||
"bridge_speed", "bridge_angle", "gap_infill_speed", "travel_speed", "travel_speed_z", "initial_layer_speed",
|
"bridge_speed", "bridge_angle", "gap_infill_speed", "travel_speed", "travel_speed_z", "initial_layer_speed",
|
||||||
"outer_wall_acceleration", "inner_wall_acceleration", "initial_layer_acceleration", "top_surface_acceleration", "default_acceleration", "travel_acceleration", "skirt_loops", "skirt_distance", "skirt_height", "draft_shield",
|
"outer_wall_acceleration", "inner_wall_acceleration", "initial_layer_acceleration", "top_surface_acceleration", "default_acceleration", "travel_acceleration", "skirt_loops", "skirt_distance", "skirt_height", "draft_shield",
|
||||||
|
|
|
@ -980,7 +980,16 @@ void PrintConfigDef::init_fff_params()
|
||||||
def->ratio_over = "outer_wall_speed";
|
def->ratio_over = "outer_wall_speed";
|
||||||
def->min = 0;
|
def->min = 0;
|
||||||
def->mode = comAdvanced;
|
def->mode = comAdvanced;
|
||||||
def->set_default_value(new ConfigOptionFloatOrPercent(15, false));
|
def->set_default_value(new ConfigOptionFloatOrPercent(100, true));
|
||||||
|
|
||||||
|
def = this->add("small_perimeter_threshold", coFloat);
|
||||||
|
def->label = L("Small perimeters threshold");
|
||||||
|
def->category = L("Speed");
|
||||||
|
def->tooltip = L("This sets the threshold for small perimeter length. Default threshold is 6.5mm");
|
||||||
|
def->sidetext = L("mm");
|
||||||
|
def->min = 0;
|
||||||
|
def->mode = comAdvanced;
|
||||||
|
def->set_default_value(new ConfigOptionFloat(6.5));
|
||||||
|
|
||||||
def = this->add("wall_infill_order", coEnum);
|
def = this->add("wall_infill_order", coEnum);
|
||||||
def->label = L("Order of inner wall/outer wall/infil");
|
def->label = L("Order of inner wall/outer wall/infil");
|
||||||
|
@ -3755,7 +3764,6 @@ void PrintConfigDef::handle_legacy(t_config_option_key &opt_key, std::string &va
|
||||||
opt_key == "top_surface_speed" ||
|
opt_key == "top_surface_speed" ||
|
||||||
opt_key == "support_interface_speed" ||
|
opt_key == "support_interface_speed" ||
|
||||||
opt_key == "outer_wall_speed" ||
|
opt_key == "outer_wall_speed" ||
|
||||||
opt_key == "small_perimeter_speed" ||
|
|
||||||
opt_key == "support_object_xy_distance") && value.find("%") != std::string::npos) {
|
opt_key == "support_object_xy_distance") && value.find("%") != std::string::npos) {
|
||||||
//BBS: this is old profile in which value is expressed as percentage.
|
//BBS: this is old profile in which value is expressed as percentage.
|
||||||
//But now these key-value must be absolute value.
|
//But now these key-value must be absolute value.
|
||||||
|
|
|
@ -672,6 +672,7 @@ PRINT_CONFIG_CLASS_DEFINE(
|
||||||
((ConfigOptionFloat, outer_wall_line_width))
|
((ConfigOptionFloat, outer_wall_line_width))
|
||||||
((ConfigOptionFloat, outer_wall_speed))
|
((ConfigOptionFloat, outer_wall_speed))
|
||||||
((ConfigOptionFloatOrPercent, small_perimeter_speed))
|
((ConfigOptionFloatOrPercent, small_perimeter_speed))
|
||||||
|
((ConfigOptionFloat, small_perimeter_threshold))
|
||||||
((ConfigOptionFloat, infill_direction))
|
((ConfigOptionFloat, infill_direction))
|
||||||
((ConfigOptionPercent, sparse_infill_density))
|
((ConfigOptionPercent, sparse_infill_density))
|
||||||
((ConfigOptionEnum<InfillPattern>, sparse_infill_pattern))
|
((ConfigOptionEnum<InfillPattern>, sparse_infill_pattern))
|
||||||
|
@ -1281,7 +1282,12 @@ public:
|
||||||
const ConfigOption* option(const t_config_option_key &opt_key) const { return m_data.option(opt_key); }
|
const ConfigOption* option(const t_config_option_key &opt_key) const { return m_data.option(opt_key); }
|
||||||
int opt_int(const t_config_option_key &opt_key) const { return m_data.opt_int(opt_key); }
|
int opt_int(const t_config_option_key &opt_key) const { return m_data.opt_int(opt_key); }
|
||||||
int extruder() const { return opt_int("extruder"); }
|
int extruder() const { return opt_int("extruder"); }
|
||||||
double opt_float(const t_config_option_key &opt_key) const { return m_data.opt_float(opt_key); }
|
double opt_float(const t_config_option_key &opt_key) const {
|
||||||
|
return m_data.opt_float(opt_key);
|
||||||
|
}
|
||||||
|
double get_abs_value(const t_config_option_key &opt_key) const {
|
||||||
|
return m_data.get_abs_value(opt_key);
|
||||||
|
}
|
||||||
std::string opt_serialize(const t_config_option_key &opt_key) const { return m_data.opt_serialize(opt_key); }
|
std::string opt_serialize(const t_config_option_key &opt_key) const { return m_data.opt_serialize(opt_key); }
|
||||||
|
|
||||||
// Return an optional timestamp of this object.
|
// Return an optional timestamp of this object.
|
||||||
|
|
|
@ -657,6 +657,7 @@ bool PrintObject::invalidate_state_by_config_options(
|
||||||
// BBS: brim generation depends on printing speed
|
// BBS: brim generation depends on printing speed
|
||||||
|| opt_key == "outer_wall_speed"
|
|| opt_key == "outer_wall_speed"
|
||||||
|| opt_key == "small_perimeter_speed"
|
|| opt_key == "small_perimeter_speed"
|
||||||
|
|| opt_key == "small_perimeter_threshold"
|
||||||
|| opt_key == "sparse_infill_speed"
|
|| opt_key == "sparse_infill_speed"
|
||||||
|| opt_key == "inner_wall_speed"
|
|| opt_key == "inner_wall_speed"
|
||||||
|| opt_key == "support_speed"
|
|| opt_key == "support_speed"
|
||||||
|
@ -832,6 +833,7 @@ bool PrintObject::invalidate_state_by_config_options(
|
||||||
|| opt_key == "bridge_speed"
|
|| opt_key == "bridge_speed"
|
||||||
|| opt_key == "outer_wall_speed"
|
|| opt_key == "outer_wall_speed"
|
||||||
|| opt_key == "small_perimeter_speed"
|
|| opt_key == "small_perimeter_speed"
|
||||||
|
|| opt_key == "small_perimeter_threshold"
|
||||||
|| opt_key == "sparse_infill_speed"
|
|| opt_key == "sparse_infill_speed"
|
||||||
|| opt_key == "inner_wall_speed"
|
|| opt_key == "inner_wall_speed"
|
||||||
|| opt_key == "internal_solid_infill_speed"
|
|| opt_key == "internal_solid_infill_speed"
|
||||||
|
|
|
@ -66,7 +66,7 @@ static constexpr double SPARSE_INFILL_RESOLUTION = 0.04;
|
||||||
static constexpr double SUPPORT_RESOLUTION = 0.05;
|
static constexpr double SUPPORT_RESOLUTION = 0.05;
|
||||||
#define SCALED_SUPPORT_RESOLUTION (SUPPORT_RESOLUTION / SCALING_FACTOR)
|
#define SCALED_SUPPORT_RESOLUTION (SUPPORT_RESOLUTION / SCALING_FACTOR)
|
||||||
// Maximum perimeter length for the loop to apply the small perimeter speed.
|
// Maximum perimeter length for the loop to apply the small perimeter speed.
|
||||||
#define SMALL_PERIMETER_LENGTH ((6.5 / SCALING_FACTOR) * 2 * PI)
|
#define SMALL_PERIMETER_LENGTH(LENGTH) (((LENGTH) / SCALING_FACTOR) * 2 * PI)
|
||||||
static constexpr double INSET_OVERLAP_TOLERANCE = 0.4;
|
static constexpr double INSET_OVERLAP_TOLERANCE = 0.4;
|
||||||
// 3mm ring around the top / bottom / bridging areas.
|
// 3mm ring around the top / bottom / bridging areas.
|
||||||
//FIXME This is quite a lot.
|
//FIXME This is quite a lot.
|
||||||
|
|
|
@ -451,7 +451,7 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co
|
||||||
bool have_perimeters = config->opt_int("wall_loops") > 0;
|
bool have_perimeters = config->opt_int("wall_loops") > 0;
|
||||||
for (auto el : { "detect_thin_wall", "detect_overhang_wall",
|
for (auto el : { "detect_thin_wall", "detect_overhang_wall",
|
||||||
"seam_position", "wall_infill_order", "outer_wall_line_width",
|
"seam_position", "wall_infill_order", "outer_wall_line_width",
|
||||||
"inner_wall_speed", "outer_wall_speed", "small_perimeter_speed" })
|
"inner_wall_speed", "outer_wall_speed", "small_perimeter_speed", "small_perimeter_threshold" })
|
||||||
toggle_field(el, have_perimeters);
|
toggle_field(el, have_perimeters);
|
||||||
|
|
||||||
bool have_infill = config->option<ConfigOptionPercent>("sparse_infill_density")->value > 0;
|
bool have_infill = config->option<ConfigOptionPercent>("sparse_infill_density")->value > 0;
|
||||||
|
|
|
@ -1823,6 +1823,7 @@ void TabPrint::build()
|
||||||
optgroup->append_single_option_line("outer_wall_speed");
|
optgroup->append_single_option_line("outer_wall_speed");
|
||||||
optgroup->append_single_option_line("inner_wall_speed");
|
optgroup->append_single_option_line("inner_wall_speed");
|
||||||
optgroup->append_single_option_line("small_perimeter_speed");
|
optgroup->append_single_option_line("small_perimeter_speed");
|
||||||
|
optgroup->append_single_option_line("small_perimeter_threshold");
|
||||||
optgroup->append_single_option_line("sparse_infill_speed");
|
optgroup->append_single_option_line("sparse_infill_speed");
|
||||||
optgroup->append_single_option_line("internal_solid_infill_speed");
|
optgroup->append_single_option_line("internal_solid_infill_speed");
|
||||||
optgroup->append_single_option_line("top_surface_speed");
|
optgroup->append_single_option_line("top_surface_speed");
|
||||||
|
|
|
@ -11,4 +11,4 @@ if(NOT DEFINED BBL_INTERNAL_TESTING)
|
||||||
set(BBL_INTERNAL_TESTING "1")
|
set(BBL_INTERNAL_TESTING "1")
|
||||||
endif()
|
endif()
|
||||||
set(SLIC3R_VERSION "01.03.00.12")
|
set(SLIC3R_VERSION "01.03.00.12")
|
||||||
set(SoftFever_VERSION "1.3.2-beta")
|
set(SoftFever_VERSION "1.3.2 beta2")
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue