polydera.trueform
0.9.0
See the version list below for details.
dotnet add package polydera.trueform --version 0.9.0
NuGet\Install-Package polydera.trueform -Version 0.9.0
<PackageReference Include="polydera.trueform" Version="0.9.0" />
<PackageVersion Include="polydera.trueform" Version="0.9.0" />
<PackageReference Include="polydera.trueform" />
paket add polydera.trueform --version 0.9.0
#r "nuget: polydera.trueform, 0.9.0"
#:package polydera.trueform@0.9.0
#addin nuget:?package=polydera.trueform&version=0.9.0
#tool nuget:?package=polydera.trueform&version=0.9.0
trueform — The STL for Geometry
Fast and exact mesh booleans, spatial queries, arrangements, registration, and remeshing. Composable algorithms on your data — zero-copy views, reusable spatial trees, first-class topology. Header-only C++17, parallel via oneTBB.
Read the article: The STL for Geometry — What the STL philosophy of separating algorithms from data looks like when applied to geometry.
polydera.com/trueform | Documentation | ▶ Try it live
Installation
Install-Package polydera.trueform
The package depends on inteltbb.devel.win, which is pulled automatically.
Requirements
- C++17 (
/std:c++17or later) - MSVC 19.14+
Quick Start
#include <trueform/trueform.hpp>
// Read meshes
auto mesh = tf::read_stl("surface.stl");
auto polygons = mesh.polygons();
// Spatial queries — build once, query many
tf::aabb_tree<int, float, 3> tree(polygons, tf::config_tree(4, 4));
auto form = polygons | tf::tag(tree);
auto [id, dist2, pt] = tf::neighbor_search(form, tf::make_point(1.f, 2.f, 3.f));
// Boolean union
auto [result, labels, face_labels] = tf::make_boolean(
polygons0, polygons1, tf::boolean_op::merge);
// Write result
tf::write_stl(result, "output.stl");
Benchmarks
| Operation | Input | Time | Speedup | Baseline | TrueForm |
|---|---|---|---|---|---|
| Boolean Union | 2 × 1M | 28 ms | 6× | MeshLib (int32 exact + SoS) | exact predicates, canonical topology |
| Mesh–Mesh Curves | 2 × 1M | 7 ms | 233× | CGAL Exact_predicates_inexact_constructions_kernel |
exact predicates, canonical topology |
| ICP Registration | 1M | 7.7 ms | 93× | libigl | AABB tree, random subsampling |
| Self-Intersection | 1M | 78 ms | 37× | libigl EPECK (GMP/MPFR) | exact predicates, canonical topology |
| Isocontours | 1M, 16 cuts | 3.8 ms | 38× | VTK vtkContourFilter |
exact predicates |
| Connected Components | 1M | 15 ms | 10× | CGAL | parallel union-find |
| Boundary Paths | 1M | 12 ms | 11× | CGAL | Hierholzer's algorithm |
| k-NN Query | 500K | 1.7 µs | 3× | nanoflann k-d tree | AABB tree |
| Mesh–Mesh Distance | 2 × 1M | 0.2 ms | 2× | Coal (FCL) OBBRSS |
OBBRSS tree |
| Decimation (50%) | 1M | 72 ms | 50× | CGAL edge_collapse |
parallel partitioned collapse |
| Principal Curvatures | 1M | 25 ms | 55× | libigl | parallel k-ring quadric fitting |
Apple M4 Max, 16 threads, Clang -O3 -march=native. Full methodology
Documentation
- Getting Started — Installation and first steps
- Modules — Primitives, trees, topology, booleans
- Examples — Workflows and library comparisons
Also available for Python and TypeScript.
License
Commercial license required. Contact info@polydera.com.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| native | native is compatible. |
-
- inteltbb.devel.win (>= 2022.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.