v2.2.1
This is another significant update, bringing 2D support, lossless roundtrip of Manifolds through glTF, Python bindings published on PyPI, and a whole new triangulator that fixes lots of geometric edge cases in the Boolean. And of course many bug fixes and performance improvements - a huge thank you to all the contributors!
New Features
- New 2D subsystem,
CrossSection
, powered by Clipper2. #341, #376 (@geoffder) - Added
Mirror
transform. #354 (@geoffder) - Improved input error handling. #385 (@geoffder)
- Added a
Merge
helper to turn nearly-manifold input meshes into Manifolds. #394, #481 (@elalish) - Added
SetProperties
for computing arbitrary vertex properties. #433 (@elalish) - Replaced
GetCurvature
withCalculateCurvature
(breaking change). #448 (@elalish) - Allow partial revolutions. #455 (@cartesian-theatrics)
- Added convex hull ops. #486, #489 (@geoffder)
Bindings
- Updated C bindings. #353, #382, #434 (@geoffder)
- Fix Vite build. #371 (@jirihon)
- Updated JS bindings. #375, #393, #440 (@elalish, @jirihon, @geoffder)
- Added Python bindings. #378, #445, #459, #488, #492, #558 (@pca006132, @johnnybigert, @axel-angel, @elalish, @zalo)
- Built a glTF manifold extension with JS I/O. #420 (@elalish)
- Thread-safety for SDF C-binding. #427 (@harmanpa)
- Switch to nanobind for python - API now requires numpy. #537 (@pca006132)
Bug Fixes
- Make cache thread-safe. #357 (@pca006132)
- Fix flipped triangles in
Compose
. #404 (@pca006132) - Added global coplanarity check. #408 (@elalish)
- Fixed
Warp
simplification. #416 (@elalish) - Fixed
Compose
index error. #430 (@pca006132) - Fixed decimator seg-fault. #447 (@elalish, @Loosetooth)
- Workaround for Assimp 3MF export. #454 (@geoffder)
- Fixed WASM seg-fault. #474 (@elalish)
- Fixed conflicting numbers of properties. #480 (@elalish)
- Fixed a crash on a particular self-intersected model. #501 (@stephomi)
- Fixed precision calculation. #508 (@elalish)
- Fixed decimator odd number of halfedges. #534 (@pca006132)
- Fixed aliasing in
SparseIndices
. #540 (@pca006132) - Improved determinism. #550 (@pca006132)
- Fixed incorrect properties output from Boolean. #587 (@elalish)
- Fixed NaN halfedge tangents. #588 (@elalish)
- Fixed a variety of geometrically incorrect complex Boolean results. This all comes down to our polygon triangulator, which had grown increasingly complex. I finally decided to pull the plug and start over with a new algorithm. It is now simpler and significantly more robust. The test suite was also expanded considerably. Developing this new algorithm was the main driver pushing this release to be a few months later than intended. #564 (@elalish)
Performance Improvements
- Lazy transformations for CrossSection. #355 (@geoffder)
- Early simplification of op tree. #368 (@ochafik)
- Parallelize some CSG ops. #381 (@pca006132)
- Doubled the speed of some ops by using hash tables. #484 (@stephomi)
- Improve decimator loops. #483 (@pca006132)
- Optimize sorting. #493, #494 (@stephomi)
- Improved parallelization. #503, #522 (@pca006132)
- Removed OMP and CUDA backends to focus on TBB. #525, #531 (@pca006132)
- Replaced graphlite with union-find. #569 (@pca006132)
Build/CI Updates
- Formatting checks for more languages. #441 (@elalish)
- Improved dependency resolution. #523, #559 (@pca006132)
- Allow macOS 10.13 building. #577 (@pca006132)
Examples
- Added a
convertFile
utility. #407 (@elalish) - Built make-manifold page to test
Merge
andEXT_manifold
. #428 (@elalish) - Fixed CGAL perf test. #575 (@sloriot)