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:
Diffstat (limited to 'src/libslic3r/ExtrusionEntity.cpp')
-rw-r--r--src/libslic3r/ExtrusionEntity.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/libslic3r/ExtrusionEntity.cpp b/src/libslic3r/ExtrusionEntity.cpp
index 5ed878499..250359aef 100644
--- a/src/libslic3r/ExtrusionEntity.cpp
+++ b/src/libslic3r/ExtrusionEntity.cpp
@@ -213,21 +213,25 @@ void ExtrusionLoop::split_at(const Point &point, bool prefer_non_overhang)
this->split_at_vertex(p);
}
-void ExtrusionLoop::clip_end(double distance, ExtrusionPaths* paths) const
+ExtrusionPaths clip_end(ExtrusionPaths& paths, double distance)
{
- *paths = this->paths;
+ ExtrusionPaths removed;
- while (distance > 0 && !paths->empty()) {
- ExtrusionPath &last = paths->back();
+ while (distance > 0 && !paths.empty()) {
+ ExtrusionPath& last = paths.back();
+ removed.push_back(last);
double len = last.length();
if (len <= distance) {
- paths->pop_back();
+ paths.pop_back();
distance -= len;
} else {
last.polyline.clip_end(distance);
+ removed.back().polyline.clip_start(removed.back().polyline.length() - distance);
break;
}
}
+ std::reverse(removed.begin(), removed.end());
+ return removed;
}
bool ExtrusionLoop::has_overhang_point(const Point &point) const