Update for Clipper 1.2

This commit is contained in:
Seth Hillbrand 2023-03-16 13:33:58 -07:00
parent 00d1e01e12
commit e758391a23
5 changed files with 20 additions and 28 deletions

View File

@ -1397,7 +1397,7 @@ private:
void importPaths( Clipper2Lib::Paths64& paths, void importPaths( Clipper2Lib::Paths64& paths,
const std::vector<CLIPPER_Z_VALUE>& aZValueBuffer, const std::vector<CLIPPER_Z_VALUE>& aZValueBuffer,
const std::vector<SHAPE_ARC>& aArcBuffe ); const std::vector<SHAPE_ARC>& aArcBuffe );
void importPolyPath( Clipper2Lib::PolyPath64* aPolyPath, void importPolyPath( const std::unique_ptr<Clipper2Lib::PolyPath64>& aPolyPath,
const std::vector<CLIPPER_Z_VALUE>& aZValueBuffer, const std::vector<CLIPPER_Z_VALUE>& aZValueBuffer,
const std::vector<SHAPE_ARC>& aArcBuffer ); const std::vector<SHAPE_ARC>& aArcBuffer );

View File

@ -1070,17 +1070,9 @@ void SHAPE_POLY_SET::inflate2( int aAmount, int aCircleSegCount, CORNER_STRATEGY
c.ArcTolerance( std::abs( aAmount ) * coeff ); c.ArcTolerance( std::abs( aAmount ) * coeff );
c.MiterLimit( miterLimit ); c.MiterLimit( miterLimit );
c.MergeGroups( true );
Paths64 solution = c.Execute( aAmount );
// We get paths back but we need the tree to assign the holes to the correct
// outlines
Clipper64 c2;
PolyTree64 tree; PolyTree64 tree;
c2.PreserveCollinear = false; c.Execute( aAmount, tree );
c2.ReverseSolution = false;
c2.AddSubject( solution );
c2.Execute(ClipType::Union, FillRule::Positive, tree);
importTree( tree, zValues, arcBuffer ); importTree( tree, zValues, arcBuffer );
tree.Clear(); tree.Clear();
@ -1120,7 +1112,7 @@ void SHAPE_POLY_SET::importTree( ClipperLib::PolyTree* tree,
} }
void SHAPE_POLY_SET::importPolyPath( Clipper2Lib::PolyPath64* aPolyPath, void SHAPE_POLY_SET::importPolyPath( const std::unique_ptr<Clipper2Lib::PolyPath64>& aPolyPath,
const std::vector<CLIPPER_Z_VALUE>& aZValueBuffer, const std::vector<CLIPPER_Z_VALUE>& aZValueBuffer,
const std::vector<SHAPE_ARC>& aArcBuffer ) const std::vector<SHAPE_ARC>& aArcBuffer )
{ {
@ -1130,11 +1122,11 @@ void SHAPE_POLY_SET::importPolyPath( Clipper2Lib::PolyPath64* aPolyPa
paths.reserve( aPolyPath->Count() + 1 ); paths.reserve( aPolyPath->Count() + 1 );
paths.emplace_back( aPolyPath->Polygon(), aZValueBuffer, aArcBuffer ); paths.emplace_back( aPolyPath->Polygon(), aZValueBuffer, aArcBuffer );
for( Clipper2Lib::PolyPath64* child : *aPolyPath ) for( const std::unique_ptr<Clipper2Lib::PolyPath64>& child : *aPolyPath )
{ {
paths.emplace_back( child->Polygon(), aZValueBuffer, aArcBuffer ); paths.emplace_back( child->Polygon(), aZValueBuffer, aArcBuffer );
for( Clipper2Lib::PolyPath64* grandchild : *child ) for( const std::unique_ptr<Clipper2Lib::PolyPath64>& grandchild : *child )
importPolyPath( grandchild, aZValueBuffer, aArcBuffer ); importPolyPath( grandchild, aZValueBuffer, aArcBuffer );
} }
@ -1149,7 +1141,7 @@ void SHAPE_POLY_SET::importTree( Clipper2Lib::PolyTree64& tree,
{ {
m_polys.clear(); m_polys.clear();
for( Clipper2Lib::PolyPath64* n : tree ) for( const std::unique_ptr<Clipper2Lib::PolyPath64>& n : tree )
importPolyPath( n, aZValueBuffer, aArcBuffer ); importPolyPath( n, aZValueBuffer, aArcBuffer );
} }

View File

@ -29,7 +29,7 @@ namespace Clipper2Lib
public: public:
explicit Clipper2Exception(const char* description) : explicit Clipper2Exception(const char* description) :
m_descr(description) {} m_descr(description) {}
virtual const char* what() const throw() { return m_descr.c_str(); } virtual const char* what() const throw() override { return m_descr.c_str(); }
private: private:
std::string m_descr; std::string m_descr;
}; };

View File

@ -197,7 +197,7 @@ namespace Clipper2Lib {
return result; return result;
} }
inline Paths64 RectClip(const Rect64& rect, inline Paths64 ClipRect(const Rect64& rect,
const Paths64& paths, bool convex_only = false) const Paths64& paths, bool convex_only = false)
{ {
if (rect.IsEmpty() || paths.empty()) return Paths64(); if (rect.IsEmpty() || paths.empty()) return Paths64();
@ -205,7 +205,7 @@ namespace Clipper2Lib {
return rc.Execute(paths, convex_only); return rc.Execute(paths, convex_only);
} }
inline Paths64 RectClip(const Rect64& rect, inline Paths64 ClipRect(const Rect64& rect,
const Path64& path, bool convex_only = false) const Path64& path, bool convex_only = false)
{ {
if (rect.IsEmpty() || path.empty()) return Paths64(); if (rect.IsEmpty() || path.empty()) return Paths64();
@ -213,7 +213,7 @@ namespace Clipper2Lib {
return rc.Execute(Paths64{ path }, convex_only); return rc.Execute(Paths64{ path }, convex_only);
} }
inline PathsD RectClip(const RectD& rect, inline PathsD ClipRect(const RectD& rect,
const PathsD& paths, bool convex_only = false, int precision = 2) const PathsD& paths, bool convex_only = false, int precision = 2)
{ {
if (rect.IsEmpty() || paths.empty()) return PathsD(); if (rect.IsEmpty() || paths.empty()) return PathsD();
@ -229,30 +229,30 @@ namespace Clipper2Lib {
rc.Execute(pp, convex_only), 1 / scale, error_code); rc.Execute(pp, convex_only), 1 / scale, error_code);
} }
inline PathsD RectClip(const RectD& rect, inline PathsD ClipRect(const RectD& rect,
const PathD& path, bool convex_only = false, int precision = 2) const PathD& path, bool convex_only = false, int precision = 2)
{ {
return RectClip(rect, PathsD{ path }, convex_only, precision); return ClipRect(rect, PathsD{ path }, convex_only, precision);
} }
inline Paths64 RectClipLines(const Rect64& rect, const Paths64& lines) inline Paths64 ClipRectLines(const Rect64& rect, const Paths64& lines)
{ {
if (rect.IsEmpty() || lines.empty()) return Paths64(); if (rect.IsEmpty() || lines.empty()) return Paths64();
class RectClipLines rcl(rect); class RectClipLines rcl(rect);
return rcl.Execute(lines); return rcl.Execute(lines);
} }
inline Paths64 RectClipLines(const Rect64& rect, const Path64& line) inline Paths64 ClipRectLines(const Rect64& rect, const Path64& line)
{ {
return RectClipLines(rect, Paths64{ line }); return ClipRectLines(rect, Paths64{ line });
} }
inline PathsD RectClipLines(const RectD& rect, const PathD& line, int precision = 2) inline PathsD ClipRectLines(const RectD& rect, const PathD& line, int precision = 2)
{ {
return RectClip(rect, PathsD{ line }, precision); return ClipRect(rect, PathsD{ line }, precision);
} }
inline PathsD RectClipLines(const RectD& rect, const PathsD& lines, int precision = 2) inline PathsD ClipRectLines(const RectD& rect, const PathsD& lines, int precision = 2)
{ {
if (rect.IsEmpty() || lines.empty()) return PathsD(); if (rect.IsEmpty() || lines.empty()) return PathsD();
int error_code = 0; int error_code = 0;

View File

@ -36,8 +36,8 @@ private:
bool is_reversed = false; bool is_reversed = false;
JoinType join_type; JoinType join_type;
EndType end_type; EndType end_type;
Group(const Paths64& paths, JoinType join_type, EndType end_type) : Group(const Paths64& paths, JoinType _join_type, EndType _end_type) :
paths_in(paths), join_type(join_type), end_type(end_type) {} paths_in(paths), join_type(_join_type), end_type(_end_type) {}
}; };
int error_code_ = 0; int error_code_ = 0;