
Introduction In the past, I have developed a few lofting algorithms. One of which ships in Designer's Workbench. A friend would like a lofting tool for his realtime geometric modeler package, and I have decided to look into the algorithm once again. 
The concept of lofting is simply connecting two polygonal contours together with a triangular mesh, producing a surface. For the basic cases, it is extremely simple. Extreme differences in the size of geometry, and orientation can begin to complicate the matter. Then branching in geometry and holes can increase the complexity.
Lofting can be used to create complicated objects projected along paths with varying cross sections. Extruding along a path is an extremely simple case of lofting along it. Lofting can also be used to produce surfaces of revolution where the silhouette changes during the revolution. 

For this project, we will deal only with the nonbranching version of lofting. Why? The purpose of this tool is for geometric modeling. The algorithms for lofting which support branching are not as flexible when it comes to nonparallel contours. Branching also isn't as much of an issue in this domain as it is in surface reconstruction.
Basic NonBranching Algorithm

The first phase of this project involved building a version of basic algorithm. The basic algorithm can handle constructing a surface between two contours, no branching and no holes. Scale and orientation issues are handled fairly easily. It is extremely powerful as a modeling tool, once you begin to think in terms of lofting.
Basic Lofting can be broken in two important sections:


Correspondence Correspondence is matching the contours that should be connected and in the case of the angled contours how they match up. In a nonbranching algorithm, it easy to know what contours should be connected but it is difficult to know how to line them up, because we permit nonparallel nonoverlapping contours. (These traits are what makes the algorithm useful for geometric modeling.) My version of the basic algorithm correlates the contours, trying to minimize differences in geometry size and shape by generating a warped "contour" space. This warped contour space contains the contours lined up for tiling.
Tiling

Results The image to the right illustrates the algorithm lofting between circles of different radius, different numbers of segments making up the circle and different spacings. In this case, the contours are parallel but that is not a requirement for the algorithm. From this, it is obvious how easy it is to model a fuselage with this tool. Accurate wings can also be build easily by using wing cross sections. 

The image to the right illustrates the basic algorithm lofting nonparallel contours.
Each of the contours is at an angle to the
others. Each contour has a different geometry: triangle, square, and pentagon. Notice
how the resulting triangular mesh is homeomorphic to a cylinder. The algorithm takes
special pains to prevent collapsing.
In my implementation of the algorithm, it makes every attempt to reorient contours such that the initial winding order of the contour is unimportant with respect to generating the lofted meshes. 

Optimizing Pass Due to the fact that tiling is done in a warped space, it is quite possible that an optimization pass could improve on the tiling. [Meyer94] discusses a local optimization which uses a goal function to swap edges in the tiling, if possible, to minimize or maximize the goal function. This type of refinement could improve the tiling, if some cases are found where the edge selection done in warped space does not prove to be a good choice in model space. I may add this when I find some good example cases.

Geo Modeler Plugin 

I have taken the work from this project, plus a couple improvements, and implemented it
as a plugin for Geo, a geometric modeling and animation package for the vissim industry. (See Carbon Graphics for more info about Geo.)
The tool permits lofting between open and closed contours, producing triangles all properly oriented to face out of the shape. To the right are images of the plugin in action in Geo 0.9.9.7.
References:There are piles of references for lofting, dating all the way back to 1977 and Fuchs' original paper. The following are just the references mentioned in this document:[Meyer94]  Meyers, David, "Reconstruction of Surfaces from Planar Contours", Dissertation, University of Washington.

