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.