From ae0c14be83514d99a872e268bd30c91519bcd067 Mon Sep 17 00:00:00 2001 From: Erica Fischer Date: Tue, 26 Nov 2024 15:28:17 -0800 Subject: [PATCH] Remove unused parts of clipper --- clipper2/include/clipper2/clipper.h | 98 -------------- clipper2/include/clipper2/clipper.minkowski.h | 120 ----------------- clipper2/include/clipper2/clipper.offset.h | 124 ------------------ clipper2/include/clipper2/clipper.rectclip.h | 82 ------------ 4 files changed, 424 deletions(-) delete mode 100644 clipper2/include/clipper2/clipper.minkowski.h delete mode 100644 clipper2/include/clipper2/clipper.offset.h delete mode 100644 clipper2/include/clipper2/clipper.rectclip.h diff --git a/clipper2/include/clipper2/clipper.h b/clipper2/include/clipper2/clipper.h index a2fe5c3c..fee38391 100644 --- a/clipper2/include/clipper2/clipper.h +++ b/clipper2/include/clipper2/clipper.h @@ -16,9 +16,6 @@ #include "clipper2/clipper.core.h" #include "clipper2/clipper.engine.h" -#include "clipper2/clipper.offset.h" -#include "clipper2/clipper.minkowski.h" -#include "clipper2/clipper.rectclip.h" namespace Clipper2Lib { @@ -132,35 +129,6 @@ namespace Clipper2Lib { return BooleanOp(ClipType::Xor, fillrule, subjects, clips, decimal_prec); } - inline Paths64 InflatePaths(const Paths64& paths, double delta, - JoinType jt, EndType et, double miter_limit = 2.0, - double arc_tolerance = 0.0) - { - if (!delta) return paths; - ClipperOffset clip_offset(miter_limit, arc_tolerance); - clip_offset.AddPaths(paths, jt, et); - Paths64 solution; - clip_offset.Execute(delta, solution); - return solution; - } - - inline PathsD InflatePaths(const PathsD& paths, double delta, - JoinType jt, EndType et, double miter_limit = 2.0, - int precision = 2, double arc_tolerance = 0.0) - { - int error_code = 0; - CheckPrecisionRange(precision, error_code); - if (!delta) return paths; - if (error_code) return PathsD(); - const double scale = std::pow(10, precision); - ClipperOffset clip_offset(miter_limit, arc_tolerance); - clip_offset.AddPaths(ScalePaths(paths, scale, error_code), jt, et); - if (error_code) return PathsD(); - Paths64 solution; - clip_offset.Execute(delta * scale, solution); - return ScalePaths(solution, 1 / scale, error_code); - } - template inline Path TranslatePath(const Path& path, T dx, T dy) { @@ -201,72 +169,6 @@ namespace Clipper2Lib { return TranslatePaths(paths, dx, dy); } - inline Paths64 RectClip(const Rect64& rect, const Paths64& paths) - { - if (rect.IsEmpty() || paths.empty()) return Paths64(); - RectClip64 rc(rect); - return rc.Execute(paths); - } - - inline Paths64 RectClip(const Rect64& rect, const Path64& path) - { - if (rect.IsEmpty() || path.empty()) return Paths64(); - RectClip64 rc(rect); - return rc.Execute(Paths64{ path }); - } - - inline PathsD RectClip(const RectD& rect, const PathsD& paths, int precision = 2) - { - if (rect.IsEmpty() || paths.empty()) return PathsD(); - int error_code = 0; - CheckPrecisionRange(precision, error_code); - if (error_code) return PathsD(); - const double scale = std::pow(10, precision); - Rect64 r = ScaleRect(rect, scale); - RectClip64 rc(r); - Paths64 pp = ScalePaths(paths, scale, error_code); - if (error_code) return PathsD(); // ie: error_code result is lost - return ScalePaths( - rc.Execute(pp), 1 / scale, error_code); - } - - inline PathsD RectClip(const RectD& rect, const PathD& path, int precision = 2) - { - return RectClip(rect, PathsD{ path }, precision); - } - - inline Paths64 RectClipLines(const Rect64& rect, const Paths64& lines) - { - if (rect.IsEmpty() || lines.empty()) return Paths64(); - RectClipLines64 rcl(rect); - return rcl.Execute(lines); - } - - inline Paths64 RectClipLines(const Rect64& rect, const Path64& line) - { - return RectClipLines(rect, Paths64{ line }); - } - - inline PathsD RectClipLines(const RectD& rect, const PathsD& lines, int precision = 2) - { - if (rect.IsEmpty() || lines.empty()) return PathsD(); - int error_code = 0; - CheckPrecisionRange(precision, error_code); - if (error_code) return PathsD(); - const double scale = std::pow(10, precision); - Rect64 r = ScaleRect(rect, scale); - RectClipLines64 rcl(r); - Paths64 p = ScalePaths(lines, scale, error_code); - if (error_code) return PathsD(); - p = rcl.Execute(p); - return ScalePaths(p, 1 / scale, error_code); - } - - inline PathsD RectClipLines(const RectD& rect, const PathD& line, int precision = 2) - { - return RectClipLines(rect, PathsD{ line }, precision); - } - namespace details { diff --git a/clipper2/include/clipper2/clipper.minkowski.h b/clipper2/include/clipper2/clipper.minkowski.h deleted file mode 100644 index a3ddcf86..00000000 --- a/clipper2/include/clipper2/clipper.minkowski.h +++ /dev/null @@ -1,120 +0,0 @@ -/******************************************************************************* -* Author : Angus Johnson * -* Date : 1 November 2023 * -* Website : http://www.angusj.com * -* Copyright : Angus Johnson 2010-2023 * -* Purpose : Minkowski Sum and Difference * -* License : http://www.boost.org/LICENSE_1_0.txt * -*******************************************************************************/ - -#ifndef CLIPPER_MINKOWSKI_H -#define CLIPPER_MINKOWSKI_H - -#include -#include -#include -#include "clipper2/clipper.core.h" - -namespace Clipper2Lib -{ - - namespace detail - { - inline Paths64 Minkowski(const Path64& pattern, const Path64& path, bool isSum, bool isClosed) - { - size_t delta = isClosed ? 0 : 1; - size_t patLen = pattern.size(), pathLen = path.size(); - if (patLen == 0 || pathLen == 0) return Paths64(); - Paths64 tmp; - tmp.reserve(pathLen); - - if (isSum) - { - for (const Point64& p : path) - { - Path64 path2(pattern.size()); - std::transform(pattern.cbegin(), pattern.cend(), - path2.begin(), [p](const Point64& pt2) {return p + pt2; }); - tmp.push_back(path2); - } - } - else - { - for (const Point64& p : path) - { - Path64 path2(pattern.size()); - std::transform(pattern.cbegin(), pattern.cend(), - path2.begin(), [p](const Point64& pt2) {return p - pt2; }); - tmp.push_back(path2); - } - } - - Paths64 result; - result.reserve((pathLen - delta) * patLen); - size_t g = isClosed ? pathLen - 1 : 0; - for (size_t h = patLen - 1, i = delta; i < pathLen; ++i) - { - for (size_t j = 0; j < patLen; j++) - { - Path64 quad; - quad.reserve(4); - { - quad.push_back(tmp[g][h]); - quad.push_back(tmp[i][h]); - quad.push_back(tmp[i][j]); - quad.push_back(tmp[g][j]); - }; - if (!IsPositive(quad)) - std::reverse(quad.begin(), quad.end()); - result.push_back(quad); - h = j; - } - g = i; - } - return result; - } - - inline Paths64 Union(const Paths64& subjects, FillRule fillrule) - { - Paths64 result; - Clipper64 clipper; - clipper.AddSubject(subjects); - clipper.Execute(ClipType::Union, fillrule, result); - return result; - } - - } // namespace internal - - inline Paths64 MinkowskiSum(const Path64& pattern, const Path64& path, bool isClosed) - { - return detail::Union(detail::Minkowski(pattern, path, true, isClosed), FillRule::NonZero); - } - - inline PathsD MinkowskiSum(const PathD& pattern, const PathD& path, bool isClosed, int decimalPlaces = 2) - { - int error_code = 0; - double scale = pow(10, decimalPlaces); - Path64 pat64 = ScalePath(pattern, scale, error_code); - Path64 path64 = ScalePath(path, scale, error_code); - Paths64 tmp = detail::Union(detail::Minkowski(pat64, path64, true, isClosed), FillRule::NonZero); - return ScalePaths(tmp, 1 / scale, error_code); - } - - inline Paths64 MinkowskiDiff(const Path64& pattern, const Path64& path, bool isClosed) - { - return detail::Union(detail::Minkowski(pattern, path, false, isClosed), FillRule::NonZero); - } - - inline PathsD MinkowskiDiff(const PathD& pattern, const PathD& path, bool isClosed, int decimalPlaces = 2) - { - int error_code = 0; - double scale = pow(10, decimalPlaces); - Path64 pat64 = ScalePath(pattern, scale, error_code); - Path64 path64 = ScalePath(path, scale, error_code); - Paths64 tmp = detail::Union(detail::Minkowski(pat64, path64, false, isClosed), FillRule::NonZero); - return ScalePaths(tmp, 1 / scale, error_code); - } - -} // Clipper2Lib namespace - -#endif // CLIPPER_MINKOWSKI_H diff --git a/clipper2/include/clipper2/clipper.offset.h b/clipper2/include/clipper2/clipper.offset.h deleted file mode 100644 index bb075a6d..00000000 --- a/clipper2/include/clipper2/clipper.offset.h +++ /dev/null @@ -1,124 +0,0 @@ -/******************************************************************************* -* Author : Angus Johnson * -* Date : 24 March 2024 * -* Website : http://www.angusj.com * -* Copyright : Angus Johnson 2010-2024 * -* Purpose : Path Offset (Inflate/Shrink) * -* License : http://www.boost.org/LICENSE_1_0.txt * -*******************************************************************************/ - -#ifndef CLIPPER_OFFSET_H_ -#define CLIPPER_OFFSET_H_ - -#include "clipper.core.h" -#include "clipper.engine.h" - -namespace Clipper2Lib { - -enum class JoinType { Square, Bevel, Round, Miter }; -//Square : Joins are 'squared' at exactly the offset distance (more complex code) -//Bevel : Similar to Square, but the offset distance varies with angle (simple code & faster) - -enum class EndType {Polygon, Joined, Butt, Square, Round}; -//Butt : offsets both sides of a path, with square blunt ends -//Square : offsets both sides of a path, with square extended ends -//Round : offsets both sides of a path, with round extended ends -//Joined : offsets both sides of a path, with joined ends -//Polygon: offsets only one side of a closed path - -typedef std::function DeltaCallback64; - -class ClipperOffset { -private: - - class Group { - public: - Paths64 paths_in; - std::optional lowest_path_idx{}; - bool is_reversed = false; - JoinType join_type; - EndType end_type; - Group(const Paths64& _paths, JoinType _join_type, EndType _end_type); - }; - - int error_code_ = 0; - double delta_ = 0.0; - double group_delta_ = 0.0; - double temp_lim_ = 0.0; - double steps_per_rad_ = 0.0; - double step_sin_ = 0.0; - double step_cos_ = 0.0; - PathD norms; - Path64 path_out; - Paths64* solution = nullptr; - PolyTree64* solution_tree = nullptr; - std::vector groups_; - JoinType join_type_ = JoinType::Bevel; - EndType end_type_ = EndType::Polygon; - - double miter_limit_ = 0.0; - double arc_tolerance_ = 0.0; - bool preserve_collinear_ = false; - bool reverse_solution_ = false; - -#ifdef USINGZ - ZCallback64 zCallback64_ = nullptr; - void ZCB(const Point64& bot1, const Point64& top1, - const Point64& bot2, const Point64& top2, Point64& ip); -#endif - DeltaCallback64 deltaCallback64_ = nullptr; - size_t CalcSolutionCapacity(); - bool CheckReverseOrientation(); - void DoBevel(const Path64& path, size_t j, size_t k); - void DoSquare(const Path64& path, size_t j, size_t k); - void DoMiter(const Path64& path, size_t j, size_t k, double cos_a); - void DoRound(const Path64& path, size_t j, size_t k, double angle); - void BuildNormals(const Path64& path); - void OffsetPolygon(Group& group, const Path64& path); - void OffsetOpenJoined(Group& group, const Path64& path); - void OffsetOpenPath(Group& group, const Path64& path); - void OffsetPoint(Group& group, const Path64& path, size_t j, size_t k); - void DoGroupOffset(Group &group); - void ExecuteInternal(double delta); -public: - explicit ClipperOffset(double miter_limit = 2.0, - double arc_tolerance = 0.0, - bool preserve_collinear = false, - bool reverse_solution = false) : - miter_limit_(miter_limit), arc_tolerance_(arc_tolerance), - preserve_collinear_(preserve_collinear), - reverse_solution_(reverse_solution) { }; - - ~ClipperOffset() { Clear(); }; - - int ErrorCode() const { return error_code_; }; - void AddPath(const Path64& path, JoinType jt_, EndType et_); - void AddPaths(const Paths64& paths, JoinType jt_, EndType et_); - void Clear() { groups_.clear(); norms.clear(); }; - - void Execute(double delta, Paths64& paths); - void Execute(double delta, PolyTree64& polytree); - void Execute(DeltaCallback64 delta_cb, Paths64& paths); - - double MiterLimit() const { return miter_limit_; } - void MiterLimit(double miter_limit) { miter_limit_ = miter_limit; } - - //ArcTolerance: needed for rounded offsets (See offset_triginometry2.svg) - double ArcTolerance() const { return arc_tolerance_; } - void ArcTolerance(double arc_tolerance) { arc_tolerance_ = arc_tolerance; } - - bool PreserveCollinear() const { return preserve_collinear_; } - void PreserveCollinear(bool preserve_collinear){preserve_collinear_ = preserve_collinear;} - - bool ReverseSolution() const { return reverse_solution_; } - void ReverseSolution(bool reverse_solution) {reverse_solution_ = reverse_solution;} - -#ifdef USINGZ - void SetZCallback(ZCallback64 cb) { zCallback64_ = cb; } -#endif - void SetDeltaCallback(DeltaCallback64 cb) { deltaCallback64_ = cb; } - -}; - -} -#endif /* CLIPPER_OFFSET_H_ */ diff --git a/clipper2/include/clipper2/clipper.rectclip.h b/clipper2/include/clipper2/clipper.rectclip.h deleted file mode 100644 index bfcfacf2..00000000 --- a/clipper2/include/clipper2/clipper.rectclip.h +++ /dev/null @@ -1,82 +0,0 @@ -/******************************************************************************* -* Author : Angus Johnson * -* Date : 5 July 2024 * -* Website : http://www.angusj.com * -* Copyright : Angus Johnson 2010-2024 * -* Purpose : FAST rectangular clipping * -* License : http://www.boost.org/LICENSE_1_0.txt * -*******************************************************************************/ - -#ifndef CLIPPER_RECTCLIP_H -#define CLIPPER_RECTCLIP_H - -#include -#include -#include -#include "clipper2/clipper.core.h" - -namespace Clipper2Lib -{ - - // Location: the order is important here, see StartLocsIsClockwise() - enum class Location { Left, Top, Right, Bottom, Inside }; - - class OutPt2; - typedef std::vector OutPt2List; - - class OutPt2 { - public: - Point64 pt; - size_t owner_idx = 0; - OutPt2List* edge = nullptr; - OutPt2* next = nullptr; - OutPt2* prev = nullptr; - }; - - //------------------------------------------------------------------------------ - // RectClip64 - //------------------------------------------------------------------------------ - - class RectClip64 { - private: - void ExecuteInternal(const Path64& path); - Path64 GetPath(OutPt2*& op); - protected: - const Rect64 rect_; - const Path64 rect_as_path_; - const Point64 rect_mp_; - Rect64 path_bounds_; - std::deque op_container_; - OutPt2List results_; // each path can be broken into multiples - OutPt2List edges_[8]; // clockwise and counter-clockwise - std::vector start_locs_; - void CheckEdges(); - void TidyEdges(size_t idx, OutPt2List& cw, OutPt2List& ccw); - void GetNextLocation(const Path64& path, - Location& loc, size_t& i, size_t highI); - OutPt2* Add(Point64 pt, bool start_new = false); - void AddCorner(Location prev, Location curr); - void AddCorner(Location& loc, bool isClockwise); - public: - explicit RectClip64(const Rect64& rect) : - rect_(rect), - rect_as_path_(rect.AsPath()), - rect_mp_(rect.MidPoint()) {} - Paths64 Execute(const Paths64& paths); - }; - - //------------------------------------------------------------------------------ - // RectClipLines64 - //------------------------------------------------------------------------------ - - class RectClipLines64 : public RectClip64 { - private: - void ExecuteInternal(const Path64& path); - Path64 GetPath(OutPt2*& op); - public: - explicit RectClipLines64(const Rect64& rect) : RectClip64(rect) {}; - Paths64 Execute(const Paths64& paths); - }; - -} // Clipper2Lib namespace -#endif // CLIPPER_RECTCLIP_H