Adam James

August 27, 2021

Starting with 2D

Untitled_Artwork.png
I have two Clojure libraries underway for my code CAD endeavours: forge for 3D models and svg-clj for 2D drawings. I have put more attention into the svg library because it’s an excellent balance of coding challenge and design utility. Thinking about my work so far, I realize a few reasons why starting in the 2D CAD world has been beneficial. 

First, it’s simpler to implement. As a self-taught developer, I am rather cautious when assessing my abilities and knowledge. Im confident that I can learn necessary concepts, but not sure on how long things might take. Still, doing is better than speculating when it comes to building knowledge and skills, so I had to start somewhere, and a 2D library felt like the right place. Proving some of my ideas with a 2D library gives me confidence as I design my 3D library. And it turns out a lot of geometry concepts are essentially identical when looking at 2D/3D, so maths, data structures, code design patterns, and functions can be ported or used directly in my 3D work. 

Second, 2D modelling is powerful even without 3D. It’s amazing what can be communicated with only 2D diagrams. I would argue that for many real-world objects, you don’t even need 3D models to fully communicate a design. Well drawn 2D views really help the designer focus the reader on a few key details. Multiple views, slices, and styles can bring the intent of a design to the forefront.

Many manufacturers’ shop floors are full of detailed design drawings that feature exclusively 2D diagrams. If you’ve ever thrown together a workbench with some 2-by-4s, you might already be familiar with the “scribble it on scrap paper” technique, which barely needs accurate form at all. I’ve made design plans with nothing more than dots, lines, and dimensions. Having a library to help make crisp, consistent, and parametric 2D diagrams is already a big win in my eyes.

When I was first learning CAD I assumed that 3D modelling was superior to 2D. That it was the final power in the skill tree of engineering design tools. It turns out not to be the case.

The third observation I’ve had while working on my svg library has been that both 2D and 3D models have their place in a designer’s workflow. The model building process uses each as the “primitives” for the final design. You literally build up 3D models with 2D sketches, and then go on to produce 2D views from those 3D objects. In the realm of a design model, a primitive is a primitive, no matter how many dimensions it has. 

So, these are just a few observations I’ve made while working on my CAD libraries. It’s been on my mind as I start planning the next phase in my software development.

It’s time for me to write a solid design doc for each library. Time for me to build a real-deal program that lets people interact with my work. It’s time to go 3D. It’s time to go interactive!