diff --git a/src/libslic3r/GCode/SeamAligned.cpp b/src/libslic3r/GCode/SeamAligned.cpp index 209a5a85d2..936b600bb8 100644 --- a/src/libslic3r/GCode/SeamAligned.cpp +++ b/src/libslic3r/GCode/SeamAligned.cpp @@ -236,26 +236,14 @@ double VisibilityCalculator::get_angle_visibility_modifier( return -angle_smooth_weight; } -std::vector extract_points( - const Perimeters::Perimeter &perimeter, const Perimeters::PointType point_type -) { - std::vector result; - for (std::size_t i{0}; i < perimeter.positions.size(); ++i) { - if (perimeter.point_types[i] == point_type) { - result.push_back(perimeter.positions[i]); - } - } - return result; -} - std::vector get_starting_positions(const Shells::Shell<> &shell) { const Perimeters::Perimeter &perimeter{shell.front().boundary}; - std::vector enforcers{extract_points(perimeter, Perimeters::PointType::enforcer)}; + std::vector enforcers{Perimeters::extract_points(perimeter, Perimeters::PointType::enforcer)}; if (!enforcers.empty()) { return enforcers; } - std::vector common{extract_points(perimeter, Perimeters::PointType::common)}; + std::vector common{Perimeters::extract_points(perimeter, Perimeters::PointType::common)}; if (!common.empty()) { return common; } diff --git a/src/libslic3r/GCode/SeamChoice.cpp b/src/libslic3r/GCode/SeamChoice.cpp index 6db562e2a1..dfcb4b4b08 100644 --- a/src/libslic3r/GCode/SeamChoice.cpp +++ b/src/libslic3r/GCode/SeamChoice.cpp @@ -18,6 +18,9 @@ std::optional maybe_choose_seam_point( return seam_choice; } } + if (!Perimeters::extract_points(perimeter, point_type).empty()) { + return std::nullopt; + } } return std::nullopt; diff --git a/src/libslic3r/GCode/SeamPerimeters.hpp b/src/libslic3r/GCode/SeamPerimeters.hpp index aaebe6e5a6..21c50e0a98 100644 --- a/src/libslic3r/GCode/SeamPerimeters.hpp +++ b/src/libslic3r/GCode/SeamPerimeters.hpp @@ -185,6 +185,19 @@ inline std::size_t get_layer_count( } return layer_count; } + +inline std::vector extract_points( + const Perimeters::Perimeter &perimeter, const Perimeters::PointType point_type +) { + std::vector result; + for (std::size_t i{0}; i < perimeter.positions.size(); ++i) { + if (perimeter.point_types[i] == point_type) { + result.push_back(perimeter.positions[i]); + } + } + return result; +} + } // namespace Slic3r::Seams::Perimeters #endif // libslic3r_SeamPerimeters_hpp_ diff --git a/src/libslic3r/Slicing.hpp b/src/libslic3r/Slicing.hpp index 9e4b0499cc..f1f99e5952 100644 --- a/src/libslic3r/Slicing.hpp +++ b/src/libslic3r/Slicing.hpp @@ -13,6 +13,7 @@ #include #include +#include "Point.hpp" #include "libslic3r.h" #include "Utils.hpp"