mirror of
https://git.mirrors.martin98.com/https://github.com/slic3r/Slic3r.git
synced 2025-08-14 00:15:55 +08:00
parent
18847f5041
commit
ae6c979565
@ -192,7 +192,6 @@ group:label_width$8:Speed for print moves
|
|||||||
line:Perimeter speed
|
line:Perimeter speed
|
||||||
setting:width$4:perimeter_speed
|
setting:width$4:perimeter_speed
|
||||||
setting:width$4:external_perimeter_speed
|
setting:width$4:external_perimeter_speed
|
||||||
setting:width$4:small_perimeter_speed
|
|
||||||
end_line
|
end_line
|
||||||
line:Infill speed
|
line:Infill speed
|
||||||
setting:width$4:infill_speed
|
setting:width$4:infill_speed
|
||||||
@ -217,6 +216,10 @@ group:Modifiers
|
|||||||
setting:label_width$8:width$4:first_layer_speed
|
setting:label_width$8:width$4:first_layer_speed
|
||||||
setting:label_width$8:width$4:first_layer_infill_speed
|
setting:label_width$8:width$4:first_layer_infill_speed
|
||||||
end_line
|
end_line
|
||||||
|
line:Small perimeter speed
|
||||||
|
setting:label_width$8:width$4:small_perimeter_min_length
|
||||||
|
setting:label_width$8:width$4:small_perimeter_max_length
|
||||||
|
setting:label_width$8:width$4:small_perimeter_speed
|
||||||
group:Acceleration control (advanced)
|
group:Acceleration control (advanced)
|
||||||
setting:perimeter_acceleration
|
setting:perimeter_acceleration
|
||||||
setting:infill_acceleration
|
setting:infill_acceleration
|
||||||
|
@ -3034,8 +3034,16 @@ std::string GCode::extrude_loop_vase(const ExtrusionLoop &original_loop, const s
|
|||||||
if (paths.empty()) return "";
|
if (paths.empty()) return "";
|
||||||
|
|
||||||
// apply the small/external? perimeter speed
|
// apply the small/external? perimeter speed
|
||||||
if (is_perimeter(paths.front().role()) && loop.length() <= SMALL_PERIMETER_LENGTH && speed == -1)
|
if (speed == -1 && is_perimeter(paths.front().role()) && loop.length() <=
|
||||||
speed = m_config.external_perimeter_speed.get_abs_value(m_config.perimeter_speed);
|
scale_(this->m_config.small_perimeter_max_length.get_abs_value(EXTRUDER_CONFIG_WITH_DEFAULT(nozzle_diameter, 0)))) {
|
||||||
|
double min_length = scale_(this->m_config.small_perimeter_min_length.get_abs_value(EXTRUDER_CONFIG_WITH_DEFAULT(nozzle_diameter, 0)));
|
||||||
|
double max_length = scale_(this->m_config.small_perimeter_max_length.get_abs_value(EXTRUDER_CONFIG_WITH_DEFAULT(nozzle_diameter, 0)));
|
||||||
|
if (loop.length() <= min_length) {
|
||||||
|
speed = m_config.small_perimeter_speed.get_abs_value(m_config.perimeter_speed);
|
||||||
|
} else {
|
||||||
|
speed = - (loop.length() - min_length) / (max_length - min_length);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//get extrusion length
|
//get extrusion length
|
||||||
coordf_t length = 0;
|
coordf_t length = 0;
|
||||||
@ -3552,8 +3560,16 @@ std::string GCode::extrude_loop(const ExtrusionLoop &original_loop, const std::s
|
|||||||
if (paths.empty()) return "";
|
if (paths.empty()) return "";
|
||||||
|
|
||||||
// apply the small perimeter speed
|
// apply the small perimeter speed
|
||||||
if (is_perimeter(paths.front().role()) && loop.length() <= SMALL_PERIMETER_LENGTH && speed == -1)
|
if (speed == -1 && is_perimeter(paths.front().role()) && loop.length() <=
|
||||||
speed = m_config.small_perimeter_speed.get_abs_value(m_config.perimeter_speed);
|
scale_(this->m_config.small_perimeter_max_length.get_abs_value(EXTRUDER_CONFIG_WITH_DEFAULT(nozzle_diameter, 0)))) {
|
||||||
|
double min_length = scale_(this->m_config.small_perimeter_min_length.get_abs_value(EXTRUDER_CONFIG_WITH_DEFAULT(nozzle_diameter, 0)));
|
||||||
|
double max_length = scale_(this->m_config.small_perimeter_max_length.get_abs_value(EXTRUDER_CONFIG_WITH_DEFAULT(nozzle_diameter, 0)));
|
||||||
|
if (loop.length() <= min_length) {
|
||||||
|
speed = m_config.small_perimeter_speed.get_abs_value(m_config.perimeter_speed);
|
||||||
|
} else {
|
||||||
|
speed = -(loop.length() - min_length) / (max_length - min_length);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// extrude along the path
|
// extrude along the path
|
||||||
std::string gcode;
|
std::string gcode;
|
||||||
@ -4130,7 +4146,10 @@ std::string GCode::_before_extrude(const ExtrusionPath &path, const std::string
|
|||||||
|
|
||||||
|
|
||||||
// set speed
|
// set speed
|
||||||
if (speed == -1) {
|
if (speed < 0) {
|
||||||
|
//if speed == -1, then it's means "choose yourself, but if it's -1 < speed <0 , then it's a scaling from small_periemter.
|
||||||
|
//it's a bit hacky, so if you want to rework it, help yourself.
|
||||||
|
float factor = (-speed);
|
||||||
if (path.role() == erPerimeter) {
|
if (path.role() == erPerimeter) {
|
||||||
speed = m_config.get_abs_value("perimeter_speed");
|
speed = m_config.get_abs_value("perimeter_speed");
|
||||||
} else if (path.role() == erExternalPerimeter) {
|
} else if (path.role() == erExternalPerimeter) {
|
||||||
@ -4154,6 +4173,12 @@ std::string GCode::_before_extrude(const ExtrusionPath &path, const std::string
|
|||||||
} else {
|
} else {
|
||||||
throw std::invalid_argument("Invalid speed");
|
throw std::invalid_argument("Invalid speed");
|
||||||
}
|
}
|
||||||
|
//don't modify bridge speed
|
||||||
|
if (factor < 1 && !(path.role() == erOverhangPerimeter || path.role() == erBridgeInfill)) {
|
||||||
|
float small_speed = m_config.small_perimeter_speed.get_abs_value(m_config.perimeter_speed);
|
||||||
|
//apply factor between feature speed and small speed
|
||||||
|
speed = speed * factor + (1 - factor) * small_speed;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (m_volumetric_speed != 0. && speed == 0)
|
if (m_volumetric_speed != 0. && speed == 0)
|
||||||
speed = m_volumetric_speed / path.mm3_per_mm;
|
speed = m_volumetric_speed / path.mm3_per_mm;
|
||||||
|
@ -163,6 +163,8 @@ void Layer::make_perimeters()
|
|||||||
&& config.perimeter_overlap == other_config.perimeter_overlap
|
&& config.perimeter_overlap == other_config.perimeter_overlap
|
||||||
&& config.perimeter_speed == other_config.perimeter_speed // it os mandatory? can't this be set at gcode.cpp?
|
&& config.perimeter_speed == other_config.perimeter_speed // it os mandatory? can't this be set at gcode.cpp?
|
||||||
&& config.small_perimeter_speed == other_config.small_perimeter_speed
|
&& config.small_perimeter_speed == other_config.small_perimeter_speed
|
||||||
|
&& config.small_perimeter_min_length == other_config.small_perimeter_min_length
|
||||||
|
&& config.small_perimeter_max_length == other_config.small_perimeter_max_length
|
||||||
&& config.thin_walls == other_config.thin_walls
|
&& config.thin_walls == other_config.thin_walls
|
||||||
&& config.thin_walls_min_width == other_config.thin_walls_min_width
|
&& config.thin_walls_min_width == other_config.thin_walls_min_width
|
||||||
&& config.thin_walls_overlap == other_config.thin_walls_overlap
|
&& config.thin_walls_overlap == other_config.thin_walls_overlap
|
||||||
|
@ -2838,18 +2838,44 @@ void PrintConfigDef::init_fff_params()
|
|||||||
def->set_default_value(new ConfigOptionInts{ 5 });
|
def->set_default_value(new ConfigOptionInts{ 5 });
|
||||||
|
|
||||||
def = this->add("small_perimeter_speed", coFloatOrPercent);
|
def = this->add("small_perimeter_speed", coFloatOrPercent);
|
||||||
def->label = L("Small");
|
def->label = L("Speed");
|
||||||
def->full_label = ("Small perimeters speed");
|
def->full_label = ("Small perimeters speed");
|
||||||
def->category = OptionCategory::speed;
|
def->category = OptionCategory::speed;
|
||||||
def->tooltip = L("This separate setting will affect the speed of perimeters having radius <= 6.5mm "
|
def->tooltip = L("This separate setting will affect the speed of perimeters having radius <= 6.5mm "
|
||||||
"(usually holes). If expressed as percentage (for example: 80%) it will be calculated "
|
"(usually holes). If expressed as percentage (for example: 80%) it will be calculated "
|
||||||
"on the perimeters speed setting above. Set to zero for auto.");
|
"on the perimeters speed setting above. Set to zero for auto.");
|
||||||
def->sidetext = L("mm/s or %");
|
def->sidetext = L("mm/s or %");
|
||||||
def->ratio_over = "perimeter_speed";
|
def->ratio_over = "perimeter_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(15, false));
|
||||||
|
|
||||||
|
def = this->add("small_perimeter_min_length", coFloatOrPercent);
|
||||||
|
def->label = L("Min length");
|
||||||
|
def->full_label = ("Min small perimeters length");
|
||||||
|
def->category = OptionCategory::speed;
|
||||||
|
def->tooltip = L("This set the threshold for small periemter length. Every loop with a length lower than that will be printed at small perimeter speed"
|
||||||
|
"\nCan be a mm or a % of the nozzle diameter.");
|
||||||
|
def->sidetext = L("mm or %");
|
||||||
|
def->ratio_over = "nozzle_diameter";
|
||||||
|
def->min = 0;
|
||||||
|
def->mode = comAdvanced;
|
||||||
|
def->set_default_value(new ConfigOptionFloatOrPercent(6, false));
|
||||||
|
|
||||||
|
|
||||||
|
def = this->add("small_perimeter_max_length", coFloatOrPercent);
|
||||||
|
def->label = L("Max length");
|
||||||
|
def->full_label = ("Max small perimeters length");
|
||||||
|
def->category = OptionCategory::speed;
|
||||||
|
def->tooltip = L("This set the end of the threshold for small periemter length."
|
||||||
|
" Every periemter loop lower than that will see their speed reduced a bit, from their normal spee at this length down to small perimeter speed."
|
||||||
|
"\nCan be a mm or a % of the nozzle diameter.");
|
||||||
|
def->sidetext = L("mm or %");
|
||||||
|
def->ratio_over = "nozzle_diameter";
|
||||||
|
def->min = 0;
|
||||||
|
def->mode = comAdvanced;
|
||||||
|
def->set_default_value(new ConfigOptionFloatOrPercent(20, false));
|
||||||
|
|
||||||
def = this->add("curve_smoothing_angle_convex", coFloat);
|
def = this->add("curve_smoothing_angle_convex", coFloat);
|
||||||
def->label = L("Min convex angle");
|
def->label = L("Min convex angle");
|
||||||
def->full_label = L("Curve smoothing minimum angle (convex)");
|
def->full_label = L("Curve smoothing minimum angle (convex)");
|
||||||
|
@ -711,6 +711,8 @@ public:
|
|||||||
ConfigOptionPercent print_extrusion_multiplier;
|
ConfigOptionPercent print_extrusion_multiplier;
|
||||||
ConfigOptionFloat print_retract_length;
|
ConfigOptionFloat print_retract_length;
|
||||||
ConfigOptionFloatOrPercent small_perimeter_speed;
|
ConfigOptionFloatOrPercent small_perimeter_speed;
|
||||||
|
ConfigOptionFloatOrPercent small_perimeter_min_length;
|
||||||
|
ConfigOptionFloatOrPercent small_perimeter_max_length;
|
||||||
ConfigOptionEnum<InfillPattern> solid_fill_pattern;
|
ConfigOptionEnum<InfillPattern> solid_fill_pattern;
|
||||||
ConfigOptionFloat solid_infill_below_area;
|
ConfigOptionFloat solid_infill_below_area;
|
||||||
ConfigOptionInt solid_infill_extruder;
|
ConfigOptionInt solid_infill_extruder;
|
||||||
@ -802,6 +804,8 @@ protected:
|
|||||||
OPT_PTR(print_extrusion_multiplier);
|
OPT_PTR(print_extrusion_multiplier);
|
||||||
OPT_PTR(print_retract_length);
|
OPT_PTR(print_retract_length);
|
||||||
OPT_PTR(small_perimeter_speed);
|
OPT_PTR(small_perimeter_speed);
|
||||||
|
OPT_PTR(small_perimeter_min_length);
|
||||||
|
OPT_PTR(small_perimeter_max_length);
|
||||||
OPT_PTR(solid_fill_pattern);
|
OPT_PTR(solid_fill_pattern);
|
||||||
OPT_PTR(solid_infill_below_area);
|
OPT_PTR(solid_infill_below_area);
|
||||||
OPT_PTR(solid_infill_extruder);
|
OPT_PTR(solid_infill_extruder);
|
||||||
|
@ -753,6 +753,8 @@ bool PrintObject::invalidate_state_by_config_options(const std::vector<t_config_
|
|||||||
|| opt_key == "seam_preferred_direction_jitter"
|
|| opt_key == "seam_preferred_direction_jitter"
|
||||||
|| opt_key == "seam_travel"
|
|| opt_key == "seam_travel"
|
||||||
|| opt_key == "small_perimeter_speed"
|
|| opt_key == "small_perimeter_speed"
|
||||||
|
|| opt_key == "small_perimeter_min_length"
|
||||||
|
|| opt_key == "small_perimeter_max_length"
|
||||||
|| opt_key == "solid_infill_speed"
|
|| opt_key == "solid_infill_speed"
|
||||||
|| opt_key == "support_material_interface_speed"
|
|| opt_key == "support_material_interface_speed"
|
||||||
|| opt_key == "support_material_speed"
|
|| opt_key == "support_material_speed"
|
||||||
|
@ -43,7 +43,7 @@ typedef double coordf_t;
|
|||||||
// When extruding a closed loop, the loop is interrupted and shortened a bit to reduce the seam.
|
// When extruding a closed loop, the loop is interrupted and shortened a bit to reduce the seam.
|
||||||
#define LOOP_CLIPPING_LENGTH_OVER_NOZZLE_DIAMETER 0.15
|
#define LOOP_CLIPPING_LENGTH_OVER_NOZZLE_DIAMETER 0.15
|
||||||
// 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 (6.5 / SCALING_FACTOR) * 2 * PI
|
||||||
#define INSET_OVERLAP_TOLERANCE 0.4
|
#define INSET_OVERLAP_TOLERANCE 0.4
|
||||||
//FIXME Better to use an inline function with an explicit return type.
|
//FIXME Better to use an inline function with an explicit return type.
|
||||||
//inline coord_t scale_(coordf_t v) { return coord_t(floor(v / SCALING_FACTOR + 0.5f)); }
|
//inline coord_t scale_(coordf_t v) { return coord_t(floor(v / SCALING_FACTOR + 0.5f)); }
|
||||||
|
@ -359,7 +359,7 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig* config)
|
|||||||
"only_one_perimeter_top", "ensure_vertical_shell_thickness", "thin_walls",
|
"only_one_perimeter_top", "ensure_vertical_shell_thickness", "thin_walls",
|
||||||
"overhangs", "overhangs_reverse",
|
"overhangs", "overhangs_reverse",
|
||||||
"seam_position", "external_perimeters_first", "external_perimeters_vase", "external_perimeter_extrusion_width",
|
"seam_position", "external_perimeters_first", "external_perimeters_vase", "external_perimeter_extrusion_width",
|
||||||
"perimeter_speed", "small_perimeter_speed", "external_perimeter_speed", "perimeter_loop", "perimeter_loop_seam" })
|
"perimeter_speed", "small_perimeter_speed", "small_perimeter_min_length", " small_perimeter_max_length", "external_perimeter_speed", "perimeter_loop", "perimeter_loop_seam" })
|
||||||
toggle_field(el, have_perimeters);
|
toggle_field(el, have_perimeters);
|
||||||
|
|
||||||
toggle_field("overhangs_width", config->option<ConfigOptionFloatOrPercent>("overhangs_width_speed")->value > 0);
|
toggle_field("overhangs_width", config->option<ConfigOptionFloatOrPercent>("overhangs_width_speed")->value > 0);
|
||||||
|
@ -468,7 +468,11 @@ const std::vector<std::string>& Preset::print_options()
|
|||||||
"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 */
|
||||||
"min_width_top_surface",
|
"min_width_top_surface",
|
||||||
"perimeter_speed", "small_perimeter_speed", "external_perimeter_speed", "infill_speed", "solid_infill_speed",
|
"perimeter_speed",
|
||||||
|
"small_perimeter_speed",
|
||||||
|
"small_perimeter_min_length",
|
||||||
|
"small_perimeter_max_length",
|
||||||
|
"external_perimeter_speed", "infill_speed", "solid_infill_speed",
|
||||||
"top_solid_infill_speed", "support_material_speed", "support_material_xy_spacing", "support_material_interface_speed",
|
"top_solid_infill_speed", "support_material_speed", "support_material_xy_spacing", "support_material_interface_speed",
|
||||||
"bridge_speed",
|
"bridge_speed",
|
||||||
"gap_fill",
|
"gap_fill",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user