Open Source Parametric CAD
A little while ago I was sitting in a local cafe eating breakfast. I had my calipers, laptop, and a hobby brushless motor controller out in front of me. I carefully measured each dimension, adding bits of geometry between bites of pancake. Eventually, what started out as a simple cube on my screen, started to resemble an accurate model of the object I held in my hand.
As I finished eating breakfast, a women in her late twenties came up and introduced herself. Completely fascinated, she had been watching this unfold and wanted to know what it was she had seen, “I had no idea that was how things where made! It looks so complicated. I always assumed someone just… took a picture or something.” I explained to her how everything around her in the last twenty years more complicated than a paperclip was once a model in a computer. She left with a huge grin on her face. I like to imagine she went about her day, looking at the things in her world in a whole new way.
This got me thinking. Why don’t more people have the tools to design their world? It is invisible to most of us, but it shouldn’t be. Look around you. Every car. Every building. Every toothbrush, office chair, markerboard pen, laptop, television, overpass, and can opener. They all once started as a computer model. Once you’ve gotten past the why part of having an idea, it’s the first step in finding the how in build something.
So why is this important? With the rise of 3D printing and laser cutting, more and more people have access to low skill manufacturing machines. Machines that can build very complicated objects, cheaply, with little or no training. Unfortunately, the software necessary to tell those machines what to build is still very expensive, difficult to use, and out of reach for most people.
So what is a Parametric CAD Modeller anyway? Parametric CAD is software that uses (mostly) two dimensional sketches to build up three dimensional forms. The parametric part is where the relationships between the circles, squares, and lines in the 2D drawings are formulas. This allows one to say, build a propeller where the number of prop-blades can be changed with one number. Or a coffee mug, where you can specify how much coffee you want it to hold. You can specify that the handle is always attached to the side of the coffee mug, and that the mug always has a bottom. In a sense, parametric CAD is a visual programming language for describing all things. Well, most of them anyway.
Making these tools more accesible to more people will require overcoming two immense hurdles. The first is the cost. Parametric modellers are very, very expensive. This means that unless someone else has the same very expensive CAD package as you, you won’t be able to effectively share your fancy widget with them. The other side effect of this is that it creates vendor lock-in, and dramatically increases the barrier to entry.
The second, and harder problem, is usability. If our goal is to make product design more accessible to more people, then we’re going to have to make great strides in how people learn CAD, and how they interact with CAD modellers.
Taking a survey of currently available PLM packages (that’s “Product Lifecycle Managment” in industry-speak) and you notice something about them. They’re massively complicated & opaque interfaces designed for professionals who will have spent hundreds to thousands of hours learning their idiosyncrasies and capabilities. These interfaces, while they all share some common functionality, have each taken their own separate evolutionary path. Sometimes with maddening results.
Of course, an interface capable of describing All Things is going to have an inherent level of irreducible complexity. At some point, a new user is going to have to learn how to make three dimensional shapes out of two dimensional drawings. They’re going to have to learn how a thing is made up out of a collection of features, and how these features will have dependencies. They’re going to have to do a lot of learning. That’s okay, we can make that process easier.
Parametric CAD is expensive and hard to use, let’s address the expensive part first.
Open source development cycles have shown time and time again, that they are capable of building highly reliable, highly functional and extremely complex systems. Like the web browser you’re reading this on. Or the operating system in your phone. Already, there are a few OSS CAD projects under way. As it pertains to our particular problem, currently there is OpenCASCADE.
OpenCASCADE is a parametric kernel. It’s the code that does The Math and provides the core logic used to describe All Things. Around that you will need some sort of user interface to talk to the kernel. Some way to describe what you want it to do. This is an area where open source software doesn’t do as well. There are lots of reasons for this.
I think the core difficulty is that the motivational forces which compel individual unpaid contributors to work on a complex project are generally at odds with good UI design. At the end of the day, a single person is going to sit in front of a computer screen and try and figure out how to use an interface. This person is going to have to figure out the motivations which lead to certain UI design decisions. Decisions made by many individual contributors. This creates a many-to-one mapping of design decisions, and generally leads to software that requires a CS degree to understand.
If an open source project does have a UI designer, this designer is further hamstrung by having little real power to keep the design on course. Motivating volunteers to throw out their pet feature because its not right for the end user is a good way to end up volunteerless. UX (user experience) design is an area of computer science that is fraught with “Armchair Experts”, as it frequently appears subjective to those unfamiliar with design principles. This leads to lots of heated discussions about a particular design direction, and often creates this situation where it’s just easier to keep everyone’s pet feature in a preference somewhere rather than settle on one model. Of course, there are examples of OSS projects with good UI, but they’re overwhelmingly single contributor projects.
So how do you build good UI and still have your OSS cake too?
My thought was that one might be able to use Kickstarter to pre-fund a particular design direction. It works like this: a design group creates a UI specification for an area of functionality. This is usually a document describing behaviors, structure, and user experience flow, as well as target users and their motivations & backgrounds which will govern the design. It often includes example animations to illustrate the behaviors and functionality. Then, that design document is taken to Kickstarter, and the community is asked to fund the salary for the required number of engineers to implement the design round. When it’s done, the software is released out into the open. If the design has been implemented and executed well, the community will be motivated to donate more for the next round. If not, the engineers move on to something else. As the previous round is open source, another group is free to take the product in a new direction if needed.
This allows the direction of the software to be controlled by the people who use it in a very, very direct manner. The difficult part in making this work of course, is convincing the community to bootstrap the first round. A design/engineering team will be trading on reputation. The project will still require lots of volunteer help, and the there are still lots of other problems, but does solve one problem: a clear direction, attached to a customer base willing to support it.
Might work, might be a dismal failure, but I think its an interesting idea worth more thought.