Matthew Keeter’s Antimony write-up describes a CAD tool built around a graph of scripted shapes and transforms. Its 2015 design connects code and direct manipulation: dragging a rectangle’s corner feeds changes back into the graph that defines it.
The architecture has three mostly independent parts:
- A dependency graph tracks connections between nodes and propagates changes downstream. Python scripts declare each node’s inputs and outputs.
- A geometry engine represents solids as functions, making union, intersection, and difference natural operations. It renders shaded bitmaps for the viewport and exports meshes for manufacturing.
- A standard library supplies shapes and transforms. Node scripts can also define wireframes and draggable points whose edits update the graph.
The rectangle example ties the design together. One script declares its bounds, produces its geometry, and attaches handles to those same inputs. Extending the tool can start with a Python node; changing rendering or graph evaluation means working deeper in the C++ implementation.
Code and canvas stay connected through an explicit model. That pattern carries beyond CAD to editors and other visual tools: make the relationships between scripted parameters, rendered output, and interactive controls part of the architecture.