Thanks to visit codestin.com
Credit goes to github.com

Skip to content

nomike/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

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 (could be modified to C++11 with relatively minor changes), 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.

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

lang. link
WASM https://github.com/ErikSom/Clipper2-WASM/
Java https://github.com/micycle1/Clipper2-java/
Kotlin https://github.com/Monkey-Maestro/clipper2-kotlin
golang https://github.com/epit3d/goclipper2
Lua https://github.com/Ark223/Clipper2-Lua

Installation

Debian/Ubuntu Packages

Clipper2 can be built and installed as Debian packages:

# Build the packages
dpkg-buildpackage -us -uc

# Install the packages
sudo dpkg -i ../libclipper2-1_*.deb ../libclipper2-dev_*.deb

Available packages:

  • libclipper2-1 - Runtime shared library
  • libclipper2-dev - Development headers and CMake integration

Using in your project:

With CMake:

find_package(Clipper2 REQUIRED)
target_link_libraries(your_target Clipper2::Clipper2)

With pkg-config:

g++ -o myapp myapp.cpp $(pkg-config --cflags --libs Clipper2)

Both Clipper2 and Clipper2Z (with Z-coordinate support) libraries are included.

About

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

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C++ 37.2%
  • Pascal 31.3%
  • C# 30.2%
  • CMake 1.2%
  • C 0.1%