diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 06cf3278bf..d74b4d3707 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -2284,7 +2284,7 @@ namespace GCode { std::pair split_with_seam( const ExtrusionLoop &loop, - const std::variant &seam, + const boost::variant &seam, const bool flipped, const GCode::SmoothPathCache &smooth_path_cache, const double scaled_resolution, @@ -2293,21 +2293,18 @@ std::pair split_with_seam( if (loop.paths.empty() || loop.paths.front().empty()) { return {SmoothPath{}, 0}; } - if (std::holds_alternative(seam)) { - const auto seam_point = std::get(seam); - + if (const auto seam_point{boost::get(&seam)}; seam_point != nullptr) { return { smooth_path_cache.resolve_or_fit_split_with_seam( - loop, flipped, scaled_resolution, seam_point, seam_point_merge_distance_threshold + loop, flipped, scaled_resolution, *seam_point, seam_point_merge_distance_threshold ), 0}; - } else if (std::holds_alternative(seam)) { - const auto scarf{std::get(seam)}; + } else if (const auto scarf{boost::get(&seam)}; scarf != nullptr) { ExtrusionPaths paths{loop.paths}; const auto apply_smoothing{[&](tcb::span paths){ return smooth_path_cache.resolve_or_fit(paths, false, scaled(0.0015)); }}; - return Seams::Scarf::add_scarf_seam(std::move(paths), scarf, apply_smoothing, flipped); + return Seams::Scarf::add_scarf_seam(std::move(paths), *scarf, apply_smoothing, flipped); } else { throw std::runtime_error{"Unknown seam type!"}; } @@ -2347,7 +2344,7 @@ struct SmoothPathGenerator previous_position ? previous_position->local_point : Point::Zero()}; if (!config.spiral_vase && loop->role().is_perimeter() && layer != nullptr && region != nullptr) { - std::variant seam{ + boost::variant seam{ this->seam_placer .place_seam(layer, region, *loop, extrusion_reference.flipped(), previous_point)}; std::tie(result, wipe_offset) = split_with_seam( diff --git a/src/libslic3r/GCode/SeamPlacer.cpp b/src/libslic3r/GCode/SeamPlacer.cpp index 5b232b56bf..341093b3b7 100644 --- a/src/libslic3r/GCode/SeamPlacer.cpp +++ b/src/libslic3r/GCode/SeamPlacer.cpp @@ -235,7 +235,7 @@ SeamChoice to_seam_choice( return result; } -std::variant finalize_seam_position( +boost::variant finalize_seam_position( const ExtrusionLoop &loop, const PrintRegion *region, SeamChoice seam_choice, @@ -403,7 +403,7 @@ int get_perimeter_count(const Layer *layer){ return count; } -std::variant Placer::place_seam( +boost::variant Placer::place_seam( const Layer *layer, const PrintRegion *region, const ExtrusionLoop &loop, const bool flipped, const Point &last_pos ) const { const PrintObject *po = layer->object(); diff --git a/src/libslic3r/GCode/SeamPlacer.hpp b/src/libslic3r/GCode/SeamPlacer.hpp index 77955a7d09..a0fe47297f 100644 --- a/src/libslic3r/GCode/SeamPlacer.hpp +++ b/src/libslic3r/GCode/SeamPlacer.hpp @@ -54,7 +54,7 @@ public: const std::function &throw_if_canceled ); - std::variant place_seam( + boost::variant place_seam( const Layer *layer, const PrintRegion *region, const ExtrusionLoop &loop, const bool flipped, const Point &last_pos ) const;