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 _CIvfCoordinateSystem_h_
00026 #define _CIvfCoordinateSystem_h_
00027
00028 #include <ivfmath/IvfMat4d.h>
00029 #include <ivfmath/IvfVec3d.h>
00030 #include <ivfmath/IvfPoint3d.h>
00031
00032 #include <ivf/IvfComposite.h>
00033 #include <ivf/IvfGrid.h>
00034
00035 IvfSmartPointer(CIvfCoordinateSystem);
00036
00047 class IVF_API CIvfCoordinateSystem : public CIvfComposite {
00048 public:
00049 CIvfGrid* getGrid();
00051 CIvfCoordinateSystem ();
00052
00054 virtual ~CIvfCoordinateSystem ();
00055
00056 IvfClassInfo("CIvfCoordinateSystem",CIvfComposite);
00057
00059 void setAxisState(TObjectState state);
00060
00062 void setGridState(TObjectState state);
00063
00069 void setWorkspace(double size);
00070
00076 void setDrawSubDivision(bool flag);
00077
00079 void setAxisType(int type);
00080
00082 void transformWorld(CIvfPoint3d* point);
00083
00085 void transform(CIvfPoint3d* point);
00086
00088 void transformWorld(double sx, double sy, double sz, double &wx, double &wy, double &wz);
00090 void transform(double wx, double wy, double wz, double &sx, double &sy, double &sz);
00091
00093 void snap(double &x, double &y, double &z);
00094
00096 void setSnapUnit(double unit);
00097
00099 double getSnapUnit();
00100
00102 void alignShape(CIvfShape* shape);
00103
00105 void intersect(double x0, double y0, double z0, double i, double j, double k, double &x, double &y, double &z);
00106
00108 void setTranslation(double tx, double ty, double tz);
00109
00111 void getTranslation(double &tx, double &ty, double &tz);
00113 void setRotation(double vx, double vy, double vz, double theta);
00115 void getRotation(double & vx, double & vy, double & vz, double & theta);
00116
00118 CIvfAxis* getAxisShape();
00119
00120
00121
00122 void setTempYTranslation(double value);
00123 private:
00124 double m_snapUnit;
00125
00126
00127 CIvfGrid* m_grid;
00128
00129 CIvfVec3d m_zAxis;
00130 CIvfVec3d m_yAxis;
00131 CIvfVec3d m_xAxis;
00132
00133 double m_theta;
00134 double m_vz;
00135 double m_vy;
00136 double m_vx;
00137 double m_tz;
00138 double m_tx;
00139 double m_ty;
00140 double m_tempYTranslation;
00141
00142
00143
00144 CIvfMat4d m_transformationMatrix;
00145 CIvfMat4d m_inversionMatrix;
00146 CIvfVec4d m_pointWorld;
00147 CIvfVec4d m_pointTransformed;
00148
00149 protected:
00150 void calcMatrix();
00151 };
00152 #endif
00153