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
diff options
context:
space:
mode:
authorsupermerill <merill@free.fr>2020-05-28 19:07:12 +0300
committersupermerill <merill@free.fr>2020-05-28 20:23:12 +0300
commitd0a8bdebe8deec7144d9d6d7519d0be861157397 (patch)
treec78a4bea6fc02d4df2682b8980fd5bba12e5dd73
parentffec4ee330511ab55629acfc5213666d88fb3250 (diff)
experimental feature: external perimeter overlap.
Have to test it, it may decrease printing quality (like printing external perimeter first)
-rw-r--r--resources/ui_layout/print.ui1
-rw-r--r--src/libslic3r/PerimeterGenerator.cpp14
-rw-r--r--src/libslic3r/PrintConfig.cpp14
-rw-r--r--src/libslic3r/PrintConfig.hpp2
-rw-r--r--src/slic3r/GUI/Preset.cpp3
5 files changed, 30 insertions, 4 deletions
diff --git a/resources/ui_layout/print.ui b/resources/ui_layout/print.ui
index d2767c952..d4fa0b803 100644
--- a/resources/ui_layout/print.ui
+++ b/resources/ui_layout/print.ui
@@ -228,6 +228,7 @@ group:Extrusion width
group:Overlap
setting:infill_overlap
setting:bridge_overlap
+ setting:external_perimeter_overlap
group:Flow
line:Flow ratio
setting:bridge_flow_ratio
diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp
index eb8bf425e..ecdd90e38 100644
--- a/src/libslic3r/PerimeterGenerator.cpp
+++ b/src/libslic3r/PerimeterGenerator.cpp
@@ -39,13 +39,23 @@ void PerimeterGenerator::process()
// other perimeters
this->_mm3_per_mm = this->perimeter_flow.mm3_per_mm();
coord_t perimeter_width = this->perimeter_flow.scaled_width();
+ //spacing between internal perimeters
coord_t perimeter_spacing = this->perimeter_flow.scaled_spacing();
// external perimeters
this->_ext_mm3_per_mm = this->ext_perimeter_flow.mm3_per_mm();
coord_t ext_perimeter_width = this->ext_perimeter_flow.scaled_width();
+ //spacing between two external perimeter (where you don't have the space to add other loops)
coord_t ext_perimeter_spacing = this->ext_perimeter_flow.scaled_spacing();
+ //spacing between external perimeter and the second
coord_t ext_perimeter_spacing2 = this->ext_perimeter_flow.scaled_spacing(this->perimeter_flow);
+ //external_perimeter_overlap effect: change distance between the extrenal periemter and the other ones.
+ if (this->config->external_perimeter_overlap.get_abs_value(1) != 1) {
+ //choose between the normal spacing and "don't touch it".
+ ext_perimeter_spacing2 =
+ ext_perimeter_spacing2 * this->config->external_perimeter_overlap.get_abs_value(1)
+ + (ext_perimeter_width + perimeter_width) * 0.5f * (1 - this->config->external_perimeter_overlap.get_abs_value(1));
+ }
// overhang perimeters
this->_mm3_per_mm_overhang = this->overhang_flow.mm3_per_mm();
@@ -429,11 +439,11 @@ void PerimeterGenerator::process()
if (!intersection_ex(thin[0], bound).empty()) {
//be sure it's not too small to extrude reliably
thin[0].remove_point_too_near((coord_t)SCALED_RESOLUTION);
- if (thin[0].area() > min_width*(ext_perimeter_width + ext_perimeter_spacing2)) {
+ if (thin[0].area() > min_width*(ext_perimeter_width + ext_perimeter_spacing)) {
thins.push_back(thin[0]);
bound.remove_point_too_near((coord_t)SCALED_RESOLUTION);
// the maximum thickness of our thin wall area is equal to the minimum thickness of a single loop (*1.2 because of circles approx. and enlrgment from 'div')
- Slic3r::MedialAxis ma{ thin[0], (coord_t)((ext_perimeter_width + ext_perimeter_spacing2)*1.2),
+ 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))
diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp
index d47cf960f..9823006ad 100644
--- a/src/libslic3r/PrintConfig.cpp
+++ b/src/libslic3r/PrintConfig.cpp
@@ -706,11 +706,23 @@ void PrintConfigDef::init_fff_params()
def->full_label = L("Ext. peri. cut corners");
def->category = OptionCategory::width;
def->tooltip = L("Activate this option to modify the flow to acknoledge that the nozzle is round and the corners will have a round shape, and so change the flow to realized that and avoid over-extrusion."
- " 100% is activated, 0% is deactivated and 50% is half-activated");
+ " 100% is activated, 0% is deactivated and 50% is half-activated."
+ "\nNote: this change the flow by ~5% over a very small distance (~nozzle diameter), so it shouldn't be noticeable unless you have a very big nozzle and a very precise printer."
+ "\nIt's very experimental, please report about the usefulness. It may be removed if there is no use of it.");
def->sidetext = L("%");
def->mode = comExpert;
def->set_default_value(new ConfigOptionPercent(0));
+ def = this->add("external_perimeter_overlap", coPercent);
+ def->label = L("external periemter overlap");
+ def->full_label = L("Ext. peri. overlap");
+ def->category = OptionCategory::width;
+ def->tooltip = L("This perimeter allow you to reduce the overlap between the perimeters and the external one, to reduce the impact of the perimeters artifacts."
+ "\nIt's very experimental, please report about the usefulness. It may be removed if there is no use of it.");
+ def->sidetext = L("%");
+ def->mode = comExpert;
+ def->set_default_value(new ConfigOptionPercent(100));
+
def = this->add("external_perimeter_speed", coFloatOrPercent);
def->label = L("External");
def->full_label = L("External perimeters speed");
diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp
index a9b20d4df..b12545090 100644
--- a/src/libslic3r/PrintConfig.hpp
+++ b/src/libslic3r/PrintConfig.hpp
@@ -613,6 +613,7 @@ public:
ConfigOptionBool enforce_full_fill_volume;
ConfigOptionFloatOrPercent external_infill_margin;
ConfigOptionFloatOrPercent external_perimeter_extrusion_width;
+ ConfigOptionPercent external_perimeter_overlap;
ConfigOptionFloatOrPercent external_perimeter_speed;
ConfigOptionBool external_perimeters_first;
ConfigOptionBool external_perimeters_vase;
@@ -695,6 +696,7 @@ protected:
OPT_PTR(enforce_full_fill_volume);
OPT_PTR(external_infill_margin);
OPT_PTR(external_perimeter_extrusion_width);
+ OPT_PTR(external_perimeter_overlap);
OPT_PTR(external_perimeter_speed);
OPT_PTR(external_perimeters_first);
OPT_PTR(external_perimeters_vase);
diff --git a/src/slic3r/GUI/Preset.cpp b/src/slic3r/GUI/Preset.cpp
index 9935d8ed3..4ccd74220 100644
--- a/src/slic3r/GUI/Preset.cpp
+++ b/src/slic3r/GUI/Preset.cpp
@@ -529,7 +529,8 @@ const std::vector<std::string>& Preset::print_options()
, "curve_smoothing_angle_convex"
, "curve_smoothing_angle_concave",
"print_extrusion_multiplier",
- "external_perimeter_cut_corners"
+ "external_perimeter_cut_corners",
+ "external_perimeter_overlap"
};
return s_opts;
}