 |
PK_BLENDSF_sf_t |
|
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.
Used in:
PK_BLENDSF_ask
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