Skip to content

Commit

Permalink
ENH: don't calculate overhang degree if disable overhang slow down
Browse files Browse the repository at this point in the history
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
  • Loading branch information
SaltWei authored and lanewei120 committed Oct 20, 2022
1 parent 11106f0 commit 29fff62
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 15 deletions.
44 changes: 31 additions & 13 deletions src/libslic3r/PerimeterGenerator.cpp
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions src/libslic3r/PrintObject.cpp
Expand Up @@ -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);
Expand All @@ -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"
Expand Down

0 comments on commit 29fff62

Please sign in to comment.