mirror of
https://git.mirrors.martin98.com/https://github.com/slic3r/Slic3r.git
synced 2025-08-15 17:55:57 +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
|
group:Overlap
|
||||||
setting:infill_overlap
|
setting:infill_overlap
|
||||||
setting:bridge_overlap
|
setting:bridge_overlap
|
||||||
|
setting:external_perimeter_overlap
|
||||||
group:Flow
|
group:Flow
|
||||||
line:Flow ratio
|
line:Flow ratio
|
||||||
setting:bridge_flow_ratio
|
setting:bridge_flow_ratio
|
||||||
|
@ -39,13 +39,23 @@ void PerimeterGenerator::process()
|
|||||||
// other perimeters
|
// other perimeters
|
||||||
this->_mm3_per_mm = this->perimeter_flow.mm3_per_mm();
|
this->_mm3_per_mm = this->perimeter_flow.mm3_per_mm();
|
||||||
coord_t perimeter_width = this->perimeter_flow.scaled_width();
|
coord_t perimeter_width = this->perimeter_flow.scaled_width();
|
||||||
|
//spacing between internal perimeters
|
||||||
coord_t perimeter_spacing = this->perimeter_flow.scaled_spacing();
|
coord_t perimeter_spacing = this->perimeter_flow.scaled_spacing();
|
||||||
|
|
||||||
// external perimeters
|
// external perimeters
|
||||||
this->_ext_mm3_per_mm = this->ext_perimeter_flow.mm3_per_mm();
|
this->_ext_mm3_per_mm = this->ext_perimeter_flow.mm3_per_mm();
|
||||||
coord_t ext_perimeter_width = this->ext_perimeter_flow.scaled_width();
|
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();
|
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);
|
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
|
// overhang perimeters
|
||||||
this->_mm3_per_mm_overhang = this->overhang_flow.mm3_per_mm();
|
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()) {
|
if (!intersection_ex(thin[0], bound).empty()) {
|
||||||
//be sure it's not too small to extrude reliably
|
//be sure it's not too small to extrude reliably
|
||||||
thin[0].remove_point_too_near((coord_t)SCALED_RESOLUTION);
|
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]);
|
thins.push_back(thin[0]);
|
||||||
bound.remove_point_too_near((coord_t)SCALED_RESOLUTION);
|
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')
|
// 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) };
|
min_width, coord_t(this->layer_height) };
|
||||||
ma.use_bounds(bound)
|
ma.use_bounds(bound)
|
||||||
.use_min_real_width((coord_t)scale_(this->ext_perimeter_flow.nozzle_diameter))
|
.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->full_label = L("Ext. peri. cut corners");
|
||||||
def->category = OptionCategory::width;
|
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."
|
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->sidetext = L("%");
|
||||||
def->mode = comExpert;
|
def->mode = comExpert;
|
||||||
def->set_default_value(new ConfigOptionPercent(0));
|
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 = this->add("external_perimeter_speed", coFloatOrPercent);
|
||||||
def->label = L("External");
|
def->label = L("External");
|
||||||
def->full_label = L("External perimeters speed");
|
def->full_label = L("External perimeters speed");
|
||||||
|
@ -613,6 +613,7 @@ public:
|
|||||||
ConfigOptionBool enforce_full_fill_volume;
|
ConfigOptionBool enforce_full_fill_volume;
|
||||||
ConfigOptionFloatOrPercent external_infill_margin;
|
ConfigOptionFloatOrPercent external_infill_margin;
|
||||||
ConfigOptionFloatOrPercent external_perimeter_extrusion_width;
|
ConfigOptionFloatOrPercent external_perimeter_extrusion_width;
|
||||||
|
ConfigOptionPercent external_perimeter_overlap;
|
||||||
ConfigOptionFloatOrPercent external_perimeter_speed;
|
ConfigOptionFloatOrPercent external_perimeter_speed;
|
||||||
ConfigOptionBool external_perimeters_first;
|
ConfigOptionBool external_perimeters_first;
|
||||||
ConfigOptionBool external_perimeters_vase;
|
ConfigOptionBool external_perimeters_vase;
|
||||||
@ -695,6 +696,7 @@ protected:
|
|||||||
OPT_PTR(enforce_full_fill_volume);
|
OPT_PTR(enforce_full_fill_volume);
|
||||||
OPT_PTR(external_infill_margin);
|
OPT_PTR(external_infill_margin);
|
||||||
OPT_PTR(external_perimeter_extrusion_width);
|
OPT_PTR(external_perimeter_extrusion_width);
|
||||||
|
OPT_PTR(external_perimeter_overlap);
|
||||||
OPT_PTR(external_perimeter_speed);
|
OPT_PTR(external_perimeter_speed);
|
||||||
OPT_PTR(external_perimeters_first);
|
OPT_PTR(external_perimeters_first);
|
||||||
OPT_PTR(external_perimeters_vase);
|
OPT_PTR(external_perimeters_vase);
|
||||||
|
@ -529,7 +529,8 @@ const std::vector<std::string>& Preset::print_options()
|
|||||||
, "curve_smoothing_angle_convex"
|
, "curve_smoothing_angle_convex"
|
||||||
, "curve_smoothing_angle_concave",
|
, "curve_smoothing_angle_concave",
|
||||||
"print_extrusion_multiplier",
|
"print_extrusion_multiplier",
|
||||||
"external_perimeter_cut_corners"
|
"external_perimeter_cut_corners",
|
||||||
|
"external_perimeter_overlap"
|
||||||
};
|
};
|
||||||
return s_opts;
|
return s_opts;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user