ENH: don't calculate overhang degree if disable overhang slow down

When the model has no overhang, user may disable overhang
slowing down.
In this case, it's unnecessary to calculate overhang
degree which make slicing slow when model is complex.

This is improvement for github issue #331.

Signed-off-by: salt.wei <salt.wei@bambulab.com>
Change-Id: I2eaeca3ee4068f76709fe97535bbf05c0d27c062
This commit is contained in:
salt.wei authored and Lane.Wei committed 2022-10-20 19:34:37 +08:00
1 parent 81da77d1e0
commit fd0f22b771
2 files changed
+33 -15

No files matched your search

+31 -13
View File
@@ -222,29 +222,47 @@ static ExtrusionEntityCollection traverse_loops(const PerimeterGenerator &perime
if (perimeter_generator.config->detect_overhang_wall && perimeter_generator.layer_id > perimeter_generator.object_config->raft_layers) {
// get non 100% overhang paths by intersecting this loop with the grown lower slices
Polylines remain_polines;
for (auto it = lower_polygons_series->begin();
it != lower_polygons_series->end(); it++)
{
Polylines inside_polines = (it == lower_polygons_series->begin()) ?
intersection_pl({ polygon }, it->second) :
intersection_pl(remain_polines, it->second);
if (perimeter_generator.config->enable_overhang_speed) {
for (auto it = lower_polygons_series->begin();
it != lower_polygons_series->end(); it++)
{
Polylines inside_polines = (it == lower_polygons_series->begin()) ?
intersection_pl({ polygon }, it->second) :
intersection_pl(remain_polines, it->second);
extrusion_paths_append(
paths,
std::move(inside_polines),
it->first,
int(0),
role,
extrusion_mm3_per_mm,
extrusion_width,
(float)perimeter_generator.layer_height);
remain_polines = (it == lower_polygons_series->begin()) ?
diff_pl({ polygon }, it->second) :
diff_pl(remain_polines, it->second);
if (remain_polines.size() == 0)
break;
}
} else {
auto it = lower_polygons_series->end();
it--;
Polylines inside_polines = intersection_pl({ polygon }, it->second);
extrusion_paths_append(
paths,
std::move(inside_polines),
it->first,
int(0),
int(0),
role,
extrusion_mm3_per_mm,
extrusion_width,
(float)perimeter_generator.layer_height);
remain_polines = (it == lower_polygons_series->begin())?
diff_pl({ polygon }, it->second) :
diff_pl(remain_polines, it->second);
if (remain_polines.size() == 0)
break;
remain_polines = diff_pl({ polygon }, it->second);
}
// get 100% overhang paths by checking what parts of this loop fall
+2 -2
View File
@@ -779,6 +779,8 @@ bool PrintObject::invalidate_state_by_config_options(
|| opt_key == "fuzzy_skin_thickness"
|| opt_key == "fuzzy_skin_point_distance"
|| opt_key == "detect_overhang_wall"
//BBS
|| opt_key == "enable_overhang_speed"
|| opt_key == "detect_thin_wall") {
steps.emplace_back(posPerimeters);
steps.emplace_back(posSupportMaterial);
@@ -794,8 +796,6 @@ bool PrintObject::invalidate_state_by_config_options(
opt_key == "seam_position"
|| opt_key == "support_speed"
|| opt_key == "support_interface_speed"
//BBS
|| opt_key == "enable_overhang_speed"
|| opt_key == "overhang_1_4_speed"
|| opt_key == "overhang_2_4_speed"
|| opt_key == "overhang_3_4_speed"