Releases: elalish/manifold
v3.5.1
Mostly a patch release for #1735.
Bug Fixes
- fix camera radius reset by @elalish in #1733.
- Fix &v[size] UB in normals test sentinel pointers by @zmerlynn in #1736.
- Fix originalID races on shared CSG nodes by @zmerlynn in #1741.
Bindings
Refactoring
- Thread ExecutionContext into MeshGL ingest via ExecutionContext::FromMeshGL by @zmerlynn in #1723.
- Thread ExecutionContext into Smooth via ExecutionContext::Smooth by @zmerlynn in #1734.
- Thread ExecutionContext into LevelSet via ExecutionContext::LevelSet by @zmerlynn in #1739.
- Per-phase timing in ADVANCE_PHASE_OR_RETURN; extend perfPhases by @zmerlynn in #1742.
- Route Boolean3::Result timing through the shared phase mechanism by @zmerlynn in #1745.
v3.5.0
A huge thank you to all our new contributors - so much has happened in this release! And a special shoutout to @zmerlynn for a huge amount of work, including a whole new progress and cancellation API. @AnshulPatil2005 has now pushed Manifold to be double-precision deterministic across architectures. There's also been lot of UX improvement in ManifoldCAD, largely thanks to @swaparup36.
New Features
- Cross-platform determinism by @AnshulPatil2005 in #1606, #1623
- Smooth missing normals by @elalish in #1651, #1671
- Add ray casting via Kernel12 edge-triangle intersection by @zmerlynn in #1645, #1654
- Add ExecutionContext for boolean progress + cancellation by @zmerlynn in #1704, #1663, #1668, #1669, #1674, #1693, #1694, #1699, #1713
Performance Improvements
- Halfedge Refactoring by @pca006132 in #1709
Bug Fixes
- consistent transformations of normals by @elalish in #1602
- Fix meshgl merge functions returning input pointer on no-op by @zmerlynn in #1632
- Fix calculateNormals with minSharpAngle=0 producing ripples by @zmerlynn in #1634
- Propagate error status through Manifold operations by @zmerlynn in #1637
- Make Manifold and CrossSection safe for concurrent const access by @zmerlynn in #1636, #1659
- Fix bounding boxes by @elalish in #1653
- Fix concurrent-use race on
staticaffinity_partitioner inAddNewEdgeVertsby @zmerlynn in #1664 - Fix CsgOpNode destructor corrupting shared subtrees by @zmerlynn in #1673
- Use std::sqrt in svd.h to avoid an FP-determinism risk by @zmerlynn in #1681
- Fix mergeRec stability when pivot comes from right half by @zmerlynn in #1687
- Snapshot meshIDCounter_ once in CsgLeafNode::Compose by @zmerlynn in #1688
- Fix CalculateNormals by @elalish in #1724, #1716
- Record normals on Manifold; auto-substitute on GetMeshGL; round-trip via MeshGL by @zmerlynn in #1718
Bindings
- feat: exposed WarpBatch in WASM by @swaparup36 in #1613
- Add missing C API bindings by @zmerlynn in #1633
- Fix leak in
manifold_alloc_*(C API) by @zmerlynn in #1667
ManifoldCAD
- Handle versioned jsDelivr URLs. by @tonious in #1618
- Material transparency implies doubleSided. by @tonious in #1619
- feat: added edge visibility toggle by @swaparup36 in #1624
- UX improvements to ManifoldCAD by @elalish in #1628, #1630, #1641, #1644, #1657
- editor script icons UX by @israrkhan921 in #1621
- feat: add axes indicator to model-viewer by @swaparup36 in #1631
- Improve editor load and keep Monaco features stable. by @israrkhan921 in #1658
- Add vite-bundle-analyzer for bundle size checking by @israrkhan921 in #1679
- Improve import transformation for complex models by @tonious in #1685
- Topological sort for 3MF export by @tonious in #1692
- Keep editor camera steady when rerunning scripts by @elalish in #1701
- Import/Export bug fixes. by @tonious in #1705
- Retry transient fetch failures (fixes #1711) by @zmerlynn in #1717
Tests and CI
- ci: add cross-platform determinism check by @AnshulPatil2005 in #1594
- dedicated Linux Clang ASan+UBSan workflow lane by @AnshulPatil2005 in #1666
- Add TSAN CI workflow by @zmerlynn in #1665
- Reorganize tests: extract ExecutionContext, parallel-utility, and RayCast clusters by @zmerlynn in #1697
Build
- Add MANIFOLD_TIMING build option + perfPhases benchmark by @zmerlynn in #1670
- Drop early return in CMake on emscripten by @paulgessinger in #1678
- Use target_compile_definitions instead of target_compile_options for -D flags by @starseeker in #1686
- Add MANIFOLD_NO_IOSTREAM build-time option by @zmerlynn in #1690
- Add CrossSection backend selector by @zmerlynn in #1710
- Fix MSVC strict conversion warnings by @zmerlynn in #1726
Miscellaneous
- Updated Java bindings by @madhephaestus in #1617
- Add user Bridge Designer to README by @gene-ressler in #1629
- Fix README "bare" typos by @klausw in #1639
- Add AdaShape to Users in README by @Mikko-ads in #1648
- Add Rust binding (manifold-csg) to README by @zmerlynn in #1649
- Add link to pyvista-manifold by @banesullivan in #1695
New Contributors
- @madhephaestus made their first contribution in #1617
- @gene-ressler made their first contribution in #1629
- @zmerlynn made their first contribution in #1632
- @klausw made their first contribution in #1639
- @Mikko-ads made their first contribution in #1648
- @paulgessinger made their first contribution in #1678
- @banesullivan made their first contribution in #1695
Full Changelog: v3.4.1...v3.5.0
v3.4.1
This version reverts the lazy collider change (which causes numerical issues in some cases), fixes npm publish failure, fixes some minor bugs and improves ManifoldCAD.
Notable Bug Fixes
- Fix integer divide-by-zero in RefineToTolerance by @AnshulPatil2005 in #1547.
- Fix C include_pt bindings mutating temporary copies by @AnshulPatil2005 in #1556.
- Revert lazy collider by @pca006132 in #1569.
- Implement
manifold_cross_section_warp_contextC binding by @swaparup36 in #1597. - Fix normals by @elalish in #1600.
- fix: handle empty manifolds in SplitByPlane by @swaparup36 in #1604.
ManifoldCAD Updates
- Implement human-readable units by @Divyansh200102 in #1561.
- Add tooltips, dynamic filenames and type fetching by @Divyansh200102 in #1562.
- Add ImportModel example by @AnshulPatil2005 in #1573.
- Restore ManifoldCAD PWA Paths and manifest metadata by @israrkhan921 in #1580 and #1583.
- Add 3MF importer and test coverage by @AnshulPatil2005 in #1575.
- Restore minimal fetching types hint by @israrkhan921 in #1587.
- Stabilize refresh handling and offline behavior by @israrkhan921 in #1593.
- Draggable editor pane divider by @israrkhan921 in #1599.
Documentation Changes
- Fix small typo in comment by @rondlh in #1546.
- Documentation update regarding how to deal with precision issues by @AnshulPatil2005 in #1564.
- Document degrees vs radians in JS/TS rotation API by @AnshulPatil2005 in #1565.
Miscellaneous
- Added Nodillo to users by @rgathmann in #1555.
- Fixes verbose levels by @AnshulPatil2005 in #1554.
- Update cibuildwheel to build wheels for Python 3.14 by @jonathanhogg in #1572.
- Update dependencies by @pca006132 in #1490.
- Add /fp:precise to MSVC by @pca006132 in #1595.
- CI update by @pca006132 in #1574.
New Contributors
- @rondlh made their first contribution in #1546.
- @rgathmann made their first contribution in #1555.
- @Divyansh200102 made their first contribution in #1561.
- @israrkhan921 made their first contribution in #1580.
- @swaparup36 made their first contribution in #1597.
v3.4.0
This is a major release with many bug fixes, performance improvements, updates to the TypeScript API, and ManifoldCAD. Notable changes:
- Added MinkowskiSum and MinkowskiDifference, but note that the current implementation performs many union operations. It may be slow and memory-intensive for complex meshes.
- MeshIO is removed from our public API. Users should use libraries such as Trimesh for Python and assimp for C++. The MeshIO code is still available as an example for interfacing with assimp.
- ManifoldCAD can now import and operate on glTF models! It can also display 2D CrossSections and non-manifold imports. The documentation is also vastly improved, for both ManifoldCAD scripts, and the underlying TS API for those wanting to build their own tool.
New Features
API Updates
- manifoldc minor API fixes, by @geoffder in #1455.
- Deprecate
Manifold.compose()in WASM bindings, by @tonious in #1487. - Deprecate compose, by @pca006132 in #1489.
- Add C-binding functions to access the normalIdx parameter of GetMeshGL/GetMeshGL64, by @WNP78 in #1494.
- Make MeshIO private, by @pca006132 in #1529.
Algorithm Improvements and Fixes
- Cleanup of Boolean3, by @elalish in #1443.
- Fix determinism, by @pca006132 in #1452.
- New symbolic perturbation, by @elalish in #1445.
- Fix SplitPinchedVerts parallelization, by @pca006132 in #1456.
- Boolean3 performance optimization, by @pca006132 in #1457.
- Fix create halfedges, by @pca006132 in #1472.
- Lazy collider, by @pca006132 in #1473.
- Fix face normals, by @elalish in #1475.
- Share halfedge, by @pca006132 in #1478.
- Minor optimizations, by @pca006132 in #1480.
- Avoid copies and add more tracing, by @pca006132 in #1481.
- Fix excessive memory usage in batch union operations, by @zalo in #1495.
- Fix negative offset circular segment calculation, by @pca006132 in #1511.
- Fix degenerate hulls, by @pca006132 in #1512.
- Make keyholing more robust in triangulator, by @elalish in #1528.
- Fix lazy collider, by @Trzeth in #1540.
- Fix Cylinder(h, 0, r) to support cone with apex at bottom, by @AnshulPatil2005 in #1541.
Build System
- Added
MANIFOLD_STRICTflag, by @pca006132 in #1438. - -ffp-contract=off for clang too, by @pca006132 in #1476.
ManifoldCAD.org / JS / TS / WASM
- Removed gl-matrix and updated examples, by @elalish in #1429.
- Ensure that Manifold timing message includes deferred operations, by @tonious in #1439.
- Export internal type modules for TypeScript portability, by @Loosetooth in #1446.
- Import glTF models into manifoldCAD, by @tonious in #1434, #1461, #1505, #1514.
- Compatibility fixes, by @tonious in #1449, #1451, #1453, #1454.
- TypeScript Documentation Overhaul, by @tonious in #1484, #1488, #1492, #1497.
- Use worker bundled via esbuild, by @tonious in #1486.
- Update NPM dependencies, by @tonious in #1436, #1499.
- Fix Minkowski JS Bindings and TypeScript 5.9 compatibility in gltf-io.ts, by @zalo in #1501.
- Update esbuild.mjs to work with emscripten v5, by @neilpa in #1508.
- Make CrossSections visible, by @tonious in #1507.
- Separate Editor and Examples for clarity, by @tonious in #1536, #1535, #1533.
- Fix js bindings for manifold.simplify() with default parameters, by @dsafa in #1543.
Tests and CI
- Stop using deprecated macos-13 images in CI, by @coryrc in #1442.
- Add test with props, by @stephomi and @elalish in #1465.
- Add perturbation test, by @elalish in #1467.
- Add reproducer for issue 1498, by @pca006132 in #1469.
- Disable flakey
esm.shtest, by @tonious in #1513. - Properly integrate manifold_test into ctest, by @coryrc in #1520.
- Fix tests, by @elalish in #1532.
Miscellaneous
- Add SKAPA to Users in README, by @nmattia in #1431.
- Remove CLA requirement from CONTRIBUTING.md, by @coryrc in #1441.
- Add Otterplans to users in README, by @mathieucivel in #1483.
- Nits: Put the links in the body and header in README, by @coryrc in #1517.
- Add Bracket Engineer to users, by @wesbos in #1519.
- Create a template for launching f3d from c++, by @coryrc in #1523.
New Contributors
- @coryrc made their first contribution in #1441.
- @mathieucivel made their first contribution in #1483.
- @WNP78 made their first contribution in #1494.
- @wesbos made their first contribution in #1519.
- @AnshulPatil2005 made their first contribution in #1541.
v3.3.2
v3.3.1
v3.3.0
The big theme of this release is a major expansion of our npm module to now expose the script-runner of ManifoldCAD.org to any Node project or website that wants to use it. It even comes in a CLI flavor now that you can use like npx manifold-cad. There have been a number of breaking changes to ManifoldCAD.org scripts, primarily that the classes now need to be explicitly imported and the results explicitly exported. However, now we can import libraries universally, from node installs, from CDNs, and even from local scripts you write on ManifoldCAD.org! A huge thank you to @tonious for making all this happen.
ManifoldCAD / JS / TS / WASM
- Repackage WASM dynamic evaluation and mesh export by @tonious in #1329
- Refactor WASM state and export. by @tonious in #1351
- Make evaluator asynchronous, and other small TS tweaks. by @tonious in #1360
- Remediate top level async calls. by @tonious in #1375
- Refactor worker.ts by @tonious in #1380
- Set extension on worker.ts imports. by @tonious in #1384
- Fall back to packaged type files if not built. by @tonious in #1389
- Transform static imports to dynamic by @tonious in #1387
- Isomorphic Javascript Libraries by @tonious in #1392
- Add specific error messages in wasm bindings. by @tonious in #1396
- Automagically bundle manifoldCAD.d.ts by @tonious in #1397
- Add missing declarations. by @tonious in #1398
- Fetch remote types. by @tonious in #1399
- Small bundler improvements. by @tonious in #1400
- Require explicit imports in/of manifoldCAD by @tonious in #1401
- Refactor stack trace handling. by @tonious in #1403
- Remove GlobalDefaults object. by @tonious in #1408
- Assume virtual files are typescript by @tonious in #1410
- updated involute gear library and exmaple by @elalish in #1416
- Update tests. by @tonious in #1417
Bug Fixes
- fix csg tree bug by @pca006132 in #1383
Build/CI Updates
- Use Python_EXECUTABLE from FindPython instead of hardcoding the command by @darix in #1328
- Add missing header to build on mac osx with clang by @EstebanDugueperoux2 in #1332
- fix Build error on Debian 11 by @Trzeth in #1336
- Fix install with static link and using builtin dependencies by @pca006132 in #1341
- added test from #1309 by @elalish in #1345
- fix single point import by @Trzeth in #1349
- make MANIFOLD_USE_BUILTIN_TBB opt-in by @pca006132 in #1379
- using static_cast in ImportMesh to support assimp with double-precision by @surrim in #1391
New Contributors
v3.2.1
Patch update with a few (important) bug fixes.
Bug Fixes
- Fix downstream builds by @pca006132 in #1302
- Add
MANIFOLD_FOUNDcmake variable by @Trzeth in #1307 - Fix
Manifold.Simplifytest on intel macos by @Trzeth and @pca006132 in #1311 and #1322 (the real fix is probably the one below) - Fix broken halfedge pairing by @pca006132 in #1319
- Make batch boolean deterministic by @pca006132 in #1321
- Fix odr violation by @pca006132 in #1323
Misc
v3.2.0
Bug Fixes
- Make GCC floating-point operations standard conforming by @pca006132 in #1273
- Add missing Manifold.simplify() method to Python API by @jonathanhogg in #1282
- Fixed meshID regression by @elalish in #1287
- Fix pyi vert_properties type by @Trzeth in #1291
- Update Clipper2 to 1.5.4 and fix CrossSection::Offset by @Trzeth in #1292
- Skip halfedges that are removed by @pca006132 in #1296
- Fix stubgen path by @Trzeth in #1301
- Add cmake check for fp related options by @pca006132 in #1300
Performance Improvements
- Misc performance improvements by @pca006132 in #1269
- Use union-find for winding number by @pca006132 in #1271
- Faster halfedge pairing for large meshes by @pca006132 in #1279
Misc
- Use cmake4 in the CI by @pca006132 in #1274
- Add Arcol to README.md by @prideout in #1286
- Add Bento3D to README.md by @sorashin in #1288
- Add fuzzing instructions by @pca006132 #1214
- Add JoinType.Bevel by @elektrohenk in #1299