00001
00047 #ifndef INC_MI32_TRANS3D_H
00048 #define INC_MI32_TRANS3D_H
00049
00050 #ifndef INC_MI32_STDDEFNS_H
00051 #include <mi32/stddefns.h>
00052 #endif
00053
00054 #ifdef GEOMDLL
00055 #define GEOMLIBEXPORT MI_DLLEXPORT
00056 #define GEOMLIBCLASSEXPORT MI_DLLCLASSEXPORT
00057 #else
00058 #define GEOMLIBEXPORT MI_DLLIMPORT
00059 #define GEOMLIBCLASSEXPORT MI_DLLCLASSIMPORT
00060 #endif
00061
00062 #ifndef GENERATING_DOXYGEN_OUTPUT
00063 struct CTRLPOINT3;
00064 struct CTRLPOINT3D;
00065 #endif // GENERATING_DOXYGEN_OUTPUT
00066
00067
00069
00070
00071 class GEOMLIBCLASSEXPORT TRANS3D {
00072 public:
00073
00074 enum AXIS {
00075 AXIS_X = 0,
00076 AXIS_Y = 1,
00077 AXIS_Z = 2
00078 };
00079
00080 enum PLANE {
00081 PLANE_XY = 0,
00082 PLANE_XZ = 1,
00083 PLANE_YZ = 2
00084 };
00085
00087 TRANS3D (
00088 );
00089
00091 TRANS3D (
00092 const TRANS3D& rhs
00093 );
00094
00096 TRANS3D (
00097 const TRANS3D& in1,
00098 const TRANS3D& in2
00099 );
00100
00102 ~TRANS3D (
00103 );
00104
00106 TRANS3D& operator= (
00107 const TRANS3D& rhs
00108 );
00109
00111 void ApplyMatrices (
00112 const MAT4X4 fwd,
00113 const MAT4X4 inv
00114 );
00115
00117 void ApplyOffset (
00118 double xoffset,
00119 double yoffset,
00120 double zoffset,
00121 bool inverse = false
00122 );
00123
00125 void ApplyOffset (
00126 const DPOINT3D& point,
00127 bool inverse = false
00128 );
00129
00131 void ApplyRotation (
00132 double angle,
00133 AXIS axis,
00134 bool inverse = false
00135 );
00136
00138 void ApplyScale (
00139 double xscale,
00140 double yscale,
00141 double zscale,
00142 bool inverse = false
00143 );
00144
00153
00162
00164 void ApplyShear (
00165 double shear1,
00166 double shear2,
00167 PLANE plane,
00168 bool inverse = false
00169 );
00170
00172 void ConvertForward (
00173 const DPOINT3D *ipoints,
00174 DPOINT3D *opoints,
00175 INT32 numpoints
00176 ) const;
00177
00179 DPOINT3D ConvertForward (
00180 const DPOINT3D ipoint
00181 ) const;
00182
00184 void ConvertInverse (
00185 const DPOINT3D *ipoints,
00186 DPOINT3D *opoints,
00187 INT32 numpoints
00188 ) const;
00189
00191 DPOINT3D ConvertInverse (
00192 const DPOINT3D ipoint
00193 ) const;
00194
00196 void ConvertForward (
00197 const DPOINT3DH *ipoints,
00198 DPOINT3DH *opoints,
00199 INT32 numpoints
00200 ) const;
00201
00203 DPOINT3DH ConvertForward (
00204 const DPOINT3DH ipoint
00205 ) const;
00206
00208 void ConvertInverse (
00209 const DPOINT3DH *ipoints,
00210 DPOINT3DH *opoints,
00211 INT32 numpoints
00212 ) const;
00213
00215 DPOINT3DH ConvertInverse (
00216 const DPOINT3DH ipoint
00217 ) const;
00218
00220 void ConvertForward (
00221 const FPOINT3D *ipoints,
00222 FPOINT3D *opoints,
00223 INT32 numpoints
00224 ) const;
00225
00227 FPOINT3D ConvertForward (
00228 const FPOINT3D ipoint
00229 ) const;
00230
00232 void ConvertInverse (
00233 const FPOINT3D *ipoints,
00234 FPOINT3D *opoints,
00235 INT32 numpoints
00236 ) const;
00237
00239 FPOINT3D ConvertInverse (
00240 const FPOINT3D ipoint
00241 ) const;
00242
00244 void ConvertForward (
00245 const FPOINT3DH *ipoints,
00246 FPOINT3DH *opoints,
00247 INT32 numpoints
00248 ) const;
00249
00251 FPOINT3DH ConvertForward (
00252 const FPOINT3DH ipoint
00253 ) const;
00254
00256 void ConvertInverse (
00257 const FPOINT3DH *ipoints,
00258 FPOINT3DH *opoints,
00259 INT32 numpoints
00260 ) const;
00261
00263 FPOINT3DH ConvertInverse (
00264 const FPOINT3DH ipoint
00265 ) const;
00266
00268 void SetIdentity (
00269 );
00270
00271 const MAT4X4& GetForward (
00272 ) const;
00273
00274 const MAT4X4& GetInverse (
00275 ) const;
00276
00277 private:
00278 #ifndef GENERATING_DOXYGEN_OUTPUT
00279 MAT4X4 m_fwd;
00280 MAT4X4 m_inv;
00281 bool m_DoHomogeneous;
00282
00284 void ApplyMatrix (
00285 const MAT4X4 mat,
00286 bool inverse
00287 );
00289 void ChkNeedHomo ();
00290 #endif // GENERATING_DOXYGEN_OUTPUT
00291 };
00292
00293
00294
00296
00297
00298 extern "C" {
00300 GEOMLIBEXPORT int FindBestTrans3D (
00301 int NumPoints,
00302 const CTRLPOINT3D* cp,
00303 MAT4X4 forward,
00304 MAT4X4 inverse
00305 );
00306
00308 GEOMLIBEXPORT int FindBestTrans3D3 (
00309 int NumPoints,
00310 const CTRLPOINT3 *cp3,
00311 MAT4X4 forward,
00312 MAT4X4 inverse
00313 );
00314
00316 GEOMLIBEXPORT void trans3dinit (
00317 MAT4X4,
00318 MAT4X4
00319 );
00320
00322 GEOMLIBEXPORT void trans3d (
00323 double ix,
00324 double iy,
00325 double iz,
00326 MAT4X4 TransMat,
00327 double *ox,
00328 double *oy,
00329 double *oz
00330 );
00331
00333 GEOMLIBEXPORT void trans3dshift (
00334 MAT4X4 m,
00335 MAT4X4 n,
00336 double dx,
00337 double dy,
00338 double dz
00339 );
00340
00342 GEOMLIBEXPORT void trans3dscale (
00343 MAT4X4 m,
00344 MAT4X4 n,
00345 double sx,
00346 double sy,
00347 double sz
00348 );
00349
00351 GEOMLIBEXPORT void trans3drot (
00352 MAT4X4 m,
00353 MAT4X4 n,
00354 double z_axis,
00355 double x_axis,
00356 double y_axis
00357 );
00358 }
00359
00360 #endif
00361