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