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