From 037a866f2251d22d1bf6adcae103b8db1c2cbfb0 Mon Sep 17 00:00:00 2001 From: Lukas Matena Date: Thu, 31 Mar 2022 14:27:16 +0200 Subject: [PATCH] Fixup of previous commit: the previous fix only works for objects that have equal height --- src/libslic3r/Print.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 76c32336e..3198f6795 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -541,16 +541,17 @@ std::string Print::validate(std::string* warning) const // a copy of another, or when a layer height modifier is used the same way on both objects. // The latter case might create a floating point inaccuracy mismatch, so compare // element-wise using an epsilon check. - bool profiles_equal = layer_height_profiles[idx_object].size() == layer_height_profiles[tallest_object_idx].size(); size_t i = 0; const coordf_t eps = 0.5 * EPSILON; // layers closer than EPSILON will be merged later. Let's make // this check a bit more sensitive to make sure we never consider two different layers as one. - while (profiles_equal && i < layer_height_profiles[idx_object].size()) { - profiles_equal = (std::abs(layer_height_profiles[idx_object][i] - layer_height_profiles[tallest_object_idx][i]) < eps); + while (i < layer_height_profiles[idx_object].size() + && i < layer_height_profiles[tallest_object_idx].size()) { + if (i%2 == 0 && layer_height_profiles[tallest_object_idx][i] > layer_height_profiles[idx_object][layer_height_profiles[idx_object].size() - 2 ]) + break; + if (! std::abs(layer_height_profiles[idx_object][i] - layer_height_profiles[tallest_object_idx][i]) < eps) + return L("The Wipe tower is only supported if all objects have the same variable layer height"); ++i; } - if (! profiles_equal) - return L("The Wipe tower is only supported if all objects have the same variable layer height"); } } }