GeomPP 0.4.0
See the version list below for details.
dotnet add package GeomPP --version 0.4.0
NuGet\Install-Package GeomPP -Version 0.4.0
<PackageReference Include="GeomPP" Version="0.4.0" />
<PackageVersion Include="GeomPP" Version="0.4.0" />
<PackageReference Include="GeomPP" />
paket add GeomPP --version 0.4.0
#r "nuget: GeomPP, 0.4.0"
#:package GeomPP@0.4.0
#addin nuget:?package=GeomPP&version=0.4.0
#tool nuget:?package=GeomPP&version=0.4.0
C# bindings for geompp, a C++20 geometry library.
Provides Point2D/3D, Vector2D/3D, Line2D/3D, Ray2D/3D, LineSegment2D/3D,
Polyline2D/3D, Triangle2D/3D, Polygon2D/3D, BBox2D/3D, Plane — with full
operator support, intersection queries, WKT serialization, and file I/O.
Built with C++/CLI for Windows x64. Targets both .NET 10 and .NET Framework 4.8.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0-windows7.0 is compatible. |
| .NET Framework | net48 is compatible. net481 was computed. |
-
.NETFramework 4.8
- No dependencies.
-
net10.0-windows7.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.17.3 | 97 | 8/15/2026 |
| 0.17.2 | 92 | 8/14/2026 |
| 0.16.2 | 87 | 8/6/2026 |
| 0.15.1 | 119 | 7/24/2026 |
| 0.14.0 | 104 | 7/21/2026 |
| 0.13.0 | 117 | 7/9/2026 |
| 0.12.0 | 103 | 7/8/2026 |
| 0.11.0 | 110 | 7/4/2026 |
| 0.10.1 | 124 | 6/23/2026 |
| 0.9.1 | 222 | 6/17/2026 |
| 0.8.2 | 117 | 5/18/2026 |
| 0.8.0 | 111 | 5/18/2026 |
| 0.7.0 | 104 | 5/6/2026 |
| 0.6.0 | 104 | 5/4/2026 |
| 0.5.0 | 103 | 5/1/2026 |
| 0.4.0 | 115 | 4/27/2026 |
| 0.1.2 | 124 | 4/13/2026 |
| 0.1.1 | 123 | 4/13/2026 |
| 0.1.0 | 125 | 4/9/2026 |
> C++ library — tagged `v0.4.0` · C# / NuGet — tagged `csharp-v0.4.0` · Python / PyPI — tagged `python-v0.4.0`
### Changed
**All packages**
- `LVSParser` renamed to `WktParser` everywhere: C++ class, header (`wkt_parser.hpp`), source (`wkt_parser.cpp`), C# wrapper (`WktParser.hpp/.cpp`), Python binding (`bind_wktparser.cpp`, exposed as `geompp.WktParser`), all CMakeLists, vcxproj files, tests, and documentation. The old name is gone entirely — update any call sites.
### Added
**C++ core**
- `GeometryCollection2D` / `GeometryCollection3D`: heterogeneous container holding any mix of 2D (or 3D) primitives. Supports `Add()`, `Get(index)`, `Size()`, `ToWkt()`, `FromWkt()`, `ToFile()`, `FromFile()`, `AlmostEquals()`, and `operator==`.
- `Polygon2D::Make(points, holes)`: new overload that accepts an outer ring and a list of hole rings. Validates that the outer ring is CCW and each hole is CW; throws on violation.
- `Polygon3D::Make(points, holes)`: same, additionally validates that outer ring and all hole rings are coplanar.
- `are_ccw(points)` / `are_cw(points)` (2D, declared in `point2d.hpp`): free functions returning `true` when the ordered point list has the specified winding.
- `are_coplanar(points)` / `are_ccw(points)` / `are_cw(points)` (3D, declared in `plane.hpp`): 3D winding and coplanarity checks on point lists.
- `WktParser::FromWkt(wkt)`: static method — parse any WKT string into a `ReturnSet` (already existed as `Get()`, renamed to `FromWkt()` for consistency with the serialization API).
- `WktParser::ToWkt(shape)`: static method — serialize a `ReturnSet` back to its WKT string; throws on `nullopt`.
**C# / NuGet**
- `Polygon2D.Make(array<Point2D^>^ points, array<array<Point2D^>^>^ holes)` exposed.
- `Polygon3D.Make(array<Point3D^>^ points, array<array<Point3D^>^>^ holes)` exposed.
**Python / PyPI**
- `GeometryCollection2D` and `GeometryCollection3D` exposed with full `add()`, `get()`, `size()`, WKT, file I/O, and equality support.
- `Polygon2D.make(points)` and `Polygon2D.make(points, holes)` exposed.
- `Polygon3D.make(points)` and `Polygon3D.make(points, holes)` exposed.
- `are_ccw(points)` / `are_cw(points)` exposed for `list[Point2D]`.
- `are_coplanar(points)` / `are_ccw(points)` / `are_cw(points)` exposed for `list[Point3D]`.
- `WktParser.from_wkt(wkt)` — parse a WKT string; returns a geometry object or `None`.
- `WktParser.to_wkt(shape)` — serialize any geometry object to its WKT string; raises on `None` or unsupported type.
### Tests
**C++ (`geompp_tests`)**
- `test_polygon2d.cpp`: added `WktWithHoles`, `WithHoles_Valid`, `WithHoles_PerimeterCW_Throws`, `WithHoles_HoleCCW_Throws`, `WithHoles_HoleTooFewPoints_Throws`.
- `test_polygon3d.cpp`: added same suite plus `WithHoles_NonCoplanar_Throws`.
- `test_utils.cpp`: added `AreCCW_2D`, `AreCoplanar_3D`, `AreCCW_3D`.
- `test_wkt_parser.cpp` (renamed from `test_lsv_parser.cpp`): existing `FromFile` test retained.
**Python (`geompp_python/tests`)**
- `TestWktParser` (renamed from `TestLVSParser`): added `test_get_returns_geometry`, `test_get_returns_none_on_unknown`, `test_to_wkt_point2d`, `test_to_wkt_linesegment2d`, `test_to_wkt_point3d`, `test_to_wkt_none_raises`, `test_to_wkt_roundtrip`, `test_to_wkt_unsupported_type_raises`.
- `TestPolygon2D`: added holes construction, CCW-outer throw, CW-hole throw, and too-few-points throw cases.
- `TestPolygon3D`: added same suite plus non-coplanar throw.
- `TestFreeFunctions`: added `are_ccw`/`are_cw` (2D), `are_coplanar`/`are_ccw`/`are_cw` (3D).
---