A Polygon Clipping, Offsetting and Triangulation library (in C++, C# & Delphi)
The Clipper2 library performs intersection, union, difference and XOR boolean operations on both simple and complex polygons. It also performs polygon offsetting, and Constrained Delaunay Triangulation. This is a major update of my original Clipper library that was written over 10 years ago. That library I'm now calling Clipper1, and while it still works very well, Clipper2 is better in just about every way.
Clipper2 can be compiled using either C++, or C#, or Delphi Pascal. The library can also be accessed from other programming languages by dynamically linking to exported functions in the C++ compiled Clipper2 library. (Since the C++ compiled code is measurably faster, C# and Delphi developers may also prefer this approach in applications where the library's performance is critical.)
| Lang. | Requirements |
|---|---|
| C++: | Requires C++17, or |
| C#: | The library uses Standard Library 2.0 but the sample code uses .NET6, or |
| Delphi: | Compiles with any version of Delphi from version 7 to current. |
Clipping
//C++
Paths64 subject, clip, solution;
subject.push_back(MakePath({100, 50, 10, 79, 65, 2, 65, 98, 10, 21}));
clip.push_back(MakePath({98, 63, 4, 68, 77, 8, 52, 100, 19, 12}));
solution = Intersect(subject, clip, FillRule::NonZero);
//C#
Paths64 subj = new Paths64();
Paths64 clip = new Paths64();
subj.Add(Clipper.MakePath(new int[] { 100, 50, 10, 79, 65, 2, 65, 98, 10, 21 }));
clip.Add(Clipper.MakePath(new int[] { 98, 63, 4, 68, 77, 8, 52, 100, 19, 12 }));
Paths64 solution = Clipper.Intersect(subj, clip, FillRule.NonZero);
//Delphi
var
subject, clip, solution: TPaths64;
begin
SetLength(subject, 1);
subject[0] := MakePath([100, 50, 10, 79, 65, 2, 65, 98, 10, 21]);
SetLength(clip, 1);
clip[0] := MakePath([98, 63, 4, 68, 77, 8, 52, 100, 19, 12]);
solution := Intersect( subject, clip, frNonZero);
Constrained Delaunay Triangulation
C++
Clipper2/CPP/Examples/Triangulation/Triangulation.cpp
Lines 247 to 249 in 01bacc0
C#
Clipper2/CSharp/Clipper2Lib.Examples/Triangulation/Main.cs
Lines 257 to 261 in 01bacc0
Delphi
Clipper2/Delphi/Examples/Triangulation/ClipperTri.dpr
Lines 216 to 224 in 0a9f445