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



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.