mirror of
https://git.mirrors.martin98.com/https://github.com/slic3r/Slic3r.git
synced 2025-08-14 11:56:06 +08:00
experimental feature: external perimeter overlap.
Have to test it, it may decrease printing quality (like printing external perimeter first)
This commit is contained in:
parent
ffec4ee330
commit
d0a8bdebe8
@ -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
|
||||
|
@ -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))
|
||||
|
@ -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");
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user