 |
PK_BSURF_splinewise_sf_t |
|
struct PK_BSURF_splinewise_sf_s
{
int u_degree; --- The u degree = order -1
int v_degree; --- The u degree = order -1
int n_u_positions; --- The number of positions in u
int n_v_positions; --- The number of positions in v
PK_VECTOR_t *positions; --- The positions
PK_PARAM_end_t u_end; --- End condition at lower u
PK_PARAM_end_t v_end; --- End condition at lower v
PK_PARAM_end_t U_end; --- End condition at upper U
PK_PARAM_end_t V_end; --- End condition at upper V
PK_VECTOR_t *u_derivs; --- Derivatives at lower u
PK_VECTOR_t *v_derivs; --- Derivatives at lower v
PK_VECTOR_t *U_derivs; --- Derivatives at upper U
PK_VECTOR_t *V_derivs; --- Derivatives at upper V
PK_PARAM_knot_t u_how_knot; --- How u knot vector defined
PK_PARAM_knot_t v_how_knot; --- How v knot vector defined
double *u_knot; --- u Knot vector
double *v_knot; --- v Knot vector
PK_PARAM_twist_t u_v; --- how lower u lower v
--- twist vector defined
PK_PARAM_twist_t u_V; --- how lower u upper V
--- twist vector defined
PK_PARAM_twist_t U_v; --- how upper U lower v
--- twist vector defined
PK_PARAM_twist_t U_V; --- how upper U upper V
--- twist vector defined
PK_VECTOR_t u_v_twist; --- lower u lower v twist vector
PK_VECTOR_t u_V_twist; --- lower u upper V twist vector
PK_VECTOR_t U_v_twist; --- upper U lower v twist vector
PK_VECTOR_t U_V_twist; --- upper U upper V twist vector
};
typedef struct PK_BSURF_splinewise_sf_s PK_BSURF_splinewise_sf_t;
This structure is the splinewise standard form of a b-surface.
Specific Errors:
PK_ERROR_incompatible_props only one end is periodic or a periodic
surface has coincident end points (MILD)
PK_ERROR_bad_derivative a derivative is too large (MILD)
PK_ERROR_insufficient_points not enough spline points (MILD)
PK_ERROR_coincident_points repeated spline points (MILD)
PK_ERROR_bad_position a spline point is outside size box (MILD)
PK_ERROR_bad_knots bad parameterisation (MILD)
PK_ERROR_repeated_knots repeated knots (MILD)
PK_ERROR_wrong_number_knots wrong number of knots (MILD)
Used in:
PK_BSURF_ask_splinewise
PK_BSURF_create_splinewise
'u_degree' Surface degree in the u direction.
When the standard form is input to
Parasolid (PK_BSURF_create_splinewise), 'u_degree' may only be
set to 3 to produce cubic curves or 0 in which case
Parasolid will select an appropriate degree.
'v_degree' Surface degree in the v direction.
When the standard form is input to
Parasolid (PK_BSURF_create_splinewise), 'v_degree' may only be
set to 3 to produce cubic curves or 0 in which case
Parasolid will select an appropriate degree.
'n_u_positions' Number of positions in the u direction.
If 'u_end' is PK_PARAM_end_periodic_c then 'n_u_positions'
must be at least 3, otherwise 'n_u_positions' must be at
least 2.
'n_v_positions' Number of positions in the v direction.
If 'v_end' is PK_PARAM_end_periodic_c then 'n_v_positions'
must be at least 3, otherwise 'n_v_positions' must be at
least 2.
'positions' Array of positions.
'positions' are supplied in the order with u changing most
rapidly.
Positions consecutive in either the u or v direction must not
coincide.
For a surface which is closed but not periodic in the u
direction, the start and end u positions must coincide.
For a surface which is closed but not periodic in the v
direction, the start and end v positions must coincide.
For a surface which is periodic in the u direction, the start
and end u positions must not coincide.
For a surface which is periodic in the v direction, the start
and end v positions must not coincide.
'u_end' End condition at lower u.
If this is PK_PARAM_end_periodic_t then 'U_end' must also be
PK_PARAM_end_periodic_t.
If this is PK_PARAM_end_clamped_vector_c then 'u_derivs'
must be set to the u start derivatives.
'v_end' end condition at lower v.
If this is PK_PARAM_end_periodic_t then 'V_end' must also be
PK_PARAM_end_periodic_t.
If this is PK_PARAM_end_clamped_vector_c then 'v_derivs'
must be set to the v start derivatives.
'U_end' End condition at upper U.
If this is PK_PARAM_end_periodic_t then 'u_end' must also be
PK_PARAM_end_periodic_t.
If this is PK_PARAM_end_clamped_vector_c then 'U_derivs'
must be set to the U end derivatives.
'V_end' End condition at upper V.
If this is PK_PARAM_end_periodic_t then 'v_end' must also be
PK_PARAM_end_periodic_t.
If this is PK_PARAM_end_clamped_vector_c then 'V_derivs'
must be set to the V end derivatives.
'u_derivs' Derivatives at lower u if 'u_end' is
PK_PARAM_end_clamped_vector_c.
'v_derivs' Derivatives at lower v if 'v_end' is
PK_PARAM_end_clamped_vector_c.
'U_derivs' Derivatives at upper U if 'U_end' is
PK_PARAM_end_clamped_vector_c.
'V_derivs' Derivatives at upper V if 'V_end' is
PK_PARAM_end_clamped_vector_c.
The derivatives in 'u_derivs', 'v_derivs', 'U_derivs',
'V_derivs' should be supplied with respect to a parameter
which varies from 0 to 1 between the first or last two rows or
columns of 'positions' (as appropriate). In other words, the
derivatives should have dimensions of length. The magnitude is
significant, and supplying vectors which are too large may
cause the surface to loop or have tight curvature.
'u_how_knot' How the u knot vector is defined.
'v_how_knot' How the v knot vector is defined.
'u_knot' If 'u_how_knot' is PK_PARAM_knot_defined_c then 'u_knot' is
the knot vector of length 'n_u_positions' if the surface is
not periodic in the u direction, or 'n_u_positions' + 1 if
the surface is periodic in the u direction.
If 'u_how_knot' is PK_PARAM_knot_auto_c then 'u_knot' is
ignored.
'v_knot' If 'v_how_knot' is PK_PARAM_knot_defined_c then 'v_knot' is
the knot vector of length 'n_v_positions' if the surface is
not periodic in the v direction, or 'n_v_positions' + 1 if
the surface is periodic in the v direction.
If 'v_how_knot' is PK_PARAM_knot_auto_c then 'v_knot' is
ignored.
'u_v' How twist vector defined at lower u lower v.
'u_V' How twist vector defined at lower u upper V.
'U_v' How twist vector defined at upper U lower v.
'U_V' How twist vector defined at upper U upper V.
'u_v_twist' If 'u_v' is PK_PARAM_twist_yes_c the 'u_v_twist' is
the twist vector at lower u lower v.
'u_V_twist' If 'u_V' is PK_PARAM_twist_yes_c the 'u_V_twist' is
the twist vector at lower u upper V.
'U_v_twist' If 'U_v' is PK_PARAM_twist_yes_c the 'U_v_twist' is
the twist vector at upper U lower v.
'U_V_twist' If 'U_V' is PK_PARAM_twist_yes_c the 'U_V_twist' is
the twist vector at upper U upper V.
A twist vector is the mixed partial derivative with respect to
both u and v. The twist vectors may be supplied at any of the
four corners, but only when both adjacent boundaries have
clamped boundary conditions. If the twist vectors are supplied
when they are not required then they are ignored. If the twist
vectors are not supplied then a suitable default value is
used.