Images as (grey-scale) surface() and Value::POLYSET support (WIP)
This is still *very* much a work in progress (WIP) and I still have a great deal of (planned) refactoring to do, but I've managed to get surface(image) and some basic "geometry as variable" support implemented:
I used the ImageMagick libraries since they're already accessed for the test infrastructure and it's easy to take advantage of their subroutines for image preprocessing. I use resize() (see http://www.imagemagick.org/Magick++/Image.html) for "scaling down" the image size as a dirty way to reduce the polygon count, but there are all sorts of other goodies that could prove useful.
I have a builtin_read() defined for reading an image into a Value::POLYSET (used by my modified surface()), but when I start tackling the refactoring (perhaps tonight) I also want to get it reading in STL and DXF. Then I'm looking at extending polygon() and polyhedron() to render Value::POLYSET variables directly. Coding up a builtin_write() could prove useful for dumping pre-rendering STL, DXF and other formats.
I'm really tempted to pull in Mandoline code (see https://github.com/revarbat/Mandoline) to speed projection() slicing and for faster pre-rendering 2D and 2.5D geometric boolean operations...