# Clipper2
**Repository Path**: stoneold/Clipper2
## Basic Information
- **Project Name**: Clipper2
- **Description**: 一个免费的多边形求交库,效率极高。
可以快速完成各类复杂的多边形求交计算
https://github.com/AngusJohnson/Clipper2
- **Primary Language**: C++
- **License**: BSL-1.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2024-07-19
- **Last Updated**: 2025-04-12
## Categories & Tags
**Categories**: Uncategorized
**Tags**: 几何
## README
# Clipper2
### A Polygon Clipping and Offsetting library (in C++, C# & Delphi)
[](https://github.com/AngusJohnson/Clipper2/actions/workflows/actions_cpp.yml) [](https://github.com/AngusJohnson/Clipper2/actions/workflows/actions_csharp.yml) [](https://www.boost.org/LICENSE_1_0.txt)
[](https://www.nuget.org/packages/Clipper2)
[](https://www.angusj.com/clipper2/Docs/Overview.htm)
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](https://www.angusj.com/clipper2/Docs/Changes.htm) 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](https://github.com/AngusJohnson/Clipper2/tree/main/DLL). (Since the C++ compiled code is [measurably](https://www.angusj.com/clipper2/Docs/Changes.htm) faster, C# and Delphi developers may also prefer this approach in applications where the library's performance is critical.)
| Lang. | Requirements |
| --- | --- |
| [**C++:**](https://github.com/AngusJohnson/Clipper2/tree/main/CPP) | Requires C++17 (could be modified to C++11 with relatively minor changes), **or**|
| [**C#:**](https://github.com/AngusJohnson/Clipper2/tree/main/CSharp) | The library uses Standard Library 2.0 but the sample code uses .NET6, **or**|
| [**Delphi:**](https://github.com/AngusJohnson/Clipper2/tree/main/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);