struct PK_BLENDSF_sf_s { PK_GEOM_t geom_1; --- first supporting geometry PK_GEOM_t geom_2; --- second supporting geometry double radii[2]; --- blend surface radii PK_CURVE_t spine; --- blend spine PK_INTERVAL_t spine_extent; --- parameter range of spine }; typedef struct PK_BLENDSF_sf_s PK_BLENDSF_sf_t; This structure is the standard form of a blendsf: a rolling ball blend surface. The surface is defined by: - Two supporting geometries, geom_1 and geom_2, to which the blendsf is tangential. - Two radii whose common magnitude is the radius of the rolling ball and whose algebraic sign determines on which side of each supporting surface the blendsf lies. - A spine curve which is the locus of the centre of the rolling ball. - A spine_extent, which is the parameter range of the spine over which the blendsf is defined. spine is the intersection of a surface offset from geom_1 by radii[0] and a surface offset from geom_2 by radii[1]. When a value in radii is positive then the offset is in the same direction as the surface normal ( as returned by PK_SURF_eval_with_normal ). When a value in radii is negative, then the offset is in the opposite direction to the surface normal. A blendsf is parameterised as: R(u,v) = C(u) + rX(u)cos(va(u)) + rY(u)sin(va(u)) where: - C is the spine curve - r is the magnitude of `radii[0]' and `radii[1]' - u has the range spine_extent - R(u,0) and R(u,1) are the curves where the blendsf meets the supporting geometries. - X(u) is in the direction R(u,0) - C(u) - X(u) and Y(u) are unit vectors such that dC(u)/du, X(u) and Y(u) form an orthogonal set - a(u) is the angle subtended by points R(u,0) and R(u,1) at the spine - 0 <= v <= 1