PK_BCURVE_make_bsurf_lofted_o_t   

struct PK_BCURVE_make_bsurf_lofted_o_s
    {
    int              o_t_version;     --- version number of option structure(1)
    PK_PARAM_end_t   v_end;           --- end condition at lower v end
                                      --- (PK_PARAM_end_natural_c)
    PK_PARAM_end_t   V_end;           --- end condition at upper V end
                                      --- (PK_PARAM_end_natural_c)
    int              n_v_derivs;      --- number of doubles in v_derivs (0)
    int              n_V_derivs;      --- number of doubles in V_derivs (0)
    double          *v_derivs;        --- derivative data at lower v (NULL)
    double          *V_derivs;        --- derivative data at upper V (NULL)
    PK_PARAM_twist_t u_v;             --- how lower u lower v twist vector
                                      --- defined (PK_PARAM_twist_no_c)
    PK_PARAM_twist_t u_V;             --- how lower u upper V twist vector
                                      --- defined (PK_PARAM_twist_no_c)
    PK_PARAM_twist_t U_v;             --- how upper U lower v twist vector
                                      --- defined (PK_PARAM_twist_no_c)
    PK_PARAM_twist_t U_V;             --- how upper U upper V twist vector
                                      --- defined (PK_PARAM_twist_no_c)
    PK_VECTOR_t      u_v_twist;       --- lower u lower v twist vector (0,0,0)
    PK_VECTOR_t      u_V_twist;       --- lower u upper V twist vector (0,0,0)
    PK_VECTOR_t      U_v_twist;       --- upper U lower v twist vector (0,0,0)
    PK_VECTOR_t      U_V_twist;       --- upper U upper V twist vector (0,0,0)
    PK_PARAM_degen_t v_degen;         --- degeneracy beyond lower v
                                      --- (PK_PARAM_degen_no_c)
    PK_PARAM_degen_t V_degen;         --- degeneracy beyond upper V
                                      --- (PK_PARAM_degen_no_c)
    PK_VECTOR_t      v_degen_vector;  --- position vector of point degeneracy
                                      --- (0,0,0)
    PK_VECTOR_t      V_degen_vector;  --- position vector of point degeneracy
                                      --- (0,0,0)
    int              n_v_degen_bcurve;--- number of doubles in v_degen_bcurve
                                      --- (0)
    int              n_V_degen_bcurve;--- number of doubles in V_degen_bcurve
                                      --- (0)
    double          *v_degen_bcurve;  --- vertices of degenerate bcurve (NULL)
    double          *V_degen_bcurve;  --- vertices of degenerate bcurve (NULL)
    PK_PARAM_knot_t  how_knot;        --- how knot vector defined
                                      --- (PK_PARAM_knot_auto_c)
    double          *knot;            --- knot vector (NULL)
    PK_LOGICAL_t     amalgamate;      --- whether to amalgamate knot vectors
                                      --- (PK_LOGICAL_false)
    int              n_v_degen_segs;  --- number of degenerate segments to add
                                      --- to lower v curve (0)
    int              n_V_degen_segs;  --- number of degenerate segments to add
                                      --- to upper V curve (0)
    int             *v_degen_segs;    --- degenerate segment positions on lower
                                      --- v curve (NULL)
    int             *V_degen_segs;    --- degenerate segment positions on upper
                                      --- V curve (NULL)
    PK_LOGICAL_t     force_cubic;     --- make result cubic in v even if it is
                                      --- a ruled surface
                                      --- (PK_LOGICAL_false)
    };

typedef struct PK_BCURVE_make_bsurf_lofted_o_s PK_BCURVE_make_bsurf_lofted_o_t;



This data structure is the options structure for PK_BCURVE_make_bsurf_lofted.


Specific Errors:
    PK_ERROR_bad_derivative         derivative or twist vector too large
    PK_ERROR_wrong_number_derivs    wrong number of derivatives
    PK_ERROR_bad_deriv_vertices     wrong number of vertices of derivative
                                    bcurve
    PK_ERROR_bad_degen_vertices     wrong number of vertices of degenerate
                                    bcurve
    PK_ERROR_incompatible_props     only one of 'v_end' and 'V_end' is
                                    PK_PARAM_end_periodic_c,
                                    'v_end' is PK_PARAM_end_periodic_c and
                                    'v_degen' or 'V_degen' is not
                                    PK_PARAM_degen_no_c,
                                    one end is PK_PARAM_end_natural_c and a
                                    twist vector has been supplied,
                                    'amalgamate' is PK_LOGICAL_true and
                                    'n_v_degen_segs' or 'n_V_degen_segs' is
                                    not 0,
                                    an end has both degen_segs and degeneracy
                                    beyond the edge.
    PK_ERROR_bad_index              index for degenerate segment out of range
    PK_ERROR_bad_knots              curve knot vectors are incompatible,
                                    bad supplied knot vector

Used in:

PK_BCURVE_make_bsurf_lofted



The lofted surface has its lower u edge along the start points of the supplied
bcurves and its upper U edge along the end points of the supplied bcurves.
It has its lower v edge along the first supplied bcurve and its upper V edge
along the last supplied bcurve.

