00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef _CIvfUcs3d_h_
00026 #define _CIvfUcs3d_h_
00027
00028 #include <ivfmath/IvfMathBase.h>
00029 #include <ivfmath/IvfVec3d.h>
00030 #include <ivfmath/IvfVec4d.h>
00031 #include <ivfmath/IvfMat4d.h>
00032 #include <ivfmath/IvfPoint3d.h>
00033
00034 IvfSmartPointer(CIvfUcs3d);
00035
00045 class IVFMATH_API CIvfUcs3d : public CIvfMathBase {
00046 private:
00047 double m_snapUnit;
00048
00049 CIvfVec3d m_zAxis;
00050 CIvfVec3d m_yAxis;
00051 CIvfVec3d m_xAxis;
00052
00053 double m_theta;
00054 double m_vz;
00055 double m_vy;
00056 double m_vx;
00057 double m_tz;
00058 double m_tx;
00059 double m_ty;
00060
00061 CIvfMat4d m_transformationMatrix;
00062 CIvfMat4d m_inversionMatrix;
00063 CIvfVec4d m_pointWorld;
00064 CIvfVec4d m_pointTransformed;
00065
00066 public:
00068 CIvfUcs3d();
00069
00071 virtual ~CIvfUcs3d();
00072
00073 IvfClassInfo("CIvfUcs3d",CIvfMathBase);
00074
00076 void transformWorld(CIvfPoint3d* point);
00077
00079 void transform(CIvfPoint3d* point);
00080
00082 void transformWorld(double sx, double sy, double sz, double &wx, double &wy, double &wz);
00083
00085 void transform(double wx, double wy, double wz, double &sx, double &sy, double &sz);
00086
00088 CIvfVec3d& transformWorld(CIvfVec3d& vector);
00089
00091 CIvfVec3d& transform(CIvfVec3d& vector);
00092
00094 void snap(double &x, double &y, double &z);
00095
00097 CIvfVec3d& snap(CIvfVec3d& vector);
00098
00100 void setSnapUnit(double unit);
00101
00103 double getSnapUnit();
00104
00106 void intersect(double x0, double y0, double z0, double i, double j, double k, double &x, double &y, double &z);
00107
00109 CIvfVec3d& intersect(CIvfVec3d &origin, CIvfVec3d &vector);
00110
00112 void setTranslation(double tx, double ty, double tz);
00113
00115 void getTranslation(double &tx, double &ty, double &tz);
00116
00118 void setRotation(double vx, double vy, double vz, double theta);
00119
00121 void getRotation(double & vx, double & vy, double & vz, double & theta);
00122
00124 CIvfVec3d& getYAxis();
00125 protected:
00126 void calcMatrix();
00127 };
00128
00129 #endif