The Future Belongs to the Creators ™


The Problem

The space we are in now is an eighty year old coffee factory with thousands of square feet per floor. There isn’t a plan for how to use all the space, so working with an architect and contractor won’t get us very far and will be extra expensive for making changes along the way.

That “big design upfront” style is how we used to create software, until we found a better way to handle risk and change. Applying “agile” software to architecture is something we have been experimenting with. To figure out what to do here, we want to “iterate” the building.

First Attempt

We tried to use Wikihouse, but we found errors in their cut files AFTER we’d cut them. Not being actual woodworkers or able to put the parts back on the machine to fix them, we decided it was time to design our own solution with software.

Second Attempt

Since we are already in a building, we can simplify our project by skipping the floor and ceiling components. We just need to design and build a corner wall where the parts meet at a 90 degree angle, so it would be free-standing.

Like most of our ideas, we start with a sketch on an index card.

Structure Sketch

Panel Side

Connection detail


Two things most people overlook in SketchUp:

  1. Anything you can do in the app can be done through the Ruby API.
  2. SketchUp provides powerful ways to work in a coordinate system.

Instead of “drawing” our designs in SketchUp by dragging edges around and pulling them into volumes, we used Ruby code to teach SketchUp what a “wall” is, how it is assembled, and how it connects to a column.

Watching the process of creating a wall in SketchUp is not very impressive. You click a button to trigger our plug-in and TA-DA! A fully formed 3D corner wall appears on the screen. By hiding layers you can remove the wall faces to expose the sides and ribs in the wall.

To cut a wall, another button click dis-assembles the model, spreads the parts out in the same plane, and flattens them into 2D for export. To test our design, we create a quarter-scale model that we can cut on a laser.

Scale Model

Sides of wall panels on a 12in x 24in sheet of fiberboard.

Laser cutting column side panels and Z-Pegs

Assembling a column.

Assembled Column

WikiWalls v1

Three columns and two wall panels create a corner wall. Keeping in the wikiwiki spirit (Hawaiian for quick, fast, instant), this wall cut fast, all the parts were there, the parts fit, and everything assembled easily.

Z-Peg Test

90 Degree Wall

WikiWalls v2

Like all good software people, we were overly influenced by the ideals of Lego building blocks. Combined with a recent failure converting a table designed in London from metric to standard units, WikiWall layout was a “fake metric” scale. Columns were 10in x 10in. Wall panels were 10in x 80in. All the math worked nicely. Except, that assumed we would have an inventory of parts laying around and the space the walls were going in didn’t require a one-off chunk of wall to fill the span. (See every set of kitchen cabinets and their fake filler piece against the wall.)

U-Peg Sketch

U-Peg Test Fit

This shifted us to making the computer do the math instead. Since cutting parts to fit on-site are often wrong due to mis-measurement, mis-cutting, and nothing being square or level, we decided to take one measurement with a laser. We’re not cutting anything by hand and the computer and robot can figure it out to 0.005in accuracy.

Then we tell the computer that we want a door panel, centered on a 242.702in wall. The computer subtracts the width of door panel and makes wall panels split evenly to perfectly center the door and draws parts for all the panels for the robot to cut.

Centered Door Panel

The software then generates the 3D model in SketchUp for review. Again, the ruby plug-in can flatten the geometry into 2-D to export vector files for a scale model with a laser cutter.

WikiWall v3

Wrestling with 3-D coordinate systems to position elements in place with relative positioning in SketchUp is possible, but complicated and slowed us down. For our experiments, we don’t need a 3D visualization or auto-generated assembly instructions. We need laser cut scale models that quickly test our calculated geometry results.

Wall Schematic

Boiled down, we need software to generated SVG files scaled to laserable material, 12in x 24in. Skipping a 3D version, we left SketchUp and pursued writing a new Domain Specific Language, a pattern we learned from Martin Fowler, for WikiWalls. Using the Atom editor for its malleability and plug-in system, we built a Ruby parser for a new language to describe WikiWall components.

An example material setup:

// Define Material Thickness
Variable "OSB Zvalness" As TM Is 0.75
Variable "Scale Factor" As SCALE Is 1.0

An example corner wall face:

Layout "Corner North Outer Face" As CORNER_NORTH_OUTER_FACE Is WALL_LEG_LENGTH Xval WALL_H Yval T_1 Zval
On North, South
On West
    T_FACE_SLOT Connector Slot Centered On [ WALL_H_CENTER ]
On East
    T_FACE_SLOT Connector Tab Centered On [ WALL_H_CENTER ]
On Face

With the Atom editor, the WikiWall plug-in will render an SVG of the parts in the bottom window of the editor, so you can check your work as you describe parts.
SVG is an XML-based format, text that can easily be tracked in our favorite version control system of Git. Then we follow the process:

  1. Export SVGs to cut with the laser.
  2. Look for issues
  3. Adjust the code
  4. Repeat.

When the model is right, set the scale to full size so the software recalculates all the parts and export to run through the CAM system (Computer Aided Machining), we currently use Aspire. Toolpaths, still created by hand, are sent to the ShopBot to cut in OSB.

Scale Model with Full Size

OSB (Oriented Strand Board) started as our best stunt double for more expensive sheet goods, D3 maple or Baltic birch. Along the way we’ve learned that there is more to OSB than we realized. Yes, it is 2-5x cheaper than premium plywoods. It is dimensionally stable, important for machining. It is everywhere, under almost all residential floors and roofs. It comes in four grades, from general purpose to load-bearing up and moisture proof. People often confuse it with particle board that swells up when exposed to any amount water.

The biggest surprise is that the inventor of OSB was born in San Antonio in 1890. His name was Armin Elmendorf, so we have been unwittingly carrying on Great Grand Pappy Elmendorf’s legacy and taking it digital.