The first solid modelers were based on constructive solid geometry (CSG) which was limited to simple shapes such as boxes, cones, cylinders and tori. It was almost impossible to use free form surfaces. The development of the twin edge boundary representation (BREP) enabled any surface definition to be used as a face of a solid. Solid modeling has always meant the modeling of 3-dimensional objects that could be manufactured as real parts. As the early solid modeling systems were being developed and used, it became very obvious that many of the familiar construction techniques used in the design process could not be implemented due to the limitations of the underlying geometric and topological representations. Additional methods were required for modeling the intermediate stages in the construction process.
For example, a model consisting of a cylinder lying on a box can not be manufactured since the region of contact between the two parts is just a line. Two planes that intersect in a line that is interior to each plane can also not be built yet both of these cases may arise as an intermediate step in the construction of a 3-D part. In 1986 Kevin Weiler published his PhD thesis titled “Topological Structures for Geometric Modeling” and in it he generalized the twin edge boundary edge representation into a radial edge representation together with the ability to include points and curves. Now it was possible to model almost any 3D object and as a result the intermediate steps in a construction process were valid objects. Mathematically he extended the boundary representation from a manifold to a non-manifold topology, hence the name NMT.
SMLib is one of the first pure NMT implementations. Pure in the sense that NMT was the main part of the original design of the underlying topological structures. SMLib’s NMT implementation was not an afterthought onto what was originally a manifold BREP structure. The power and usefulness of SMLib’s NMT structure and its ability to model all the intermediate stages of a construction process are discussed in the merge operator section below.