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.