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 _CIvfWorkPlane_h_
00026 #define _CIvfWorkPlane_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
00043 class IVFMATH_API CIvfWorkPlane : public CIvfMathBase {
00044 private:
00045 double m_snapUnit;
00046
00047 CIvfVec3d m_zAxis;
00048 CIvfVec3d m_yAxis;
00049 CIvfVec3d m_xAxis;
00050
00051 double m_theta;
00052 double m_vz;
00053 double m_vy;
00054 double m_vx;
00055 double m_tz;
00056 double m_tx;
00057 double m_ty;
00058
00059 CIvfMat4d m_transformationMatrix;
00060 CIvfMat4d m_inversionMatrix;
00061 CIvfVec4d m_pointWorld;
00062 CIvfVec4d m_pointTransformed;
00063
00064 public:
00065 CIvfWorkPlane();
00066 virtual ~CIvfWorkPlane();
00067
00068 bool isClass(char* name);
00069 void getClassName(char* name);
00070
00072 void transformWorld(CIvfPoint3d* point);
00073
00075 void transform(CIvfPoint3d* point);
00076
00078 void transformWorld(double sx, double sy, double sz, double &wx, double &wy, double &wz);
00079
00081 void transform(double wx, double wy, double wz, double &sx, double &sy, double &sz);
00082
00084 void snap(double &x, double &y, double &z);
00085
00087 void setSnapUnit(double unit);
00088
00090 double getSnapUnit();
00091
00093 void intersect(double x0, double y0, double z0, double i, double j, double k, double &x, double &y, double &z);
00094
00096 void setTranslation(double tx, double ty, double tz);
00097
00099 void getTranslation(double &tx, double &ty, double &tz);
00100
00102 void setRotation(double vx, double vy, double vz, double theta);
00103
00105 void getRotation(double & vx, double & vy, double & vz, double & theta);
00106
00107 protected:
00108 void calcMatrix();
00109 };
00110
00111 #endif