[R - E1] Node-based CAD

A project log for enSweepen [gd0096]

Procedural and parametric, node-based CAD for 3D modelling with sketches.

kelvinAkelvinA 05/20/2022 at 08:000 Comments

Yesterday night, 

before I went to bed, I thought:

and so I thought "what about node based CAD?"

The first Google result was very promising:

I was never a fan of the spline lines though. For me, it just makes the nodes look tangled. I'm thinking of a metro map or PCB layout UI that makes the whole thing look neater and less "spaghetti node".

Anyway, I posted the link in the 3D Printing Discord and the next day, I also got Elephant (MoI3D), Grasshopper (Rhino) and Dynamo as suggestions. 

Click image to see original video

Dynamo looks very close to the idea I was thinking of last night, where you have multiple "timelines" and you can see the model behind them all. I was also thinking of having the option of a vertical timeline. I also want some sort of feature sync feature (or an easy workflow to keep them synchronised) with another similar part. 

Example Workflow

The axis sliders from gd0036 will be the first workflow I'll try and make into a node based timeline from, as they are derived from very similar parts that only differ in the diameter of the tube very early in the model.

I think the most straigtforward approach is to have a sketch node that goes into a node that makes a tweak to one of the parameters and outputs that new sketch. In this case:


Multiple timelines should also make multithreaded computes more viable. Ideally, I would also like to use an implicit CAD approach for further performance gains. I'm also thinking of an "Expose" node, where it makes a... actually it's more like an "Export" node, where a seperate enSketchen file is created that is synced to the node timeline. This is so that parts can be imported into other components without having to import everything from the previous file, potentially improving performance. "Export" could also have subnodes, so that it's possible to do things like reorientate a part before auto exporting it, which will be useful for projects that have a lot of parts that need to be printed.


Nodes in sketches will make 2D sketching more parametric than they are currently. For example, scripts could be moved around in the order when they are executed, and parameters can be piped to them. Maybe a "solve for" input might be needed, so that a solution can be found to fufill a constraint instead of having a parameter. Another example are sketch fillets and chamfers. I think it would be nice to have sketch fillets that work like their 3D counterpart in Fusion 360.

Each sketch node will have a menu where all its related constraints are. I think that's better than a large list of contraints and trying to select that one contstraint nested under 5 other coincidents. Ideally, I'd also like to have some sort of "construction selection", for those times when I only want parts of a circle or rectange as construction but I don't want to break the lines and turn them into arcs or lines with coincidents dotted about.

The sub-node of a sketch will start with a plane node. This should have a "flip" toggle so that the plane can be facing the intended way. The plane would act like a planar constraint to everything that's connected to it. It's a node, meaning that more than one plane can be in a sketch. This is useful for features like loft and sweep that usually require multiple sketches in current CAD software to generate. It also means that sketches are intended to be 3D compatible. Helixes come to mind.

Icons and Fonts

I also want to see what can be done to make parametric icons and fonts with this method. Watching through a few FreeCAD iconpack creation efforts, it does seem like icon lines and colours could be parameterized to speed up icon creation, and allow for tweaks and changes such as line widths or fillet radii.

[Published at 10:13]


Related Videos

The above is a video I found just now, which shows that nodes can be used for precision or organic shapes.

I saw this video a while ago but didn't make the connection. Well, this was before even thinking of this project so there was no connection to make.