Rethinking CAD Interaction
Over the past decade I’ve had occasion to use nearly all major commercial CAD programs. Most of these programs share the same approach to drawing lines or objects - to draw a line, for example, we must know exactly where the line begins, as well as exactly where it will end. As straightforward as this approach seems (point A to point B), I find it’s also a very constrained way of exploring shapes in a more freehand way. Often, when we first set out to draw a line (or an object for that matter), we’re not entirely sure where we want it to end - and once we’ve laid down the line, we’ll need some degree of immediate flexibility to adjust it based on the subsequent lines we draw. The only program I’ve used that feels somewhat different is Rhino’s Grasshopper, in which all actions are inherently parametric.
So, this begs the question - are there other ways of thinking of CAD interaction? Perhaps we’ve overlooked methods of specifying design constraints in favor of the immediately obvious.
I set out to explore this question and came up with a very rudimentary prototype of what such a system could look like - I called it Ripl (you can try it by clicking here). The guiding principle behind Ripl is that lines aren’t specified by two points, but rather originate in one point and head off into infinity (or in our case, the edge of the canvas). In order to define lines, we actually have to provide them with “modifiers” - this is what makes the system so fast for prototyping and playful exploration. Modifiers simply take an existing line and reroute it in a new direction. One of the modifiers allows us to stop a line in its tracks.
Modifiers are not tied to the line, but rather exist as first-class elements in the application, meaning that if a line is erased, a new one can be reconnected to existing modifiers. In other words, every line exists as a sort of environmentally-aware entity that knows what modifiers have been placed in its way, and can adjust its own drawing instructions accordingly. In theory, modifiers could also be added to infuse the line with information, or to define certain “regions” of the canvas wherein the line behaves in a different way.
The beauty of this system, albeit rudimentary, is that exploring shapes becomes incredible fun. Watching a line reconnect into a series of predefined modifiers is an incredibly satisfying feeling, perhaps because we begin to understand everything placed on the canvas as a rule, part of a fully dynamic and reactive system as opposed to the static, lifelessness of traditional CAD approaches. In the future I’ll be attempting to add support for other shapes, like rectangles and circles, as well as arcs and angled lines, though this will probably prove much harder than the implementations for lines.