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:
authorPavel Mikus <pavel.mikus.mail@seznam.cz>2022-07-11 19:44:34 +0300
committerPavel Mikus <pavel.mikus.mail@seznam.cz>2022-07-14 11:15:05 +0300
commitf5efb0d0aa87a062ce19b3329919c735d17abf50 (patch)
tree7c5f0bf9b2f068fe0f92c7da0c47de09b527e358
parent4a9f9aa89bcdac1762a7df5cbc39391839df12fe (diff)
remove global angle computation, wrong results
-rw-r--r--src/libslic3r/GCode/SeamPlacer.cpp29
-rw-r--r--src/libslic3r/GCode/SeamPlacer.hpp1
2 files changed, 12 insertions, 18 deletions
diff --git a/src/libslic3r/GCode/SeamPlacer.cpp b/src/libslic3r/GCode/SeamPlacer.cpp
index 430030184..6213d44e5 100644
--- a/src/libslic3r/GCode/SeamPlacer.cpp
+++ b/src/libslic3r/GCode/SeamPlacer.cpp
@@ -471,29 +471,24 @@ void process_perimeter_polygon(const Polygon &orig_polygon, float z_coord, const
lengths.push_back(std::max((unscale(polygon[0]) - unscale(polygon[polygon.size() - 1])).norm(), 0.1));
std::vector<float> polygon_angles = calculate_polygon_angles_at_vertices(polygon, lengths,
SeamPlacer::polygon_local_angles_arm_distance);
- std::vector<float> global_angles = calculate_polygon_angles_at_vertices(polygon, lengths,
- SeamPlacer::polygon_global_angles_arm_distance);
- for (size_t angle_index = 0; angle_index < polygon_angles.size(); ++angle_index) {
- if (fabs(global_angles[angle_index] > fabs(polygon_angles[angle_index]))){
- polygon_angles[angle_index] = global_angles[angle_index];
- }
- }
// resample smooth surfaces, so that alignment finds short path down, and does not create unnecesary curves
if (std::all_of(polygon_angles.begin(), polygon_angles.end(), [](float angle) {
return fabs(angle) < SeamPlacer::sharp_angle_snapping_threshold;
})) {
- float avg_dist = std::accumulate(lengths.begin(), lengths.end(), 0.0f) / float(lengths.size());
- coord_t sampling_dist = scaled(avg_dist*0.2f);
-
- polygon.points = polygon.equally_spaced_points(sampling_dist);
- lengths.clear();
- for (size_t point_idx = 0; point_idx < polygon.size() - 1; ++point_idx) {
- lengths.push_back((unscale(polygon[point_idx]) - unscale(polygon[point_idx + 1])).norm());
+ float total_dist = std::accumulate(lengths.begin(), lengths.end(), 0.0f);
+ float avg_dist = total_dist / float(lengths.size());
+ if (avg_dist < SeamPlacer::seam_align_tolerable_dist * 2.0f){
+ coord_t sampling_dist = scaled(avg_dist*0.2f);
+
+ polygon.points = polygon.equally_spaced_points(sampling_dist);
+ lengths.clear();
+ for (size_t point_idx = 0; point_idx < polygon.size() - 1; ++point_idx) {
+ lengths.push_back((unscale(polygon[point_idx]) - unscale(polygon[point_idx + 1])).norm());
+ }
+ lengths.push_back(std::max((unscale(polygon[0]) - unscale(polygon[polygon.size() - 1])).norm(), 0.1));
+ polygon_angles = calculate_polygon_angles_at_vertices(polygon, lengths, avg_dist);
}
- lengths.push_back(std::max((unscale(polygon[0]) - unscale(polygon[polygon.size() - 1])).norm(), 0.1));
- polygon_angles = calculate_polygon_angles_at_vertices(polygon, lengths,
- SeamPlacer::polygon_global_angles_arm_distance);
}
diff --git a/src/libslic3r/GCode/SeamPlacer.hpp b/src/libslic3r/GCode/SeamPlacer.hpp
index 2c66fd5d6..ae7a1a2ab 100644
--- a/src/libslic3r/GCode/SeamPlacer.hpp
+++ b/src/libslic3r/GCode/SeamPlacer.hpp
@@ -128,7 +128,6 @@ public:
// arm length used during angles computation
static constexpr float polygon_local_angles_arm_distance = 0.3f;
- static constexpr float polygon_global_angles_arm_distance = 1.5f;
static constexpr float sharp_angle_snapping_threshold = (60.0f / 180.0f) * float(PI);
// max tolerable distance from the previous layer is overhang_distance_tolerance_factor * flow_width