In my last post, “Digital Joinery Design Automation,” I wrote about a project I planned to undertake to implement each of the “50 Digital Wood Joints” from the collection published by Bernhard E. Bürdek, Jochen Gros, Martin Krauter, and Friedrich Sulzer. This collection of joints represents a modern take on traditional joinery in the sense that each of the joints can be cut on a CNC router directly from their digital representation (in the form of a CAD/CAM file).
The joints themselves are quite interesting and represent clever ways of joining individual pieces to create more complex structures, and the collection (warning – 50MB file!) is fantastic because it includes beautiful images of the joints as well as solid model representations. After exploring it, I got to thinking, wouldn’t it be great if a designer didn’t have to draw each little detail of a joint in the model but could, instead, for example, simply overlap two bodies, click a “Create Joint Feature” button, select some parameters, “et voilà!?”
Well, it turns out this is possible, and to demonstrate that, I’ve created implementations of the “Frame Corner Joints” as FeatureScripts in a cloud-based CAD program called Onshape. FeatureScripts are custom features that can be added directly to an Onshape Part Studio (a kind of virtual workspace). And, they generate native features which means that the feature is preserved and rebuilt appropriately whenever you make changes to your design.
This first set of six joints took me a couple of months of working ~2 days per week to implement, revise, test, refactor, and finally arrive at something I was ready to put out into the world. The learning curve was pretty steep, and I struggled with where to draw the line between trying to anticipate the infinite ways a user could create invalid geometry and trying to make something that works for sane/sensible inputs. Writing CAD code that is user-facing feels very different from code that takes structured and/or constrained user input (like forms with buttons, sliders, text boxes, etc.)
The Frame Corner Joint is by no means finished. It comes with some constraints on geometry in certain cases; it’s still possible to adjust joint parameters to generate some really funky things; and the code desperately needs refactoring so “utility” functions can be re-used by future joints. But, it is finished enough to generate useful feedback on how it could be improved.
If you like making things (structures, furniture, etc.) out of wood with CNC machinery, take my features for a spin and let me know how they could be improved!