Solids of revolution have some nice properties. In process of generalization several of them change (become optional or lost), others are left unchanged. In this chapter, we will take a closer look to those more interesting of them.
2.5D object is three-dimensional object with one nice property: every point of surface has own two-dimensional coordinates (usually referred as u and v). This property is also present in generalized solids of revolution. The u coordinate is determined by position of point on generalized conic. Zero u coordinate has intersection point, the rest is marked in counterclockwise order. The v coordinate is common for all points of one generalized conic and differs for different ones.
Determining u coordinates for points of multifocal curve is not an easy task. Correct computation should ensure u coordinate values to be proportional to distances along curve. Many generalized conics are similar to circle, so first approach is to estimate u coordinate values from polar coordinates. This works perfectly for a circle, but is not so suitable for more complex (especially non-symmetrical) shapes. It is also dependent on choice of start of coordinate system. The aim is to choose geometrical center of curve interior. In neighboring slices, centers' positions should be correlated to avoid jerky changes in u coordinates.
To approximate distances on generalized conic with polygon, many samples are needed. To decrease computational costs, we need to approximate curve between two samples better than by straight line. Curvature of curve segment between samples can be approximated using gradients at sample points. Length of circular arc with radius equal to curvature radius is used to approximate length of segment. Testing has shown, that this approach gives 0.3% to 0.5% error for eight samples. For 50 samples (typical final mesh density) was less than one thousandth of percent.
The situation with v coordinates can be worse. With general form of generalized solids of revolution, it is not possible to just take parameter from input curve and use it as v coordinate. When leading curve parameter is chosen, several different generalized conics would have assigned the same value. Taking only rotated curve parameter, several slices can intersect with the same point of curve. Therefore, a combination of both is needed to produce correct v coordinate values. The solution is to use distance function (chapter 5.1) or slice-choosing curve (chapter 5.3) instead of rotated curve. Then a parameter of distance function (or slice-choosing curve) is a suitable value for v coordinate of generalized curve.
Solids of revolution have only one reason of having gaps - rotated curve was discontinuous. Generalized solids of revolution have several more reasons why to contain gaps (gaps can also be forced manually by proper set-up of slices).
Discontinuous leading curve causes discontinuous object. Each segment of leading curve generates standalone segment of generalized solid of revolution. However, in some special cases, usually with straight leading curve, jumping of leading curve does not cause discontinuities.
Due missing tangent of leading curve, orientation of slice cannot be determined. This causes one slice thick local discontinuity. If necessary, object can be interpolated over this gap. Blend of tangents in neighboring slices can be used to produce usable normal.
When slicing plane misses all axes, there are no foci and therefore no generalized conic in the slice.
Intersections of slicing plane and rotated curve can be a point or whole part of a curve. Taking all point of intersection leads into infinite summation. There is wide range of possible solutions. One point of curve can be chosen to act as foci, or distance is measured as minimum distance from curve. Probably the simplest solution is to declare such slice illegal (in other words, to generate local discontinuity).
Where is no intersection, no generalized conic can be. Unlike previous discontinuities, this case usually does not create local discontinuity.
When value of distance function is smaller than minimum value in the slice, no generalized conic is created. When value is equal to minimum, a degenerated generalized conic occurs (see chapter 3.2).
Whenever change in number of foci with nonzero weights occurs, shapes of generalized conics in neighboring slices becomes non-matching. Such slice creates border between two discontinuous segments.
Similar to previous case, also step change in weights of generalized conics causes discontinuity. The exception is case, when two foci share position and change in one weight is compensated in weight change of second focus.