manifold-3d
TypeScript icon, indicating that this package has built-in type declarations

2.5.1 • Public • Published

codecov twitter

If you like OpenSCAD / OpenJSCAD, you might also like ManifoldCAD - our own solid modelling web app based on this package.

A metallic Menger sponge

Manifold

High-level Documentation | API Documentation | Algorithm Documentation | Web Examples

Manifold is a geometry library dedicated to creating and operating on manifold triangle meshes. A manifold mesh is a mesh that represents a solid object, and so is very important in manufacturing, CAD, structural analysis, etc. Further information can be found on the wiki.

What's here

This library is fast with guaranteed manifold output. As such you need manifold meshes as input, which this library can create using constructors inspired by the OpenSCAD API, as well as more advanced features like smoothing and signed-distance function (SDF) level sets. You can also pass in your own mesh data, but you'll get an error status if the imported mesh isn't manifold. Various automated repair tools exist online for fixing non manifold models, usually for 3D printing.

The most significant contribution here is a guaranteed-manifold mesh Boolean algorithm, which I believe is the first of its kind. If you know of another, please open a discussion - a mesh Boolean algorithm robust to edge cases has been an open problem for many years. Likewise, if the Boolean here ever fails you, please submit an issue! This Boolean forms the basis of a CAD kernel, as it allows simple shapes to be combined into more complex ones.

Note on memory management

Since Manifold is a WASM module, it does not automatically garbage-collect like regular JavaScript. You must manually delete() each manifold object constructed by your scripts, see discussion.

Examples

Please see our usage examples to see how to interface this library with three.js, <model-viewer>, and glTF. Of particular note are the included libraries for lossless roundtrip of manifold meshes through glTF files, via a new extension: EXT_mesh_manifold.

About the author

This library was started by Emmett Lalish. I am currently a Google employee and this is my 20% project, not an official Google project. At my day job I'm the maintainer of <model-viewer>. I was the first employee at a 3D video startup, Omnivor, and before that I worked on 3D printing at Microsoft, including 3D Builder. Originally an aerospace engineer, I started at a small DARPA contractor doing seedling projects, one of which became Sea Hunter. I earned my doctorate from the University of Washington in control theory and published some papers.

Package Sidebar

Install

npm i manifold-3d

Weekly Downloads

307

Version

2.5.1

License

Apache-2.0

Unpacked Size

1.12 MB

Total Files

8

Last publish

Collaborators

  • elalish