Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/supermerill/SuperSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorsupermerill <merill@free.fr>2021-12-03 17:40:16 +0300
committersupermerill <merill@free.fr>2021-12-03 17:40:16 +0300
commit769b5de64d84047e4e09307c90e791e038b0f7f9 (patch)
treedf8d88b4ed1ddb064aa88d73bdd0e63f82b8764f /src
parent39f103694f6b464e91633bfad8a5275b86cba03c (diff)
fix some nozzle_diameter values in perimeter generation.
Use teh given flow, do not try to re-fetch them, it's too complicated!
Diffstat (limited to 'src')
-rw-r--r--src/libslic3r/PerimeterGenerator.cpp22
1 files changed, 9 insertions, 13 deletions
diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp
index a41974cb3..9f98eeff5 100644
--- a/src/libslic3r/PerimeterGenerator.cpp
+++ b/src/libslic3r/PerimeterGenerator.cpp
@@ -75,9 +75,6 @@ void PerimeterGenerator::process()
const bool round_peri = this->config->perimeter_round_corners.value;
const coord_t min_round_spacing = perimeter_width / 10;
- // nozzle diameter
- const double nozzle_diameter = this->print_config->nozzle_diameter.get_at(this->config->perimeter_extruder - 1);
-
// perimeter conding set.
if (this->perimeter_flow.spacing_ratio == 1
&& this->ext_perimeter_flow.spacing_ratio == 1
@@ -107,8 +104,8 @@ void PerimeterGenerator::process()
// in the current layer
//we use a range to avoid threshold issues.
- coord_t overhangs_width_flow = scale_(config->overhangs_width.get_abs_value(nozzle_diameter));
- coord_t overhangs_width_speed = scale_(config->overhangs_width_speed.get_abs_value(nozzle_diameter));
+ coord_t overhangs_width_flow = scale_(config->overhangs_width.get_abs_value(this->overhang_flow.nozzle_diameter));
+ coord_t overhangs_width_speed = scale_(config->overhangs_width_speed.get_abs_value(this->overhang_flow.nozzle_diameter));
coord_t min_feature = std::min(overhangs_width_flow, overhangs_width_speed) / 10;
coord_t overhangs_width_flow_90 = coord_t(overhangs_width_flow * 0.99);
coord_t overhangs_width_flow_110 = coord_t(overhangs_width_flow * 1.15);
@@ -117,7 +114,7 @@ void PerimeterGenerator::process()
//flow offset should be greater than speed offset because the flow apply also the speed.
//check if overhangs_width_speed is low enough to be relevant (if flow is activated)
- if (overhangs_width_flow > 0 && overhangs_width_speed + nozzle_diameter * 0.01 > overhangs_width_flow) {
+ if (overhangs_width_flow > 0 && overhangs_width_speed + this->overhang_flow.nozzle_diameter * 0.01 > overhangs_width_flow) {
overhangs_width_speed = 0;
overhangs_width_speed_90 = 0;
overhangs_width_speed_110 = 0;
@@ -563,7 +560,7 @@ void PerimeterGenerator::process()
Slic3r::MedialAxis ma{ thin[0], (coord_t)((ext_perimeter_width + ext_perimeter_spacing) * 1.2),
min_width, coord_t(this->layer->height) };
ma.use_bounds(bound)
- .use_min_real_width((coord_t)scale_(this->ext_perimeter_flow.nozzle_diameter))
+ .use_min_real_width(scale_t(this->ext_perimeter_flow.nozzle_diameter))
.use_tapers(thin_walls_overlap)
.build(thin_walls);
}
@@ -762,8 +759,8 @@ void PerimeterGenerator::process()
// increase by half peri the inner space to fill the frontier between last and stored.
top_fills = union_ex(top_fills, top_polygons);
//set the clip to the external wall but go back inside by infill_extrusion_width/2 to be sure the extrusion won't go outside even with a 100% overlap.
- double infill_spacing_unscaled = this->config->infill_extrusion_width.get_abs_value(nozzle_diameter);
- if (infill_spacing_unscaled == 0) infill_spacing_unscaled = Flow::auto_extrusion_width(frInfill, nozzle_diameter);
+ double infill_spacing_unscaled = this->config->infill_extrusion_width.get_abs_value(this->solid_infill_flow.nozzle_diameter);
+ if (infill_spacing_unscaled == 0) infill_spacing_unscaled = Flow::auto_extrusion_width(frInfill, this->solid_infill_flow.nozzle_diameter);
fill_clip = offset_ex(last, double(ext_perimeter_spacing / 2) - scale_d(infill_spacing_unscaled / 2));
last = intersection_ex(inner_polygons, last);
//{
@@ -811,7 +808,7 @@ void PerimeterGenerator::process()
// increase by half peri the inner space to fill the frontier between last and stored.
top_fills = union_ex(top_fills, top_polygons);
//set the clip to the external wall but go back inside by infill_extrusion_width/2 to be sure the extrusion won't go outside even with a 100% overlap.
- fill_clip = offset_ex(last, double(ext_perimeter_spacing / 2) - this->config->infill_extrusion_width.get_abs_value(nozzle_diameter) / 2);
+ fill_clip = offset_ex(last, double(ext_perimeter_spacing / 2) - this->config->infill_extrusion_width.get_abs_value(this->solid_infill_flow.nozzle_diameter) / 2);
//ExPolygons oldLast = last;
last = intersection_ex(inner_polygons, last);
//{
@@ -1024,7 +1021,7 @@ void PerimeterGenerator::process()
// collapse
double min = 0.2 * perimeter_width * (1 - INSET_OVERLAP_TOLERANCE);
//be sure we don't gapfill where the perimeters are already touching each other (negative spacing).
- min = std::max(min, double(Flow::new_from_spacing(EPSILON, (float)nozzle_diameter, (float)this->layer->height, this->perimeter_flow.spacing_ratio, false).scaled_width()));
+ min = std::max(min, double(Flow::new_from_spacing(EPSILON, this->perimeter_flow.nozzle_diameter, (float)this->layer->height, this->perimeter_flow.spacing_ratio, false).scaled_width()));
double max = 2.2 * perimeter_spacing;
//remove areas that are too big (shouldn't occur...)
ExPolygons too_big = offset2_ex(gaps, double(-max / 2), double(+max / 2));
@@ -1198,8 +1195,7 @@ void PerimeterGenerator::process()
ExtrusionPaths PerimeterGenerator::create_overhangs(const Polyline& loop_polygons, ExtrusionRole role, bool is_external) const {
ExtrusionPaths paths;
- double nozzle_diameter = this->print_config->nozzle_diameter.get_at(this->config->perimeter_extruder - 1);
- if (this->config->overhangs_width.get_abs_value(nozzle_diameter) == 0 && 0 == this->config->overhangs_width_speed.get_abs_value(nozzle_diameter)) {
+ if (this->config->overhangs_width.get_abs_value(this->overhang_flow.nozzle_diameter) == 0 && 0 == this->config->overhangs_width_speed.get_abs_value(this->overhang_flow.nozzle_diameter)) {
//error
ExtrusionPath path(role);
path.polyline = loop_polygons;