mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-08-14 15:15:54 +08:00
Fix SPE-2304. Rear seam not respecting paiting.
If a rear seam was projected it was not respecting seam paiting, because it continued to search the points even if they had 'worse' point_type (e.g. common/blocker). Now the search is aborted if there is an enforcer and it is not picked.
This commit is contained in:
parent
70d7911ee3
commit
258882ca5a
@ -236,26 +236,14 @@ double VisibilityCalculator::get_angle_visibility_modifier(
|
||||
return -angle_smooth_weight;
|
||||
}
|
||||
|
||||
std::vector<Vec2d> extract_points(
|
||||
const Perimeters::Perimeter &perimeter, const Perimeters::PointType point_type
|
||||
) {
|
||||
std::vector<Vec2d> 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<Vec2d> get_starting_positions(const Shells::Shell<> &shell) {
|
||||
const Perimeters::Perimeter &perimeter{shell.front().boundary};
|
||||
|
||||
std::vector<Vec2d> enforcers{extract_points(perimeter, Perimeters::PointType::enforcer)};
|
||||
std::vector<Vec2d> enforcers{Perimeters::extract_points(perimeter, Perimeters::PointType::enforcer)};
|
||||
if (!enforcers.empty()) {
|
||||
return enforcers;
|
||||
}
|
||||
std::vector<Vec2d> common{extract_points(perimeter, Perimeters::PointType::common)};
|
||||
std::vector<Vec2d> common{Perimeters::extract_points(perimeter, Perimeters::PointType::common)};
|
||||
if (!common.empty()) {
|
||||
return common;
|
||||
}
|
||||
|
@ -18,6 +18,9 @@ std::optional<SeamChoice> maybe_choose_seam_point(
|
||||
return seam_choice;
|
||||
}
|
||||
}
|
||||
if (!Perimeters::extract_points(perimeter, point_type).empty()) {
|
||||
return std::nullopt;
|
||||
}
|
||||
}
|
||||
|
||||
return std::nullopt;
|
||||
|
@ -185,6 +185,19 @@ inline std::size_t get_layer_count(
|
||||
}
|
||||
return layer_count;
|
||||
}
|
||||
|
||||
inline std::vector<Vec2d> extract_points(
|
||||
const Perimeters::Perimeter &perimeter, const Perimeters::PointType point_type
|
||||
) {
|
||||
std::vector<Vec2d> 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_
|
||||
|
@ -13,6 +13,7 @@
|
||||
#include <type_traits>
|
||||
#include <vector>
|
||||
|
||||
#include "Point.hpp"
|
||||
#include "libslic3r.h"
|
||||
#include "Utils.hpp"
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user