00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef _CIvfMatrixStack_h_
00023 #define _CIvfMatrixStack_h_
00024
00025 #include <ivf/ivfconfig.h>
00026 #include <ivfmath/IvfMathBase.h>
00027
00028 #include <ivfmath/IvfMat4d.h>
00029
00030 #define IVF_MATRIX_STACK_SIZE 32
00031
00032 IvfSmartPointer(CIvfMatrixStack);
00033
00043 class IVFMATH_API CIvfMatrixStack : public CIvfMathBase {
00044 private:
00045
00046 int m_currentMatrix;
00047
00048 CIvfMat4d m_matrixStack[IVF_MATRIX_STACK_SIZE];
00049 CIvfMat4d m_translateMatrix;
00050 CIvfMat4d m_rotateMatrix;
00051
00052 void initialize();
00053 public:
00055 CIvfMatrixStack();
00056
00058 virtual ~CIvfMatrixStack();
00059
00060 IvfClassInfo("CIvfMatrixStack",CIvfMathBase);
00061
00063 void pushMatrix();
00064
00066 void popMatrix();
00067
00069 void translate(double x, double y, double z);
00070
00072 void rotate(double vx, double vy, double vz, double theta);
00073
00075 void printCurrent();
00076
00078 void zero();
00079
00081 void identity();
00082
00084 void getWorldCoordinate(double lx, double ly, double lz,
00085 double &wx, double &wy, double &wz);
00086
00087 };
00088
00089 #endif