Releases: elalish/manifold
v3.0.0
This is a huge release! We've packed in all the requested breaking changes to put us on a solid path of API stability going forward. We have removed all of our required dependencies (no more Thrust or GLM!) and dramatically simplified our directory structure and CMake. We have upgraded internally to double precision and added MeshGL64
for those who need to access it. And we have simplified and improved the API in many ways and added a few powerful new features. Please check out our new and improved C++ and TypeScript docs pages!
Breaking Changes
- Use
size_t
instead ofint
across our API, @pca006132 in #833 - Made
CrossSection
(and Clipper2 dependency) optional, @elalish in #850 - Removed Thrust dependency, use optional TBB instead, @elalish, @pca006132 in #852, #856, #857
- Moved
LevelSet()
in as a static member ofManifold
, @elalish in #876, #894 - Upgraded from single to double precision, @pca006132 in #895
- Simplify directory structure, @pca006132, @starseeker in #918, #961
- Remove property tolerance, @elalish in #935
- Remove
Mesh
, @elalish in #950 - Overhaul our CMake, @starseeker in #961, #965, #967, #980, #990, #1005
- Replace GLM with linalg - down another dependency, @elalish in #984
- Separate coplanarity from faceID, @elalish in #991
- Split
Precision
intoEpsilon
andTolerance
, @pca006132, @elalish in #997, #1008, #1007 - Switched property indexing from vector to scalar, @elalish in #1016
- Replace
GetProperties()
withVolume()
andSurfaceArea()
, @elalish in #1022 - SDF boundary cleanup, @elalish in #1037
- Disable exceptions by default, @elalish in #1044
New Features
- SDF interpolation, @elalish in #866
- Add
MeshGL64
, @pca006132 in #927, #1038 - Add
RefineToTolerance()
, @elalish in #938 - Add
SetTolerance()
, @pca006132 in #997
Bindings
- Fix missing 'this' for property access in wasm bindings, @dsafa in #914
- wasm: fix
CrossSection
slice and project bindings, @neilpa in #930 - Expose
Quality::ResetToDefaults()
via C bindings, @NickUfer in #964 - Wasm: update
CrossSection.toPolygons()
return value to match type, @dsafa in #963 - Expose allocation functions via C bindings, @NickUfer in #968
- Fix python binding, @pca006132 in #987
- Fixed memory leak in C bindings, @pca006132 in #1018
- Added some missing C and JS bindings, @elalish in #1023
- Added C bindings for
Triangulate()
, @james-bern in #1034
Bug Fixes
- Triangulation fix, @elalish in #850
- Propagate errors, @pca006132 in #940
- Removed
RotateUp
anduint
, @elalish in #1000 - Fix data races, @pca006132 in #1019
- Fix properties regression, @elalish in #1051
Performance Improvements
- Normal calculation optimization, @pca006132 in #934
- Removed face from halfedge, @pca006132 in #939
- Collider optimization, @pca006132 in #978
- Removed deterministic param, @elalish in #1033
- Free temporary vectors earlier, @pca006132 in #1047
Build/CI Updates
- Avoid Wundef trigger, @starseeker in #861
- Update to emscripten 3.1.61, @elalish in #860
- Fix debug mode msvc build error, @pca006132 in #863
- Fix shadowing warning, @elalish in #867
- Rename
operator""_z
to_uz
, @BenFrantzDale in #869 - Make collider header-only, @pca006132 in #871
- Improve our CMake, @cjmayo in #880, #888, #899, #946, #948, #1002, #1029
- C bindings are required to build Python package, @jonathanhogg in #883
- Remove QuickHull dependency, @Kushal-Shah-03 (through GSoC) in #881, #875, #893, #904, #908
- Add *.pc file for easier use in non-cmake environments, @hzeller in #901
- Enable MeshIO/MANIFOLD_EXPORT in flake, @reinux in #912
- Make cross_section an installable library, @hzeller in #915
- Fix
test-{cmake,pkgconfig}.sh
to create, not append, to test files, @hzeller in #919 - Use mxe to cross compile to windows, @pca006132 in #924
- Fix deployment, @elalish in #937
- Cleanup, @wtholliday in #954, #955, #956, #985
- Use nanobind builtin stubgen, @pca006132 in #949
- Format cmake files, @pca006132 in #975
- Remove CGAL comparisons, @elalish in #1009
- Fix atomic exchange template deduction, @pca006132 in #1035
- Remove OneDPL, @pca006132 in #1042
- Manifold CMake alias, @pca006132 in #1049
- Provide a numeric version number to compare against, @hzeller, @pca006132 in #1054, #1055
Tests
- Fixed test flake, @cjmayo in #848
- Fix hull_test
isMeshConvex()
vertices check, @cjmayo in #898 - Use custom file format for polygon tests, @pca006132 in #913
- Define a test for simple offset booleans, @starseeker in #998
Documentation
- Update README, @cjmayo, @elalish in #892, #920, #1015, #1025
- Implemented typedoc documentation for WASM bindings, @msantic in #907
- Doxygen updates, @elalish in #1014, #1020, #1043
New Contributors
- @BenFrantzDale made their first contribution in #869
- @jonathanhogg made their first contribution in #883
- @Kushal-Shah-03 made their first contribution in #875
- @hzeller made their first contribution in #901
- @reinux made their first contribution in #912
- @dsafa made their first contribution in #914
- @msantic made their first contribution in #907
- @neilpa made their first contribution in #930
- @wtholliday made their first contribution in #954
- @NickUfer made their first contribution in #964
- @james-bern made their first contribution in #1034
Full Changelog: v2.5.1...v3.0.0
v2.5.1
v2.5.0
New Features
- Added MinGap, #765 (@mleleszi)
- Added CalculateNormals and SmoothOut, #771 (@elalish)
- Added SmoothByNormals, #776 (@elalish)
- Smoothing now works on quads too, #793 (@elalish)
Bindings
- Added context object to C-bindings for SetProperties and Warp, #795 (@harmanpa)
- Fixed JS bindings for split, splitByPlane, and rotate, #811 (@errendir)
- Added Merge to C-bindings, #820 (@harmanpa)
Bug Fixes
- Fixed lost properties in Decompose, #794 (@harmanpa)
- Various smoothing improvements and fixes, #796, #801, #821, #828, #835 (@elalish)
- Pulled in upstream fixes in Clipper, #817 (@pca006132)
- Triangulator fixes & tests, #824, #832, #834 (@kintel, @elalish)
Performance Improvements
- Added convex polygon triangulation fast path, #829 (@elalish)
- Triangulator O(n^2) => O(nlogn) via collider, #830 (@elalish)
Build/CI Updates
- Fixed GLM install, #782 (@pca006132)
- Split up test files, #792, #800, #826 (@dasoya, @elalish)
- Fixed Clipper import for Windows, #815 (@imciner2)
- Update CI to include GCC 14, #816 (@cjmayo)
- Update GLM to 1.0.1, #819 (@cjmayo)
- Include submodules in release package, #825 (@cjmayo)
Documentation
- Pointer to Java bindings in README, #769 (@cartesian-theatrics)
- Updated web examples to TS and convert our Three example to show material mapping, #805, #806, #807 (@elalish)
ManifoldCAD.org
v2.4.5
v2.4.0
New Features
Bindings
- Updated Python bindings, #692, #700, #707 (@briansturgill)
- Fixed nanobind, #699 (@pca006132)
- Added Merge to Python bindings, #739 (@wrongbad)
Bug Fixes
- Fixed crash on objects near float max dimensions, #714 (@elalish)
- Fix GLM for 1.0, #721 (@cjmayo)
- Fixed 2D hull, #730, #732 (@briansturgill)
- 64-bit indexing of collider pairs, #742 (@pca006132)
Performance Improvements
- Faster Cube constructor, #717 (@pca006132)
- Faster triangulation on some compilers, #718, #722 (@pca006132)
Build/CI Updates
- Separate CMake modules, Clipper2 can be system-supplied, #696, #709, #716, #747 (@pca006132)
- Allow local Python package build/install, #704, #725 (@cjmayo)
- Fix gen-docs warnings, #724 (@cjmayo)
- Install headers into manifold subdirectory, #729 (@cjmayo)
- Test windows Python build on CI, #743 (@pca006132)
Documentation
- Fixed Doxygen link, #746 (@pca006132)
- Added Manifold docs about the use of vert properties and mesh relations, #755 (@elalish)
ManifoldCAD.org
v2.3.1
v2.3.0
New Features
- Added
Project
function for 3D -> 2D. #638 (@elalish) - Added
Slice
function for 3D -> 2D. #644 (@elalish)
Bindings
- Add missing parameters to Python bindings. #646, #647 (@wrongbad)
- Updated Python bindings to use numpy universally. #650, #656 (@wrongbad)
Bug Fixes
- Spec-compliant 3MF output for ManifoldCAD.org. #626, #627 (@pca006132)
- Fixed a couple of triangulator errors. #633 (@elalish)
- Improved our precision calculations, fixed collider. #635 (@elalish)
- Switched the order of rotation and scale in
Extrude
to match OpenSCAD. #642 (@pca006132) - Make
Warp
no longer simplify. #677 (@elalish) - Fixed
Revolve
. #682, #684 (@elalish)
Performance Improvements
Build/CI Updates
- Cleanup warnings, improved Tracy support. #640 (@pca006132)
- Added a formatting script. #660 (@pca006132)
- Build Python docs automatically. #665 (@wrongbad)
Examples
- Updated tetrahedron puzzle example. #625 (@elalish)
- Added a Python Colab Example, functionally akin to ManifoldCAD.org. #648 (@elalish)
ManifoldCAD.org
- Added glTF animation support. #624, #637 (@elalish)
- Updated glTF export for official EXT_mesh_manifold extension. #630 (@elalish)
- Enable hash params to point a URL directly to a particular example. #643 (@pca006132)
v2.2.2
Bug Fixes
- Fixed CMake problems. #591, #595 (@pca006132)
- Fixed Python
split
binding. #593 (@zalo) - Fixed JS GLB validator errors. #596 (@elalish)
- Allow skipping degenerate triangle removal, to handle zero-volume meshes. #603 (@ramcdona)
- Fixed triangulator bug. #608, #609, #610 (@starseeker, @elalish)
- Fixed JS GLB I/O for mixed properties. #612 (@elalish)
- Fixed Python
smooth
binding and addedcalculate_curvature
. #615 (@elalish, @pca006132, @zalo) - Added
level_set
to Python bindings. #616 (@zalo) - Check python format in CI. #618 (@pca006132)
- Fixed performance regression with properties. #621 (@pca006132, @stephomi)
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)
ManifoldCAD.org
v2.1.0
This is a significant update, primarily centered on replacing MeshRelation
with MeshGL
, which accomplishes the goal of maintaining material properties across operations much better and with a simpler, more performant API. I'm not considering this a breaking change, as MeshRelation
turned out to be broken enough that I doubt it was getting much use anyway. For the WASM build on npm, this is definitely a breaking change as we've updated its API more significantly and switched to an ES6 module. This brings us up from v1.0 to v2.1 to keep a consistent version from now on.
New Features
- Added
MeshGL
. #269 (@stewartoallen, @elalish) - Handle arbitrary properties in
MeshGL
. #290 (@elalish) - Added transform relations to
MeshGL
. #315 (@elalish) - Added normals update to
GetMeshGL
. #317 (@elalish) - Simplified
Polygons
type. #343 (@elalish)
WASM bindings
- Added missing declarations. #267, #320 (@jirihon, @rafern)
- Update declarations for ES6. #342, #346 (@rafern)
- Refactored bindings. #268 (@rafern)
- Added JS
Mesh
class. #272 (@elalish) - Updated to ES6 Module. #322 (@elalish)
- Accept
Mat4
intransform
. #329 (@pca006132)
Build/CI Updates
- Added Node.js tests. #262 (@elalish)
- Added C bindings. #292, #295, #303, #306, #310, #311, #313 (@geoffder)
- Updated CI to CUDA 12. #319 (@elalish)
- Added maze benchmark to Python run. #333 (@pca006132)
Bug Fixes
- Fixed memory leak. #280 (@pca006132)
- Fixed mirroring scale. #298 (@elalish)
- Made robust to overlaps by default. #299 (@elalish)
- Fixed Python binding bug. #307 (@pca006132)
- Changed enum case to avoid macros. #325 (@elalish)
- Hash table OMP fix. #331 (@pca006132)
Examples
ManifoldCAD.org
- Fixed first run problem. #281 (@elalish)
- Fixed CSS. #296 (@pca006132)
- Switched from three.js GLTFExporter to gltf-transform. #322 (@elalish)
- Added
show()
andonly()
functions for visual debug. #330, #334 (@elalish) - Added gl-matrix to editor for vector functions. #332 (@elalish)
- Made into a fully installable PWA. #336 (@elalish)
- Fixed module interface. #348 (@elalish)