
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.