diff --git a/src/libslic3r/ArcFitter.cpp b/src/libslic3r/ArcFitter.cpp index 1d48861e0c..cdfd708b10 100644 --- a/src/libslic3r/ArcFitter.cpp +++ b/src/libslic3r/ArcFitter.cpp @@ -1,5 +1,4 @@ #include "ArcFitter.hpp" -#include "Point.hpp" #include "Polyline.hpp" #include @@ -7,17 +6,7 @@ namespace Slic3r { -// Helper functions to dispatch to the correct douglas_peucker implementation -static inline Points douglas_peucker_helper(const Points &points, double tolerance) { - return MultiPoint::_douglas_peucker(points, tolerance); -} - -static inline Points3 douglas_peucker_helper(const Points3 &points, double tolerance) { - return MultiPoint3::_douglas_peucker(points, tolerance); -} - -template -static void do_arc_fitting_tmpl(const POINTS& points, std::vector& result, double tolerance) +void ArcFitter::do_arc_fitting(const Points& points, std::vector& result, double tolerance) { #ifdef DEBUG_ARC_FITTING static int irun = 0; @@ -50,7 +39,7 @@ static void do_arc_fitting_tmpl(const POINTS& points, std::vector 2) { //BBS: althought current point_stack can't be fit as arc, //but previous must can be fit if removing the top in stack, so save last arc - result.emplace_back(PathFittingData{ front_index, + result.emplace_back(std::move(PathFittingData{ front_index, back_index - 1, last_arc.direction == ArcDirection::Arc_Dir_CCW ? EMovePathType::Arc_move_ccw : EMovePathType::Arc_move_cw, - last_arc }); + last_arc })); } else { //BBS: save the first segment as line move when 3 point-line can't be fit as arc move if (result.empty() || result.back().path_type != EMovePathType::Linear_move) - result.emplace_back(PathFittingData{front_index, front_index + 1, EMovePathType::Linear_move, ArcSegment()}); + result.emplace_back(std::move(PathFittingData{front_index, front_index + 1, EMovePathType::Linear_move, ArcSegment()})); else if(result.back().path_type == EMovePathType::Linear_move) result.back().end_point_index = front_index + 1; } @@ -98,25 +87,14 @@ static void do_arc_fitting_tmpl(const POINTS& points, std::vector& result, double tolerance) -{ - do_arc_fitting_tmpl(points, result, tolerance); -} - -void ArcFitter::do_arc_fitting(const Points3 &points, std::vector& result, double tolerance) -{ - do_arc_fitting_tmpl(points, result, tolerance); -} - -template -static void do_arc_fitting_and_simplify_tmpl(POINTS &points, std::vector& result, double tolerance) +void ArcFitter::do_arc_fitting_and_simplify(Points& points, std::vector& result, double tolerance) { //BBS: 1 do arc fit first if (abs(tolerance) > SCALED_EPSILON) @@ -128,12 +106,12 @@ static void do_arc_fitting_and_simplify_tmpl(POINTS &points, std::vector reduce_count(result.size(), 0); @@ -146,11 +124,11 @@ static void do_arc_fitting_and_simplify_tmpl(POINTS &points, std::vector& result, double tolerance) -{ - do_arc_fitting_and_simplify_tmpl(points, result, tolerance); -} - -void ArcFitter::do_arc_fitting_and_simplify(Points3& points, std::vector& result, double tolerance) -{ - do_arc_fitting_and_simplify_tmpl(points, result, tolerance); -} - } \ No newline at end of file diff --git a/src/libslic3r/ArcFitter.hpp b/src/libslic3r/ArcFitter.hpp index 6672b0b771..f2b2ee49d8 100644 --- a/src/libslic3r/ArcFitter.hpp +++ b/src/libslic3r/ArcFitter.hpp @@ -42,11 +42,9 @@ class ArcFitter { public: //BBS: this function is used to check the point list and return which part can fit as arc, which part should be line static void do_arc_fitting(const Points& points, std::vector &result, double tolerance); - static void do_arc_fitting(const Points3& points, std::vector &result, double tolerance); //BBS: this function is used to check the point list and return which part can fit as arc, which part should be line. //By the way, it also use DP simplify to reduce point of straight part and only keep the start and end point of arc. static void do_arc_fitting_and_simplify(Points& points, std::vector& result, double tolerance); - static void do_arc_fitting_and_simplify(Points3& points, std::vector& result, double tolerance); }; }