'v_end'            end condition at lower v (ie at first bcurve) edge of
                   surface.  If this is set to PK_PARAM_end_periodic_c then
                   'V_end' must also be set to PK_PARAM_end_periodic_c.
                   If it is set to PK_PARAM_end_clamped_vector_c then
                   derivatives across the lower v edge must be provided in
                   'v_derivs'.  If it is set to PK_PARAM_end_clamped_bcurve_c
                   then the vertices of a derivative bcurve must be supplied in
                   'v_derivs'.

'V_end'            end condition at upper V (ie at last bcurve) edge of
                   surface.  If this is set to PK_PARAM_end_periodic_c then
                   'v_end' must also be set to PK_PARAM_end_periodic_c.
                   If it is set to PK_PARAM_end_clamped_vector_c then
                   derivatives across the upper V edge must be provided in
                   'V_derivs'.  If it is set to PK_PARAM_end_clamped_bcurve_c
                   then the vertices of a derivative bcurve must be supplied
                   in 'V_derivs'.

'n_v_derivs'       number of doubles in 'v_derivs'

'n_V_derivs'       number of doubles in 'V_derivs'

'v_derivs'         if derivatives are supplied at the lower v edge this either
                   contains a derivative for each spline point (1) of the
                   first bcurve or the vertices of a derivative bcurve.

'V_derivs'         if derivatives are supplied at the upper V edge this either
                   contains a derivative for each spline point (1) of the
                   last bcurve or the vertices of a derivative bcurve.

'u_v'              whether a twist vector for the lower u lower v corner
                   is supplied

'u_V'              whether a twist vector for the lower u upper V corner
                   is supplied

'U_v'              whether a twist vector for the upper U lower v corner
                   is supplied

'U_V'              whether a twist vector for the upper U upper V corner
                   is supplied

'u_v_twist'        lower u lower v twist vector if 'u_v' is
                   PK_PARAM_twist_yes_c

'u_V_twist'        lower u upper V twist vector if 'u_V' is
                   PK_PARAM_twist_yes_c

'U_v_twist'        upper U lower v twist vector if 'U_v' is
                   PK_PARAM_twist_yes_c

'U_V_twist'        upper U upper V twist vector if 'U_V' is
                   PK_PARAM_twist_yes_c

'v_degen'          whether the surface degenerates to a point beyond the
                   lower v bcurve.  If this is set to PK_PARAM_degen_vector_c
                   then a degenerate position vector is supplied in
                   'v_degen_vector'.  If this is set to PK_PARAM_degen_bcurve_c
                   then the control vertices of a degenerate bcurve are
                   supplied in v_degen_bcurve.

'V_degen'          whether the surface degenerates to a point beyond the
                   upper V bcurve.  If this is set to PK_PARAM_degen_vector_c
                   then a degenerate position vector is supplied in
                   'V_degen_vector'.  If this is set to PK_PARAM_degen_bcurve_c
                   then the control vertices of a degenerate bcurve are
                   supplied in V_degen_bcurve.

'v_degen_vector'   degenerate position vector if 'v_degen' is
                   PK_PARAM_degen_vector_c.

'V_degen_vector'   degenerate position vector if 'V_degen' is
                   PK_PARAM_degen_vector_c.

'n_v_degen_bcurve' number of doubles in v_degen_bcurve

'n_V_degen_bcurve' number of doubles in V_degen_bcurve

'v_degen_bcurve'   vertices of degenerate bcurve if 'v_degen' is
                   PK_PARAM_degen_bcurve_c.

'V_degen_bcurve'   vertices of degenerate bcurve if 'v_degen' is
                   PK_PARAM_degen_bcurve_c.

'how_knot'         whether a knot vector is supplied

'knot'             if 'how_knot' is PK_PARAM_knot_defined_c this contains the
                   knot vector.  The number of values in the knot vector is
                   equal to the number of lofted curves  for a non-periodic
                   lofting or one greater than the number of lofted curves
                   for a periodic lofting.

'amalgamate'       if this is set to PK_LOGICAL_true then the knot vectors
                   of the supplied curves will be amalgamated to produce
                   a surface which is continuous to the same order as the
                   curves.  This option may not be used in conjunction with
                   inserted degenerated segements.

'n_v_degen_segs'   number of degenerate segments added to lower v (ie first)
                   bcurve.

'n_V_degen_segs'   number of degenerate segments added to upper V (ie last)
                   bcurve.

'v_degen_segs'     if the first bcurve has fewer segments then the other curves
                   then this may be used to add the required number of
                   degenerate segments.  Each integer value given here
                   identifies the segment preceding a required additional
                   degenerate segment.  Values must be given in ascending
                   order.  Previously inserted degenerate segments affect
                   the segment numbers of subsequent ones.

'V_degen_segs'     as for 'v_degen_segs' for the upper V (ie last) bcurve.

'force_cubic'      in general, the lofted surface will be cubic in the loft
                   ( v ) direction. However if only two curves are given and
                   both 'v_end' and 'V_end' are PK_PARAM_end_natural_c then a
                   ruled surface which is linear in v will be produced if
                   'force_cubic' is PK_LOGICAL_false.  If 'force_cubic' is
                   set to PK_LOGICAL_true such a surface will be made cubic
                   in the v direction.

(1) a 'spline point' of a bcurve is a point between adjacent segments of
    of the bcurve or the start or end of the curve.