From 2fc9299c65c64d058bb3a7c65b7a263bd1f6f22e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Hejl?= Date: Fri, 1 Dec 2023 11:28:45 +0100 Subject: [PATCH] Use max value of double instead of std::optional in get_first_crossed_line_distance() and get_obstacle_adjusted_slope_end(). --- src/libslic3r/GCode/Travels.cpp | 20 +++++++++----------- src/libslic3r/GCode/Travels.hpp | 2 +- tests/fff_print/test_gcode_travels.cpp | 14 +++++++------- 3 files changed, 17 insertions(+), 19 deletions(-) diff --git a/src/libslic3r/GCode/Travels.cpp b/src/libslic3r/GCode/Travels.cpp index 45b443ce66..1146d096f4 100644 --- a/src/libslic3r/GCode/Travels.cpp +++ b/src/libslic3r/GCode/Travels.cpp @@ -114,13 +114,12 @@ Points3 generate_elevated_travel( return result; } -std::optional get_first_crossed_line_distance( +double get_first_crossed_line_distance( tcb::span xy_path, const AABBTreeLines::LinesDistancer &distancer ) { assert(!xy_path.empty()); - if (xy_path.empty()) { - return {}; - } + if (xy_path.empty()) + return std::numeric_limits::max(); double traversed_distance = 0; for (const Line &line : xy_path) { @@ -139,7 +138,7 @@ std::optional get_first_crossed_line_distance( traversed_distance += (unscaled_line.a - unscaled_line.b).norm(); } - return {}; + return std::numeric_limits::max(); } struct SmoothingParams @@ -222,15 +221,14 @@ ElevatedTravelParams get_elevated_traval_params( elevation_params.slope_end = elevation_params.lift_height / std::tan(slope_rad); } - std::optional obstacle_adjusted_slope_end{ + const double obstacle_adjusted_slope_end{ previous_layer_distancer ? - get_first_crossed_line_distance(xy_path.lines(), *previous_layer_distancer) : - std::nullopt + get_first_crossed_line_distance(xy_path.lines(), *previous_layer_distancer) : + std::numeric_limits::max() }; - if (obstacle_adjusted_slope_end && obstacle_adjusted_slope_end < elevation_params.slope_end) { - elevation_params.slope_end = *obstacle_adjusted_slope_end; - } + if (obstacle_adjusted_slope_end < elevation_params.slope_end) + elevation_params.slope_end = obstacle_adjusted_slope_end; SmoothingParams smoothing_params{get_smoothing_params( elevation_params.lift_height, elevation_params.slope_end, extruder_id, diff --git a/src/libslic3r/GCode/Travels.hpp b/src/libslic3r/GCode/Travels.hpp index bbaccd46ee..c0a9c4442d 100644 --- a/src/libslic3r/GCode/Travels.hpp +++ b/src/libslic3r/GCode/Travels.hpp @@ -141,7 +141,7 @@ Points3 generate_elevated_travel( * * **Ignores intersection with xy_path starting point.** */ -std::optional get_first_crossed_line_distance( +double get_first_crossed_line_distance( tcb::span xy_path, const AABBTreeLines::LinesDistancer &distancer ); diff --git a/tests/fff_print/test_gcode_travels.cpp b/tests/fff_print/test_gcode_travels.cpp index af947958d2..9d43c3f06e 100644 --- a/tests/fff_print/test_gcode_travels.cpp +++ b/tests/fff_print/test_gcode_travels.cpp @@ -171,13 +171,13 @@ TEST_CASE("Get first crossed line distance", "[GCode]") { // Try different cases by skipping lines in the travel. AABBTreeLines::LinesDistancer distancer{std::move(lines)}; - CHECK(*get_first_crossed_line_distance(travel, distancer) == Approx(1)); - CHECK(*get_first_crossed_line_distance(tcb::span{travel}.subspan(1), distancer) == Approx(0.2)); - CHECK(*get_first_crossed_line_distance(tcb::span{travel}.subspan(2), distancer) == Approx(0.5)); - CHECK(*get_first_crossed_line_distance(tcb::span{travel}.subspan(3), distancer) == Approx(1.0)); //Edge case - CHECK(*get_first_crossed_line_distance(tcb::span{travel}.subspan(4), distancer) == Approx(0.7)); - CHECK(*get_first_crossed_line_distance(tcb::span{travel}.subspan(5), distancer) == Approx(1.6)); - CHECK_FALSE(get_first_crossed_line_distance(tcb::span{travel}.subspan(6), distancer)); + CHECK(get_first_crossed_line_distance(travel, distancer) == Approx(1)); + CHECK(get_first_crossed_line_distance(tcb::span{travel}.subspan(1), distancer) == Approx(0.2)); + CHECK(get_first_crossed_line_distance(tcb::span{travel}.subspan(2), distancer) == Approx(0.5)); + CHECK(get_first_crossed_line_distance(tcb::span{travel}.subspan(3), distancer) == Approx(1.0)); //Edge case + CHECK(get_first_crossed_line_distance(tcb::span{travel}.subspan(4), distancer) == Approx(0.7)); + CHECK(get_first_crossed_line_distance(tcb::span{travel}.subspan(5), distancer) == Approx(1.6)); + CHECK(get_first_crossed_line_distance(tcb::span{travel}.subspan(6), distancer) == std::numeric_limits::max()); }