Repository navigation
🚀 Features
-
delete()andusingnow free the C++ object for every class. Previously about 2,100 classes, includinggp_*,TopoDS_Shape, everyBRep*APIbuilder and theNCollection_*containers, were bound with an empty destructor, so their memory was never released. (#40) (#50, #40)Handles returned as raw pointers (for example
BRepAlgoAPI_Cut.Builder(), mapSeek()results, orExtremaPC_*.Perform()results) are now borrowed: deleting one releases the JS handle without freeing memory its owner still uses. Previously some of these freed memory the owning object went on to use or free again.Upgrade note: since
delete()now frees memory, a handle must not be deleted while another OCCT object still uses it, and a handle to an object you deleted must not be used. For example, keep a curve adaptor alive while anExtrema_*object that was built from it is still in use, since the extrema object keeps a reference to the adaptor. Code that calledClear()beforedelete()as a leak workaround can drop that call.
🩹 Fixes
- Custom builds that leave
STACK_SIZEunset now link with an 8 MB stack, matching the published builds, instead of emcc's 64 KB default that deep OCCT recursion overflows silently. The shipped.js.symbolsmap is now written by the link step's finalwasm-optpass, so its function indices match the.wasmthat ships. (#49, #35, #39, #40) - Make
BRepOffset_MakeOffsetresults independent of heap history (#35, taucad/tau#243) and stopBRepBuilderAPI_NurbsConverttrapping on meshed B-spline faces (#39). Arc-join offset results may list their faces in a different order than earlier releases; the geometry is unchanged. (#48, #35, #243, #39) - Register
std::optional<T>for every optional output parameter and genuinestd::optional<T>parameter in the fragment that uses it, so custom builds no longer fail withCannot construct ... due to unbound types. Additional bind code can now call emsdk's unnamedregister_optional<T>()(#39). (#47, #39)
❤️ Thank You
- Claude
- Claude Opus 5.5 (1M context)
- Richard Fontein @rifont