Users of Manifold #340
Replies: 22 comments 64 replies
-
Thanks @elalish for starting the discussion. It's a great idea. We are using Manifold to build a specialised web-based parametric modelling studio (closed-source for now, it does not have a name yet). For us, the most important feature of Manifold is the MeshRelation which greatly helps to implement stable references to faces (and consequently to edges and vertices too) throughout all operations. The manifoldness of the output also simplifies algorithms for the analysis of the mesh. And its speed is amazing so far. These are great advantages in comparison to JSCAD, which we used in earlier, much less capable, prototypes. Just in case @stewartoallen isn't watching this discussion, in November 2022, he integrated Manifold in his great Grid.Space apps, starting from release 3.7 (changelog). |
Beta Was this translation helpful? Give feedback.
-
Hello @elalish, Great thread idea, I'm curious to see who else might be using manifold. While I'm not yet using this library, I'm trying to assess when would be the right time to integrate it with Polygonjs. Polygonjs is a procedural and node-based webgl editor. It has nodes to generate threejs objects as well as jscad and I'd love to extend its modeling capabilities with SDFs. Even though SDFs are already possible inside shaders, they remain render only and cannot be combined with other modeling tools or the physics system. In order to integrate it, I was waiting for the ES6 module conversion, which appears completed, so now I believe there may soon be a new release on npm? Feel free to correct me if I'm wrong on this. |
Beta Was this translation helpful? Give feedback.
-
I am working on my own project to enable using multiple CAD libraries that are runnable in JS (pure or WASM) I am also a contributor to https://github.com/jscad/OpenJSCAD.org and am planning to promote integrating manifold as alternative boolean engine. For now all thins in plans, not yet implemented. I will 100% report here when I make something usable, and that can be shown/shared. |
Beta Was this translation helpful? Give feedback.
-
Hello, Other libraries were previously used for the CSG, such as csg.js, JSCAD and an engine-agnostic port of OctreeCSG, but there were limitations with those libraries, such as poor performance, floating triangles or lack of features. Manifold addresses all of these issues, so we switched to it. For now the library hasn't seen much use and is still experimental, but we are expecting to use it in the future. |
Beta Was this translation helpful? Give feedback.
-
Maybe we can showcase the list of users in our README? |
Beta Was this translation helpful? Give feedback.
-
Thank you @elalish and all collaborators for this great library! I'm a 3d printer hobbyist/maker and I decided to make my own Python CAD library/toolkit to make functional parts: I would like to combine OpenSCAD strength (code-oriented, WYMIWYG, automation/cli and modular operations) and other UI-based strength like FreeCAD / Fusion (lots of practical and easy to use features). I was using OpenSCAD so far and found too many repetitive patterns, from which I thought it would more fun to try building something more suitable with all those patterns. So far I implemented most OpenSCAD major operators + goodies like part orientation/auto centering. That is already enough to made me switch to my prototype, and making parts is much easier! The fact it's pure Python make it expandable / open ended too! Here is a little preview of how it looks like to make a heart: from dsl import *
Solid.fn = 6
c = Cylinder(orient='+z')
half = hull(c + c.translate(xy=0.5))
heart = union(half, half.mirror(x=1))
to_stl('heart.stl', heart) There are a lot to be done and once I have a bit more (sketch, relative positioning/orient to vertex, edge, etc) then I'll want to release a first version. Thanks to this Manifold, it gives me this great opportunity. |
Beta Was this translation helpful? Give feedback.
-
Hey @elalish. Thank you for Manifold and for starting this thread. There's lots of cool uses of the library here! I've been building a keyboard configurator for dactyl keyboards and recently switched from JSCAD + wasmified-OpenSCAD to Manifold. Manifold has proven to be faster than both of these (about 20% faster than JSCAD and 100x faster than OpenSCAD), so I've been really impressed with the library. To make the transition easier I wrote a wrapper for Manifold to make it compatible with the JSCAD API. It's very much tailored to my use case (I only implemented the JSCAD methods I use), but I hope it's still useful as a starting point for anyone else thinking of moving from JSCAD to Manifold. I also have an implementation of hulling and projection :) Finally, one tidbit which may be interesting to you: About 1/3 of the time generating the keyboard geometry is spent on Manifold's |
Beta Was this translation helpful? Give feedback.
-
Integrating Manifold into Nomad Sculpt, an iPad sculpting app. Before I was only offering boolean through a voxel remesher, thus loosing topology and details. Having a clean way to trim stuffs or doing clean merge/subtraction is nice, artists regularly requesting to "not destroy" edges after voxel boolean. Now it's possible! My longer term goal is to have something similar to zbrush "live boolean", basically a real-time live-preview of the boolean operation so that you can handle the scene in a non-destructive manner. And then commit the boolean (with Manifold) when you are done. Edit: Integration example https://twitter.com/nomadsculpt/status/1678401764729536512 |
Beta Was this translation helpful? Give feedback.
-
Hi, I am building a product configurator for Window and Doors. I'm using Three.js with react-three-fiber. I import DXF and I extrude them into profiles. The problem is with boolean operations. Would I be able to use ManifoldCAD for this? |
Beta Was this translation helpful? Give feedback.
-
Hi! The BRL-CAD (https://github.com/BRL-CAD/brlcad) open source computer aided design software has integrated Manifold into our facetization workflow as one of the options for doing boolean evaluations on meshes when evaluating a CSG tree hierarchy. So far it appears to be a significant improvement compared to our previous evaluator: High level assemblies in BRL-CAD's example geometry files: % success, previous solution: 88.9% (249 of 280) Time elapsed: 7256 seconds Because of the modeling approaches often used with CSG implicit solids, we tend to get a lot of nasty cases like tangent surfaces. However, we can often provide properly manifold meshes for inputs - when the starting point is CSG solids, we should be able to generate a proper input mesh. (Imported cruddy triangle meshes are another story, unfortunately, but that's a separate problem.) Some of our trees (and the nested booleans that form them) can be complex, so we often represent a pretty severe stress test for boolean evaluations. We normally need to do this conversion for export to formats such as OBJ and STL (we use ray interrogation for most of our production applications) so our weaknesses when performing this kind of export have been a historical problem. We're quite excited to find an option that improves our outcomes, although it's early days yet and we've still got a lot of stress testing ahead. |
Beta Was this translation helpful? Give feedback.
-
I made some simple glue code to enable playing with manifold in jupyter notebooks, with |
Beta Was this translation helpful? Give feedback.
-
Just recording here that I am integrating manifold into Blender, as an option for the Boolean solver in Geometry Nodes. |
Beta Was this translation helpful? Give feedback.
-
I hope this forum is still alive. |
Beta Was this translation helpful? Give feedback.
-
Folks, this is a bit off-topic, but still..... |
Beta Was this translation helpful? Give feedback.
-
I'm using manifold as part of a game I'm writing in Zig. Incidentally, if anyone wants Zig bindings to be added to the bindings directory, I could toss them in there. |
Beta Was this translation helpful? Give feedback.
-
Hello! Just came across this thread and thought that perhaps I should stick my head in and say how I'm using Manifold. I have it integrated into Flitter, my own bespoke declarative language for describing 2D and 3D visuals, which I use for interactive artworks and live performances. I use Manifold both directly and through Trimesh. If anyone is interested, Flitter is mostly documented. I am also trying to keep a repo of interesting examples. In particular, there's a pretty comprehensive example of using Flitter to declaratively describe CSG operations in that repo (actually the first example I did when I was implementing CSG support in the first place). I also tend to post work-in-progress videos on my Mastodon account. |
Beta Was this translation helpful? Give feedback.
-
Hi, I use manifold in my 3MF IO toolkit (own implementation, not the official one). Helps me to generate meshes for the files containing |
Beta Was this translation helpful? Give feedback.
-
I am using manifold in a web service, for www.spherene.ch , calculating hyperbolic geometry (usable in rhino and soon in other cads). I just use manifold for the mesh booleans through python right now. It's been the best mesh boolean compatible with closed source dev so far. Thanks a lot. |
Beta Was this translation helpful? Give feedback.
-
I'm messing with building a simple CAD program on the order of Microsoft 3D Builder for non-CAD types to assemble downloaded parts into assemblies to make scale models. I wrote a description of the workflow here: https://forum.mrhmag.com/post/simplified-cad-workflow-13500334 I'm currently using wxWidgets for my UI (been using it for 20 years now, too old to switch :D ) and threepp, the C++ port of three.js. I'm demonstrating this workflow to model railroaders using 3D Builder, but 1) doesn't look like Microsoft is giving it much love, and 2) want to be able to compile Linux and Mac versions. And I've looked, but can't find another free or open-source program that does simple .stl assembly like 3D Builder. BTW, Manifold in OpenSCAD was well-timed for me. I built a HO scale steam locomotive model in OpenSCAD, almost gave it up because of the CGAL rendering, Manifold saved it: |
Beta Was this translation helpful? Give feedback.
-
i've developed quite a bit of some fairly serious CAD stuff using three.js.
however, i now no longer think a web platform is appropriate for my needs -
as well as needing to include Manifold.
i have to make it all happen on a standard-alone Windows computer - C/C++,
MS-VisualStudio, openGL, some appropriate GUI.
would like to know your experience with this C++ port of three.js.
seems like the initiative of one nice person - is it robust and
logical/intuitive to use?
…On Thu, Oct 17, 2024 at 2:07 AM Glenn Butcher ***@***.***> wrote:
I'm messing with building a simple CAD program on the order of Microsoft
3D Builder for non-CAD types to assemble downloaded parts into assemblies
to make scale models. I wrote a description of the workflow here:
https://forum.mrhmag.com/post/simplified-cad-workflow-13500334
I'm currently using wxWidgets for my UI (been using it for 20 years now,
too old to switch :D ) and threepp, the C++ port of three.js.
I'm demonstrating this workflow to model railroaders using 3D Builder, but
1) doesn't look like Microsoft is giving it much love, and 2) want to be
able to compile Linux and Mac versions. And I've looked, but can't find
another free or open-source program that does simple .stl assembly like 3D
Builder.
BTW, Manifold in OpenSCAD was well-timed for me. I built a HO scale steam
locomotive model in OpenSCAD, almost gave it up because of the CGAL
rendering, Manifold saved it:
https://github.com/butcherg/DRG_168
—
Reply to this email directly, view it on GitHub
<#340 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/BKMOUX64HN5KYPUJX7LG52LZ33FB3AVCNFSM6AAAAAAVI7QAFWVHI2DSMVQWIX3LMV43URDJONRXK43TNFXW4Q3PNVWWK3TUHMYTAOJWGQZDENY>
.
You are receiving this because you commented.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
thanks for those answers.
some more come to mind now:
(1) is this a function-for-function conversion from the two languages?
(2) it must address the scene graph related functionality, correct?
- creation, manipulation, traversing.....
- operations on scene graphs, such as ray casting through a scene tree
(3) what about graphics.....what needs to happen to
- any pure webGL calls?
- the graphics related calls that are part of threejs?
(4) threejs has produced some rather good and useful usage documentation.
is there anything along these lines for the c++ code?
if i can get all this working i will need to manually integrate my useage
of Manifold
into it. i am prepared to try doing that, the benefit is significant.
thanks
…On Sun, Oct 20, 2024 at 8:03 PM Glenn Butcher ***@***.***> wrote:
A few years ago I messed around with three.js, wrote a little walkabout
scene with an animated character to stroll about the terrain, so I have a
bit of basis for comparison. threepp is as easy to use as three.js,
ignoring the js->c++ translation differences. I ran doxygen against the
threepp code to have easy-to-reference declarations, and I spend a lot of
time in the rich set of examples to make sure I fully understand the
particular usage of stuff. Dependencies are few, well really just assimp.
I'm a long-time wxWidgets user (not reticent about qt, just haven't
overcome the inertia to learn it) and @markaren
<https://github.com/markaren> has a threepp_wxwidgets example in another
repo, so that kick-started my work. Currently fighting cmake to glom all
this together into a coherent build system. Just early-days with it, so
FWIW.
For the simple 3D Builder-class of program I want to write I think it's a
bit of overkill, but a more comprehensive CAD program could use most of it.
It seems to be fully implemented, I've run a lot of the examples and the
three.js functionality appears to be fully captured.
—
Reply to this email directly, view it on GitHub
<#340 (reply in thread)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/BKMOUX32LMZPKB72TMICZMLZ4O5MLAVCNFSM6AAAAAAVI7QAFWVHI2DSMVQWIX3LMV43URDJONRXK43TNFXW4Q3PNVWWK3TUHMYTAOJZGY2TGOI>
.
You are receiving this because you commented.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
So, early-days writing a simple CAD program, finally have some end-to-end success. I took @markaren's threepp wxWidgets example and munged it into a basic scene display with a menu and a TRS tool. Worked file import, scene-drag translate, and file export to a basic functionality, program looks like this: The two windows were produced with my OpenSCAD script-based website, https://glenn.pulpitrock.net/customizable_models/, opened two instances and slid them together to make a double-double-hung window. Combined them with Manifold union, and saved to stl. Opened the result in Microsoft 3D Builder, got this: Yep, glomming together two .stl files makes errors, 3D Builder fixes them easily, but they print fine even without fixing. The general internal approach is to open a .stl file with the Manifold ImportMesh, convert to threepp geometry for display, and store a Manifold of the file in a std::map with a key made from the threepp Object3D UUID. Move the model around the scene with the RGB arrows and mouse drags; as that is done I accumulate the movements in a Manifold vec3, then apply them with a Manifold Translate when the mouse button is released. File export is simply iterating over the map and building a unioned Manifold. The only real challenge so far was coming up with an axis-restricted drag, more a challenge of my mental faculties. Still needs work, dragging stops when the drag arrow is left, but it's a start... |
Beta Was this translation helpful? Give feedback.
-
The whole point of this library being open-source is for others to make use of it, but it can be hard to know who our users are. I'm starting this discussion as a nice central place to post if you have integrated Manifold with other code. The idea is to give recognition to interesting projects (both closed and open), as well as to show Manifold's reach.
So far we have:
And of course our own front-end, https://manifoldcad.org/.
Beta Was this translation helpful? Give feedback.
All reactions