Note: I would love to eventually publish detailed instructions on how to make your own UCube, but since the design is still changing and improving, this post will gloss over a lot of those details and focus on how you can model and print 3D objects just by flipping a few switches.
This project was designed and built at the Craft Technology Lab at the University of Colorado Boulder: http://l3d.cs.colorado.edu/~ctg/Craft_Tech.html
Here's a brief video overview of (some) what the UCube can do:
Step 1: The Basics
The software then displays the active points on the computer screen. From the software, there are several actions you can take to form shapes and models. You can take the convex hull of the shape (imagine wrapping a piece of paper around the set of points, and that's pretty much the convex hull), the wireframe of the convex hull, make a spline through the points, and create a path through a sequence of points. There is also an 'edit' mode whereby you can tweak the vertices of your model to include points outside of the normal point grid (off the integer lattice). When you're satisfied, you can export your model as an .STL file and print it on a 3D printer.
The pictures in this section follow a simple use-case for the UCube: defining the vertices of a model on the physical interface, selecting the convex hull of the active points through the software, exporting the .STL file of your model, and printing it out on a 3D printer.
The next sections will go through more complex modeling techniques and features of the UCube system. (You can do much more than make a cube).
Step 2: More Complex Modeling
The knot mode allows you to record a sequence of selected points on the UCube and draw a 3D path connecting those points. First, you select the 'knot' button from the sidebar (shown in pictures in the step). Next, activate (in sequence) the points you want the knot to follow - the software will build the knot in real time on the screen. If you make a mistake or change your mind, you can hit the 'clear knot' button and start again. If you want a closed loop kind of knot, click the 'close knot' button when you're done modeling. You're now ready to export your knot to and STL file and print it out! Sweet!
Step 3: Other Functionality
Step 4: Notes on Building Your Own UCube
Much of the code and documentation can be found at http://benatwork.cc - and this is where future updates will live, until I've finalized the project enough to write an end-to-end tutorial to post here.
Without getting into too much detail, here's the gist:
1. Each possible coordinate (my first board was small, a 4x4x4 array, meaning 64 possible xyz coordinates) is a pin on your Arduino Mega (you could use shift registers as well). Since we're using buttons, they're all digital ins.
2. You have to map each pin to the coordinate on your board (e.g. pin 2 might be (0,0,0)).
3. When you plug in a button to that pin and turn it on (e.g. pin == HIGH) send out the coordinates of that pin via Serial.print statements. Put in some delimiting characters so you can split the string in Processing (I printed commas between the points and a semicolon at the end of each xyz coordinate).
4. In Processing, read in the set of points using the serial library. Break apart the string so you have an array of discrete xyz coordinates, and draw them to the screen.
5. Once you have the set of 3D coordinates, the rest of the fancy stuff is doing one or more things with that set of points.
I've included some process pics here just for fun. Send me a message or comment here if you have any questions or feedback, I'm happy to answer.