PK_TRANSF_sf_t   



struct PK_TRANSF_sf_s
    {
    double   matrix[4][4];   --- homogeneous transformation matrix
    };

typedef struct PK_TRANSF_sf_s PK_TRANSF_sf_t;



Specific Errors:
PK_ERROR_wrong_transf             determinant is zero
PK_ERROR_sc_factor_le_0           scale must be greater than zero


The array matrix contains the components that make up the
transformation.

The matrix (M) operates as a post-multiplier on row vectors containing
homogenous coordinates thus:

(x',y',z',s') = (x,y,z,s) M

where the conventional 3-d coordinates are

(x/s,y/s,z/s).

The matrix thus consists of

    (             , Px )
    (      R      , Py )
    (             , Pz )
    ( Tx, Ty, Tz,   S  )

R = a non singular transformation matrix.
    This matrix contains the rotation, reflection, non-uniform scaling
    and shearing components.
T = a translation vector.
P = perspective terms in viewing transformations.
    Must be zero in transformations used for modelling.
S = a global scaling factor. It has to be greater than zero.
    Its value is the inverse of the global scale.

The subscripts of matrix corresponding to the above form are:

    ( [0][0]  [1][0]  [2][0]  [3][0] )
    ( [0][1]  [1][1]  [2][1]  [3][1] )
    ( [0][2]  [1][2]  [2][2]  [3][2] )
    ( [0][3]  [1][3]  [2][3]  [3][3] )


For a transformation involving uniform scale, it is advisable, although not
compulsory, that the magnitude of the determinant of R be one to Parasolid
angular tolerance (and so the uniform scale is 1/S). If the determinant is not
one then geometry types may change when transformed as explained under
PK_GEOM_transform.