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.