Skip to content

SmartBuildingDesign/Clipper2

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

830 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Clipper2

A Polygon Clipping, Offsetting and Triangulation 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, and Constrained Delaunay Triangulation. This is a major update of my original Clipper library that was written about 15 years ago. That library I'm now calling Clipper1, and while it still works very well, Clipper2 is just better.

- CAUTION: The triangulation code is buggy and I regret releasing it when I did.
- I'm working on fixes but these may still be weeks away. Sorry.

Installation

To use the library, it must be created as a submodule in git within the path of a project:

git submodule add https://github.com/SmartBuildingDesign/Clipper2.git lib/clipper2

This will create the clipper2 folder inside lib. Then, within CMakeLists.txt:

import_library(lib/clipper2/CPP)
target_link_libraries(${PROJECT_NAME} Clipper2)

Compilers

Clipper2 can be compiled using any one of three supported programming languages: C++, or C#, or Delphi Pascal. The library can also be accessed from other languages by dynamically linking to exported functions in the C++ compiled Clipper2 library. (The C++ compiled code is measurably faster so, where performance is critical, even C# and Delphi developers may prefer this approach in application development.)

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.

Documentation

Extensive HTML documentation

Examples

Clipping

C++ https://github.com/AngusJohnson/Clipper2/blob/fa7add77364eb3877dd1b8caf9b3cbd5486347f6/CPP/Examples/SimpleClipping/SimpleClipping.cpp#L29-L34
C# https://github.com/AngusJohnson/Clipper2/blob/fa7add77364eb3877dd1b8caf9b3cbd5486347f6/CSharp/Clipper2Lib.Examples/ConsoleDemo/Main.cs#L112-L116
Delphi https://github.com/AngusJohnson/Clipper2/blob/fa7add77364eb3877dd1b8caf9b3cbd5486347f6/Delphi/Examples/Example1/Example1.dpr#L21-L26

clipperB

Inflating (aka Offsetting)

C++ https://github.com/AngusJohnson/Clipper2/blob/fa7add77364eb3877dd1b8caf9b3cbd5486347f6/CPP/Examples/Inflate/Inflate.cpp#L36-L47
C# https://github.com/AngusJohnson/Clipper2/blob/fa7add77364eb3877dd1b8caf9b3cbd5486347f6/CSharp/Clipper2Lib.Examples/InflateDemo/Main.cs#L89-L100
Delphi https://github.com/AngusJohnson/Clipper2/blob/fa7add77364eb3877dd1b8caf9b3cbd5486347f6/Delphi/Examples/Example2/Example2.dpr#L20-L31

rabbit rabbit_offset

Constrained Delaunay Triangulation

C++ https://github.com/AngusJohnson/Clipper2/blob/fa7add77364eb3877dd1b8caf9b3cbd5486347f6/CPP/Examples/Triangulation/Triangulation.cpp#L135-L138
C# https://github.com/AngusJohnson/Clipper2/blob/fa7add77364eb3877dd1b8caf9b3cbd5486347f6/CSharp/Clipper2Lib.Examples/Triangulation/Main.cs#L110-L115
Delphi https://github.com/AngusJohnson/Clipper2/blob/fa7add77364eb3877dd1b8caf9b3cbd5486347f6/Delphi/Examples/Triangulation/ClipperTri.dpr#L28-L33

coral3 coral3t

C++ https://github.com/AngusJohnson/Clipper2/blob/2970649befb89af85e2132e5242a7d6926cbfa11/CPP/Examples/UsingZ/UsingZ.cpp#L173-L184

coral3_t2


Ports to other languages

lang. link
golang https://github.com/epit3d/goclipper2
Haxe https://github.com/jeremyfa/Clipper2/tree/main/Haxe
Java https://github.com/micycle1/Clipper2-java/
Kotlin https://github.com/Monkey-Maestro/clipper2-kotlin
Lua https://github.com/Ark223/Clipper2-Lua
Rust https://github.com/larsbrubaker/clipper2-rust
Swift https://github.com/zyunlongz/clipper2-swift
TypeScript https://github.com/countertype/clipper2-ts
WASM https://github.com/ErikSom/Clipper2-WASM/

About

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

Resources

License

Stars

Watchers

Forks

Contributors

Languages

  • C++ 37.1%
  • Pascal 33.0%
  • C# 28.6%
  • CMake 1.2%
  • C 0.1%