PK_BSURF_splinewise_sf_t   

struct PK_BSURF_splinewise_sf_s
    {
    int                 u_degree;      --- The u degree = order -1
    int                 v_degree;      --- The u degree = order -1
    int                 n_u_positions; --- The number of positions in u
    int                 n_v_positions; --- The number of positions in v
    PK_VECTOR_t        *positions;     --- The positions
    PK_PARAM_end_t      u_end;         --- End condition at lower u
    PK_PARAM_end_t      v_end;         --- End condition at lower v
    PK_PARAM_end_t      U_end;         --- End condition at upper U
    PK_PARAM_end_t      V_end;         --- End condition at upper V
    PK_VECTOR_t        *u_derivs;      --- Derivatives at lower u
    PK_VECTOR_t        *v_derivs;      --- Derivatives at lower v
    PK_VECTOR_t        *U_derivs;      --- Derivatives at upper U
    PK_VECTOR_t        *V_derivs;      --- Derivatives at upper V
    PK_PARAM_knot_t     u_how_knot;    --- How u knot vector defined
    PK_PARAM_knot_t     v_how_knot;    --- How v knot vector defined
    double             *u_knot;        --- u Knot vector
    double             *v_knot;        --- v Knot vector
    PK_PARAM_twist_t    u_v;           --- how lower u lower v
                                       --- twist vector defined
    PK_PARAM_twist_t    u_V;           --- how lower u upper V
                                       --- twist vector defined
    PK_PARAM_twist_t    U_v;           --- how upper U lower v
                                       --- twist vector defined
    PK_PARAM_twist_t    U_V;           --- how upper U upper V
                                       --- twist vector defined
    PK_VECTOR_t         u_v_twist;     --- lower u lower v twist vector
    PK_VECTOR_t         u_V_twist;     --- lower u upper V twist vector
    PK_VECTOR_t         U_v_twist;     --- upper U lower v twist vector
    PK_VECTOR_t         U_V_twist;     --- upper U upper V twist vector
    };
typedef struct PK_BSURF_splinewise_sf_s PK_BSURF_splinewise_sf_t;


This structure is the splinewise standard form of a b-surface.


Specific Errors:
    PK_ERROR_incompatible_props     only one end is periodic or a periodic
                                    surface has coincident end points (MILD)
    PK_ERROR_bad_derivative         a derivative is too large (MILD)
    PK_ERROR_insufficient_points    not enough spline points (MILD)
    PK_ERROR_coincident_points      repeated spline points (MILD)
    PK_ERROR_bad_position           a spline point is outside size box (MILD)
    PK_ERROR_bad_knots              bad parameterisation (MILD)
    PK_ERROR_repeated_knots         repeated knots (MILD)
    PK_ERROR_wrong_number_knots     wrong number of knots (MILD)

Used in:

PK_BSURF_ask_splinewise
PK_BSURF_create_splinewise


'u_degree'       Surface degree in the u direction.
                 When the standard form is input to
                 Parasolid (PK_BSURF_create_splinewise), 'u_degree' may only be
                 set to 3 to produce cubic curves or 0 in which case
                 Parasolid will select an appropriate degree.

'v_degree'       Surface degree in the v direction.
                 When the standard form is input to
                 Parasolid (PK_BSURF_create_splinewise), 'v_degree' may only be
                 set to 3 to produce cubic curves or 0 in which case
                 Parasolid will select an appropriate degree.

'n_u_positions'  Number of positions in the u direction.
                 If 'u_end' is PK_PARAM_end_periodic_c then 'n_u_positions'
                 must be at least 3, otherwise 'n_u_positions' must be at
                 least 2.

'n_v_positions'  Number of positions in the v direction.
                 If 'v_end' is PK_PARAM_end_periodic_c then 'n_v_positions'
                 must be at least 3, otherwise 'n_v_positions' must be at
                 least 2.

'positions'      Array of positions.
                 'positions' are supplied in the order with u changing most
                 rapidly.
                 Positions consecutive in either the u or v direction must not
                 coincide.
                 For a surface which is closed but not periodic in the u
                 direction, the start and end u positions must coincide.
                 For a surface which is closed but not periodic in the v
                 direction, the start and end v positions must coincide.
                 For a surface which is periodic in the u direction, the start
                 and end u positions must not coincide.
                 For a surface which is periodic in the v direction, the start
                 and end v positions must not coincide.

