SubSpace 3D Digitizing Modeler

While at GTN our 3D/CGI department began to encounter a need to digitize cars and trucks for computer modeling. Like most things in our business, the first mention of something is usually within days of actually needing it. We quickly reviewed a couple of digitizing arms and scanners that were available but nothing had software that was optimized for the work we do. A couple of my coworkers suggested an application that they had used previously but it appeared that the software (originally called Hyperspace) was no longer produced and we were unable to contact the author. We discussed with a commercial developer having a custom plugin written to allow digitizing in Autodesk Maya but the cost was outrageous, and I frankly thought it would be more limiting to have the application dedicated to the Maya infrastructure.

I had designed and built two types of contact-based digitizing arms about 15 years previously; a project I had intended to market but lost interest in when confronted with the high costs of patenting and copyrighting. My interest in digitizing was reignited with our need for an optimized application for digitizing and I began to visualize how I would write such an application.

My coworkers and I discussed the basic needs on a Friday and I whipped together a prototype of the application over the weekend. Within two weeks we had a functional application and began adding features. SubSpace had been born and would evolve over the next few years as we did more and more digitizing jobs around the world.

SubSpace was written in VB.Net. Like all my current applications uses my SkeletonFramework plus some custom 3D code from a 3D Modeler I had written in 1991 called Vertex for the Amiga platform. I continued developing SubSpace steadily on my own for several years and continue to maintain it.

I recently refactored the entire program to neaten it up a bit and upgrade it to the newest OpenGL libraries for Windows. I quadrupled the speed of the application and added a bunch of new features in this, version 7.x. I’m really proud of how this program turned out and have yet to see anything even close to this efficient.





The main UI consists of a Tools form that permits access to all main functions, and access to secondary forms with other functions. Bookmarks let you jump quickly between saved models or parts being digitized. Multiple Views let you see the parts being digitized from stored camera angles. A History form records everything you do for unlimited undo/redo capabilities. Stored Layouts let you configure the screen layout of the windows and recall those settings at any time. Presets allow customization of the buttons and keys of the digitizer and keyboard. The viewer is (with v7.x) a full OpenGL viewer and displayed the work being digitize with options for fog (helpful when trying to view distances) and simple lighting.





The main ToolForm with all it’s functions.




The OpenGL Viewer. Text information is now full configurable and has drop shadows!



Every app I write has tons of preferences so the user can customize everything to his or her needs. These are stored and can be quickly swapped with other prefs settings.


While using our digitizing arms (two Faro models) I thought it might be nice to have some type of wireless control of SubSpace for myself–rather than having to reach over to a laptop for control. I came up with an idea for a SubSpace Pod (or Pendant), a wireless controller for the application. I’d never done built or programmed any wireless hardware like this so I was immediately intrigued by the challenge.

I prototyped the whole thing using a Parallax Basic Stamp, some Bluetooth wireless circuitry, a twenty key matrix keyboard and a small LCD screen for feedback. I wrote the basic stamp code/firmware and created a two-way link between the SubSpace application on the laptop and the Pod. This allowed the LCD screen to display lots of useful info as well as allow user-feedback of selected function on the keyboard all without having to touch the laptop.

In the end, I rewired and miniaturized the whole thing into into a 4×5″ case and got the power requirements down to 9 volts–enough to make it portable and light. It works really well and was one of my favorite hardware projects.