You see, geometry is only half the picture. Geometry itself doesn't understand the relationships between various curves and surfaces. Take a cube for example. The geometry of a face from the cube doesn't know (or need to know) all of the edges that bound it. Instead there is a co-model that just captures these adjacency relationships. This information becomes very useful (and is pretty necessary) for operations like Union, Subtract, Intersect, and Slice (these the the boolean operations).
I am using a topology model called the Radial Edge data structure. It was developed by Kevin Weiler as part of his Ph.D. research. The best source of information about it is in his dissertation, "Topological Structures for Geometric Modeling." The radial edge structure is a variant of the venerable Winged Edge structure described by Bruce Baumgart. The biggest improvement is the ability of the radial edge structure to model non-manifold topology (NMT).
Solid models should be 2-manifold. This means that an edge is bordered by exactly 2 surfaces. This means that all objects being represented are solids. There would be no lines, points, or surfaces that are not part of a solid. This isn't exactly what we want. Take sheet metal for example. Most CAD packages represent sheet metal with just a surface, there is no thickness. Our topology model needs to be able to handle this. So that is why we need NMT.
Anyway, you can find a good bit of info about NMT and 2-manifolds on the web. Most of the solid modeling kernels are able to handle NMT. I am going to spent the next couple of days getting the data structures into place. It will take way way longer to get the boolean operations working. But with data structures available I can then patch up some of the 3D features (pad especially).
P.S. I really want to get to a useable version of the software before I create a Windows installer, so it could be a few days (or a week or two). If you want to try out the app, you can download MS Visual Studio 2008 (there is a free version) and compile the code yourself. Sorry for asking this of you.