'u_end'          End condition at lower u.
                 If this is PK_PARAM_end_periodic_t then 'U_end' must also be
                 PK_PARAM_end_periodic_t.
                 If this is PK_PARAM_end_clamped_vector_c then 'u_derivs'
                  must be set to the u start derivatives.

'v_end'          end condition at lower v.
                 If this is PK_PARAM_end_periodic_t then 'V_end' must also be
                 PK_PARAM_end_periodic_t.
                 If this is PK_PARAM_end_clamped_vector_c then 'v_derivs'
                 must be set to the v start derivatives.

'U_end'          End condition at upper U.
                 If this is PK_PARAM_end_periodic_t then 'u_end' must also be
                 PK_PARAM_end_periodic_t.
                 If this is PK_PARAM_end_clamped_vector_c then 'U_derivs'
                 must be set to the U end derivatives.

'V_end'          End condition at upper V.
                 If this is PK_PARAM_end_periodic_t then 'v_end' must also be
                 PK_PARAM_end_periodic_t.
                 If this is PK_PARAM_end_clamped_vector_c then 'V_derivs'
                 must be set to the V end derivatives.

'u_derivs'       Derivatives at lower u if 'u_end' is
                 PK_PARAM_end_clamped_vector_c.

'v_derivs'       Derivatives at lower v if 'v_end' is
                 PK_PARAM_end_clamped_vector_c.

'U_derivs'       Derivatives at upper U if 'U_end' is
                 PK_PARAM_end_clamped_vector_c.

'V_derivs'       Derivatives at upper V if 'V_end' is
                 PK_PARAM_end_clamped_vector_c.

                 The derivatives in 'u_derivs', 'v_derivs', 'U_derivs',
                 'V_derivs' should be supplied with respect to a parameter
                 which varies from 0 to 1 between the first or last two rows or
                 columns of 'positions' (as appropriate). In other words, the
                 derivatives should have dimensions of length. The magnitude is
                 significant, and supplying vectors which are too large may
                 cause the surface to loop or have tight curvature.

'u_how_knot'     How the u knot vector is defined.

'v_how_knot'     How the v knot vector is defined.

'u_knot'         If 'u_how_knot' is PK_PARAM_knot_defined_c then 'u_knot' is
                 the knot vector of length 'n_u_positions' if the surface is
                 not periodic in the u direction, or 'n_u_positions' + 1 if
                 the surface is periodic in the u direction.
                 If 'u_how_knot' is PK_PARAM_knot_auto_c then 'u_knot' is
                 ignored.

'v_knot'         If 'v_how_knot' is PK_PARAM_knot_defined_c then 'v_knot' is
                 the knot vector of length 'n_v_positions' if the surface is
                 not periodic in the v direction, or 'n_v_positions' + 1 if
                 the surface is periodic in the v direction.
                 If 'v_how_knot' is PK_PARAM_knot_auto_c then 'v_knot' is
                 ignored.

'u_v'            How twist vector defined at lower u lower v.

'u_V'            How twist vector defined at lower u upper V.

'U_v'            How twist vector defined at upper U lower v.

'U_V'            How twist vector defined at upper U upper V.

'u_v_twist'      If 'u_v' is PK_PARAM_twist_yes_c the 'u_v_twist' is
                 the twist vector at lower u lower v.

'u_V_twist'      If 'u_V' is PK_PARAM_twist_yes_c the 'u_V_twist' is
                 the twist vector at lower u upper V.

'U_v_twist'      If 'U_v' is PK_PARAM_twist_yes_c the 'U_v_twist' is
                 the twist vector at upper U lower v.

'U_V_twist'      If 'U_V' is PK_PARAM_twist_yes_c the 'U_V_twist' is
                 the twist vector at upper U upper V.

                 A twist vector is the mixed partial derivative with respect to
                 both u and v. The twist vectors may be supplied at any of the
                 four corners, but only when both adjacent boundaries have
                 clamped boundary conditions. If the twist vectors are supplied
                 when they are not required then they are ignored. If the twist
                 vectors are not supplied then a suitable default value is
                 used.