struct PK_BCURVE_splinewise_sf_s
{
int degree; --- The degree = order-1.
int n_positions; --- The number of positions
PK_VECTOR_t *positions; --- The positions
PK_PARAM_end_t t_end; --- End condition at lower t
PK_PARAM_end_t T_end; --- End condition at upper T
PK_VECTOR_t t_deriv; --- Derivative at lower t
PK_VECTOR_t T_deriv; --- Derivative at upper T
PK_PARAM_knot_t how_knot; --- How knot vector defined
double *knot; --- Knot vector
};
typedef struct PK_BCURVE_splinewise_sf_s PK_BCURVE_splinewise_sf_t;
This data structure is the splinewise standard form of a 3D b-curve.
Specific Errors:
PK_ERROR_incompatible_props only one end is periodic or a periodic
curve has coincident end points.
PK_ERROR_bad_derivative t_deriv or T_deriv 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
PK_ERROR_bad_order degree < 0 or degree > 3 or
degree < 2 and supplied clamping vectors
are incorrect
degree curve degree. When the standard form is input to
Parasolid (PK_BCURVE_create_splinewise), degree may only be
set to 3 to produce cubic curves or 0 in which case
Parasolid will select an appropriate degree.
n_positions number of positions.
If t_end is PK_PARAM_end_periodic_c then n_positions
must be at least 3, otherwise 'n_positions' must be at
least 2.
positions array of positions.
Consecutive positions must not coincide.
For a closed, non-periodic curve the start and end
positions must coincide.
For a periodic curve the start and end positions must not
coincide.
t_end end condition at lower t (ie start of curve)
If this is PK_PARAM_end_periodic_c then T_end must also be
PK_PARAM_end_periodic_c.
If this is PK_PARAM_end_clamped_vector_c then t_deriv must
be set to the start derivative.
T_end end condition at upper T (ie end of curve)
If this is PK_PARAM_end_periodic_c then t_end must also be
PK_PARAM_end_periodic_c.
If this is PK_PARAM_end_clamped_vector_c then T_deriv
must be set to the end derivative.
't_deriv' derivative at start of curve if t_end is
PK_PARAM_end_clamped_vector_c
'T_deriv' derivative at end of curve if T_end is
PK_PARAM_end_clamped_vector_c
how_knot how the knot vector is defined
knot if how_knot is PK_PARAM_knot_defined_c then knot is the
knot vector of length n_positions if the curve is not
periodic or n_positions + 1 if the curve is periodic.