# 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

TYPE

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):

GDX_NURB_GENERAL

The form of the surface represented by the GDX NURB Surface is not specified.

GDX_NURB_PLANE

The GDX NURB Surface of degree 1 in each parameter represents a plane.

GDX_NURB_CYLINDER

The GDX NURB Surface represents a cylindrical surface.

GDX_NURB_CONE

The GDX NURB Surface represents a right circular cone.

GDX_NURB_SPHERE

The GDX NURB Surface represents a sphere.

GDX_NURB_TORUS

The GDX NURB Surface represents a torus.

GDX_NURB_SREV

The GDX NURB Surface represents a surface of revolution.

GDX_NURB_TABCYL

The GDX NURB Surface represents a tabulated cylinder.

GDX_NURB_RULED

The GDX NURB Surface represents a ruled surface.

GDX_NURB_QUAD

The GDX NURB Surface represents a quadric surface.

GDX_NURB_OFFSET_SURF

The GDX NURB Surface represents a offset surface.

GDX_NURB_CURV_SURF

The GDX NURB Surface represents a surface that degenerates to a curve.

GDX_NURB_POINT_SURF

The GDX NURB Surface represents a surface that degenerates to a point.

U_DEGREE

The degree of the basis functions in the u direction.

V_DEGREE

The degree of the basis functions in the v direction.

NUM_OF_U_KNOTS

The total number of knots in the knot vector corresponding to the u direction.

NUM_OF_V_KNOTS

The total number of knots in the knot vector corresponding to the v direction.

NUM_OF_U_CTRL_PTS

The number of control points in the u direction.

NUM_OF_V_CTRL_PTS

The number of control points in the v direction.

U_CLOSED

Flag indicating whether or not the surface is closed in the u direction

PDX_TRUE

The surface is closed in the u direction.

PDX_FALSE

The surface is not closed in the u direction.

V_CLOSED

Flag indicating whether or not the surface is closed in the v direction

PDX_TRUE

The surface is closed in the v direction.

PDX_FALSE

The surface is not closed in the v direction.

RATIONAL

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).

PDX_TRUE

The surface is rational.

PDX_FALSE

The surface is non-rational.

U_PERIODIC

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).

PDX_TRUE

The surface is periodic in the u direction.

PDX_FALSE

The surface is non-periodic in the u direction.

V_PERIODIC

Flag indicating whether or not the GDX NURB Surface is periodic in the v direction.

PDX_TRUE

The surface is periodic in the v direction.

PDX_FALSE

The surface is non-periodic in the v direction.

U_KNOTS

The non-decreasing set of knots that form the u direction knot vector used by the basis functions.

V_KNOTS

The non-decreasing set of knots that form the v direction knot vector used by the basis functions.

U_COORDS

Value (NUM_OF_U_CTRL_PTS * 4) used in setting of array dimension of CTRL_PTS field.

CTRL_PTS

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):

CTRL_PTS[J][(I*4)+0]

The control point X coordinate multiplied by the corresponding weight.

CTRL_PTS[J][(I*4)+1]

The control point Y coordinate multiplied by the corresponding weight.

CTRL_PTS[J][(I*4)+2]

The control point Z coordinate multiplied by the corresponding weight.

CTRL_PTS[J][(I*4)+3]

The weight corresponding to the control point.

U_ORDER

The order of the basis functions in the u direction (= U_DEGREE + 1).

V_ORDER

The order of the basis functions in the v direction (= V_DEGREE + 1).

U_BOUNDS

The active parametric range of the surface in the u direction.

U_BOUNDS[0]

The GDX NURB Surface starting parameter in the u direction.

U_BOUNDS[1]

The GDX NURB Surface ending parameter in the u direction.

V_BOUNDS

The active parametric range of the surface in the v direction.

V_BOUNDS[0]

The GDX NURB Surface starting parameter in the v direction.

V_BOUNDS[1]

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)