diff --git a/src/libslic3r/Arachne/WallToolPaths.cpp b/src/libslic3r/Arachne/WallToolPaths.cpp index 14c5b9c03..104c780f5 100644 --- a/src/libslic3r/Arachne/WallToolPaths.cpp +++ b/src/libslic3r/Arachne/WallToolPaths.cpp @@ -455,6 +455,9 @@ void removeColinearEdges(Polygons &thiss, const double max_deviation_angle = 0.0 const std::vector<VariableWidthLines> &WallToolPaths::generate() { + if (this->inset_count < 1) + return toolpaths; + const coord_t smallest_segment = Slic3r::Arachne::meshfix_maximum_resolution; const coord_t allowed_distance = Slic3r::Arachne::meshfix_maximum_deviation; const coord_t epsilon_offset = (allowed_distance / 2) - 1; diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp index 1c77688eb..60c21ffba 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -313,16 +313,8 @@ void PerimeterGenerator::process_arachne() ExPolygons last = offset_ex(surface.expolygon.simplify_p(m_scaled_resolution), - float(ext_perimeter_width / 2. - ext_perimeter_spacing / 2.)); Polygons last_p = to_polygons(last); - coord_t bead_width_0 = ext_perimeter_spacing; - coord_t bead_width_x = perimeter_spacing; - coord_t wall_0_inset = 0; - - Arachne::WallToolPaths wallToolPaths(last_p, bead_width_0, bead_width_x, coord_t(loop_number + 1), wall_0_inset, *this->object_config, *this->print_config); - wallToolPaths.generate(); - + Arachne::WallToolPaths wallToolPaths(last_p, ext_perimeter_spacing, perimeter_spacing, coord_t(loop_number + 1), 0, *this->object_config, *this->print_config); std::vector<Arachne::VariableWidthLines> perimeters = wallToolPaths.getToolPaths(); - if (perimeters.empty()) - continue; int start_perimeter = int(perimeters.size()) - 1; int end_perimeter = -1; @@ -357,7 +349,7 @@ void PerimeterGenerator::process_arachne() } std::vector<bool> processed(all_extrusions.size(), false); // Indicate that the extrusion was already processed. - Point current_position = all_extrusions.front()->junctions.front().p; // Some starting position. + Point current_position = all_extrusions.empty() ? Point::Zero() : all_extrusions.front()->junctions.front().p; // Some starting position. std::vector<const Arachne::ExtrusionLine *> ordered_extrusions; // To store our result in. At the end we'll std::swap. ordered_extrusions.reserve(all_extrusions.size());