NAME
GDX_NURB_SURF - General Rational B-Spline Surface
GENERAL DESCRIPTION
A GDX General Rational B-Spline Surface (GDX NURB Surface) represents a piecewise parametric polynomial or rational surface described in terms of degree, control points, basis functions, knots, and possibly weights. The control points are stored along with the weights in 4D homogenous form where the coordinates have been pre-multiplitied by the corresponding weights. Thus, the control points and weights are stored in a 4D array as X*W, Y*W, Z*W, and W.
Note that the maximum knot multiplicity allowed for internal knots is degree times and for end knots is order (i.e., degree + 1) times.
DDF SPECIFICATION
entity 10:0 GDX_NURB_SURF "General Rational B-Spline Surface" {
| char | TYPE; | |
| count | U_DEGREE; | |
| count | V_DEGREE; | |
| count | NUM_OF_U_KNOTS; | |
| count | NUM_OF_V_KNOTS; | |
| count | NUM_OF_U_CTRL_PTS; | |
| count | NUM_OF_V_CTRL_PTS; | |
| char | U_CLOSED; | |
| char | V_CLOSED; | |
| char | RATIONAL; | |
| char | U_PERIODIC; | |
| char | V_PERIODIC; | |
| double | U_KNOTS[NUM_OF_U_KNOTS]; | |
| double | V_KNOTS[NUM_OF_V_KNOTS]; | |
| let | U_COORDS = NUM_OF_U_CTRL_PTS * 4; | |
| double | CTRL_PTS[NUM_OF_V_CTRL_PTS][U_COORDS]; | |
| let | U_ORDER = U_DEGREE + 1; | |
| let | V_ORDER = V_DEGREE + 1; | |
| double | U_BOUNDS[2]; | |
| double | V_BOUNDS[2]; |
FIELD DESCRIPTIONS
The type of the GDX NURB Surface. Used to indicate that a particular geometric form is represented by the GDX NURB Surface. To set or check this value, use one of the following #defines (available by including gdx_Interface.h):
The form of the surface represented by the GDX NURB Surface is not specified.
The GDX NURB Surface of degree 1 in each parameter represents a plane.
The GDX NURB Surface represents a cylindrical surface.
The GDX NURB Surface represents a right circular cone.
The GDX NURB Surface represents a sphere.
The GDX NURB Surface represents a torus.
The GDX NURB Surface represents a surface of revolution.
The GDX NURB Surface represents a tabulated cylinder.
The GDX NURB Surface represents a ruled surface.
The GDX NURB Surface represents a quadric surface.
The GDX NURB Surface represents a offset surface.
The GDX NURB Surface represents a surface that degenerates to a curve.
The GDX NURB Surface represents a surface that degenerates to a point.
The degree of the basis functions in the u direction.
The degree of the basis functions in the v direction.
The total number of knots in the knot vector corresponding to the u direction.
The total number of knots in the knot vector corresponding to the v direction.
The number of control points in the u direction.
The number of control points in the v direction.
Flag indicating whether or not the surface is closed in the u direction
The surface is closed in the u direction.
The surface is not closed in the u direction.
Flag indicating whether or not the surface is closed in the v direction
The surface is closed in the v direction.
The surface is not closed in the v direction.
Flag indicating whether or not the GDX NURB Surface is rational. If a NURB surface is indicated as non-rational, the weights will be ignored (treated as if all weights are set to 1.0).
The surface is rational.
The surface is non-rational.
Flag indicating whether or not the GDX NURB Surface is periodic in the u direction. A GDX NURB Surface is considered periodic in a parametric direction if it is unclamped (i.e., the knots at the start and end of the knot vector in the corresponding direction do not have orderful multiplicity).
The surface is periodic in the u direction.
The surface is non-periodic in the u direction.
Flag indicating whether or not the GDX NURB Surface is periodic in the v direction.
The surface is periodic in the v direction.
The surface is non-periodic in the v direction.
The non-decreasing set of knots that form the u direction knot vector used by the basis functions.
The non-decreasing set of knots that form the v direction knot vector used by the basis functions.
Value (NUM_OF_U_CTRL_PTS * 4) used in setting of array dimension of CTRL_PTS field.
Array, dimensioned to [NUM_OF_V_CTRL_PTS][U_COORDS], containing control points that define the control polygon net for the GDX NURB Surface. The control points are stored in 4D homogenous coordinates as follows (where J = 0 to (NUM_OF_V_CTRL_PTS - 1) and I = 0 to (NUM_OF_U_CTRL_PTS - 1):
The control point X coordinate multiplied by the corresponding weight.
The control point Y coordinate multiplied by the corresponding weight.
The control point Z coordinate multiplied by the corresponding weight.
The weight corresponding to the control point.
The order of the basis functions in the u direction (= U_DEGREE + 1).
The order of the basis functions in the v direction (= V_DEGREE + 1).
The active parametric range of the surface in the u direction.
The GDX NURB Surface starting parameter in the u direction.
The GDX NURB Surface ending parameter in the u direction.
The active parametric range of the surface in the v direction.
The GDX NURB Surface starting parameter in the v direction.
The GDX NURB Surface ending parameter in the v direction.
PARAMETERIZATION
The parameterization is the same as that used for the IGES Rational B-Spline Surface Entity (Type 128) and can be found in Appendix B of The Initial Graphics Exchange Specification (IGES) Version 5.2.
PARAMETRIC RANGE
The GDX NURB Surface is defined over the following parametric range: U_KNOTS[U_DEGREE] <= u <= U_KNOTS[NUM_OF_U_KNOTS - U_ORDER] V_KNOTS[V_DEGREE] <= v <= V_KNOTS[NUM_OF_V_KNOTS - V_ORDER]
The U_BOUNDS and V_BOUNDS fields "trim" the parameter range as follows: U_BOUNDS[0] <= u <= U_BOUNDS[1] V_BOUNDS[0] <= v <= V_BOUNDS[1]
RESTRICTIONS
The GDX Nurb Surface is subject to the following restrictions: 0 < U_DEGREE <= GDX_MAX_DEG 0 < V_DEGREE <= GDX_MAX_DEG
NUM_OF_U_CTRL_PTS > 1
NUM_OF_V_CTRL_PTS > 1
CTRL_PTS[J][(I * 4) + 3] > 0.0, where 0 <= I <= (NUM_OF_U_CTRL_PTS - 1)
and 0 <= J <= (NUM_OF_V_CTRL_PTS - 1) (i.e., all weights > 0.0)
U_KNOTS[U_DEGREE] <= U_BOUNDS[0] < U_KNOTS[NUM_OF_U_KNOTS - U_ORDER]
U_KNOTS[U_DEGREE] < U_BOUNDS[1] <= U_KNOTS[NUM_OF_U_KNOTS - U_ORDER]
V_KNOTS[V_DEGREE] <= V_BOUNDS[0] < V_KNOTS[NUM_OF_V_KNOTS - V_ORDER]
V_KNOTS[V_DEGREE] < V_BOUNDS[1] <= V_KNOTS[NUM_OF_V_KNOTS - V_ORDER]
multiplicity of U_KNOTS[I] <= U_ORDER,
where I = 0, I = (NUM_OF_U_KNOTS - 1)
multiplicity of U_KNOTS[I] <= U_DEGREE,
where DEGREE < I < (NUM_OF_U_KNOTS - ORDER)
multiplicity of V_KNOTS[I] <= V_ORDER,
where I = 0, I = (NUM_OF_V_KNOTS - 1)
multiplicity of V_KNOTS[I] <= V_DEGREE,
where DEGREE < I < (NUM_OF_V_KNOTS - ORDER)