One of the joys of working with an open platform like the Cupcake is the ability to experiment with ideas that would be difficult or impossible to tinker with on a closed platform. The other day I wanted to take a break, so I tried to print some patterned lampshades.

Creating a translucent patterned lampshade as a traditional 3D model doesn’t work very well. The small variations in wall widths are hard for slicing engines to handle. Your wall width will have to be a multiple of your extrusion width. You’re also limited by the resolution of your X/Y positioning system. I decided to try a different approach.

Instead of embedding the design in a model, I wrote a script that takes a bitmap as input and generates gcodes to draw a straight cylinder or cone. The trick is to vary the wall thickness by extruding more plastic at the “darker” parts of the design. I did this by lowering the feedrate during these parts of the print; more plastic is extruded during the motion that draws that particular segment, and you end up with a thicker wall.

The advantage of this technique is that you can get very fine gradations of wall thickness– much finer than the positioning resolution of your X/Y stages, in fact. If you look at the “globe” patterned lampshade closely, you can actually see some subtle hyperbola-shaped gradations that are an artifact of the X/Y resolution of our machine.
This approach has applications beyond lampshades. You could use it to apply textures to model walls by reading ordinary 2d model textures as heightmaps, or someday even achieve “sub-voxel” print resolution by varying the wall thickness as the print head moves.

If you want to experiment with creating your own lampshade, you can download the script here, or explore the source on GitHub. Have fun!
