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.
PK_ERROR_bad_derivative a derivative is too large
PK_ERROR_insufficient_points not enough spline points
PK_ERROR_coincident_points repeated spline points
PK_ERROR_bad_position a spline point is outside size box
PK_ERROR_bad_knots bad parameterisation
PK_ERROR_repeated_knots repeated knots
PK_ERROR_wrong_number_knots wrong number of knots
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 mus 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
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.
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.
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.