FIX: crash while use conditional scarf
and clip paths correctly while has 50% overhang on slope Jira: 6640 6639 Signed-off-by: qing.zhang <qing.zhang@bambulab.com> Change-Id: I8abe43177c3965130514017eaaa75bc79ab7b2db
This commit is contained in:
parent
179191eefe
commit
af8e195532
|
@ -322,7 +322,7 @@ void ExtrusionLoopSloped::clip_end(const double distance)
|
||||||
{
|
{
|
||||||
double clip_dist = distance;
|
double clip_dist = distance;
|
||||||
std::vector<ExtrusionPathSloped> &ends_slope = this->ends;
|
std::vector<ExtrusionPathSloped> &ends_slope = this->ends;
|
||||||
while (clip_dist > 0) {
|
while (clip_dist > 0 && !ends_slope.empty()) {
|
||||||
ExtrusionPathSloped &last_path = ends_slope.back();
|
ExtrusionPathSloped &last_path = ends_slope.back();
|
||||||
double len = last_path.length();
|
double len = last_path.length();
|
||||||
if (len <= clip_dist) {
|
if (len <= clip_dist) {
|
||||||
|
@ -345,7 +345,7 @@ void ExtrusionLoopSloped::clip_front(const double distance)
|
||||||
std::vector<ExtrusionPathSloped> &start_slope = this->starts;
|
std::vector<ExtrusionPathSloped> &start_slope = this->starts;
|
||||||
|
|
||||||
Polyline front_inward;
|
Polyline front_inward;
|
||||||
while (distance > 0) {
|
while (distance > 0 && !start_slope.empty()) {
|
||||||
ExtrusionPathSloped &first_path = start_slope.front();
|
ExtrusionPathSloped &first_path = start_slope.front();
|
||||||
double len = first_path.length();
|
double len = first_path.length();
|
||||||
if (len <= clip_dist) {
|
if (len <= clip_dist) {
|
||||||
|
|
|
@ -4081,13 +4081,14 @@ std::string GCode::extrude_loop(ExtrusionLoop loop, std::string description, dou
|
||||||
paths.insert(paths.end(), new_loop.paths.begin(), new_loop.paths.end());
|
paths.insert(paths.end(), new_loop.paths.begin(), new_loop.paths.end());
|
||||||
paths.insert(paths.end(), new_loop.ends.begin(), new_loop.ends.end());
|
paths.insert(paths.end(), new_loop.ends.begin(), new_loop.ends.end());
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
paths.clear();
|
||||||
|
loop.clip_end(clip_length, &paths);
|
||||||
|
if (paths.empty()) return "";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!enable_seam_slope || slope_has_overhang) {
|
if (!enable_seam_slope || slope_has_overhang) {
|
||||||
if (enable_seam_slope)
|
|
||||||
paths.back().clip_end(seam_gap);
|
|
||||||
|
|
||||||
for (ExtrusionPaths::iterator path = paths.begin(); path != paths.end(); ++path) {
|
for (ExtrusionPaths::iterator path = paths.begin(); path != paths.end(); ++path) {
|
||||||
gcode += this->_extrude(*path, description, speed_for_path(*path));
|
gcode += this->_extrude(*path, description, speed_for_path(*path));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue