Skip to content
This repository has been archived by the owner on Feb 15, 2024. It is now read-only.
/ Clipper2 Public archive
forked from AngusJohnson/Clipper2

Polygon Clipping and Offsetting - C++, C# and Delphi

License

Notifications You must be signed in to change notification settings

lutz/Clipper2

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Clipper2

A Polygon Clipping and Offsetting library (in C++, C# & Delphi)

GitHub Actions C++ status C# License Nuget documentation

The Clipper2 library performs intersection, union, difference and XOR boolean operations on both simple and complex polygons. It also performs polygon offsetting. 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.

Compilers

C++: Requires C++17 (but could be modified to C++11 with only minor changes)
C#: The core library uses Standard Library 2.0 but the sample code uses .NET6
Delphi: Compiles with any version of Delphi back to Delphi 7.

Documentation

Extensive HTML documentation

Examples

      //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);

clipperB


Ports to other languages

Java: https://github.com/micycle1/Clipper2-java/
Kotlin: https://github.com/Monkey-Maestro/clipper2-kotlin
golang: https://github.com/epit3d/goclipper2

About

Polygon Clipping and Offsetting - C++, C# and Delphi

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 36.1%
  • Pascal 34.9%
  • C# 28.0%
  • Other 1.0%