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.