TbObj.h
上传用户:kellyonhid
上传日期:2013-10-12
资源大小:932k
文件大小:2k
源码类别:

3D图形编程

开发平台:

Visual C++

  1. //############################################################
  2. // TbObj.h
  3. // Kari Pulli
  4. // Tue Jun 30 11:10:13 PDT 1998
  5. //
  6. // A base class for objects that are moved using the trackball
  7. //############################################################
  8. #ifndef _TBOBJ_H_
  9. #define _TBOBJ_H_
  10. #ifdef WIN32
  11. # include "winGLdecs.h"
  12. #endif
  13. #include <GL/gl.h>
  14. #include <fstream.h>
  15. #include <iostream.h>
  16. #include <rope.h>
  17. #include "Xform.h"
  18. #include "Pnt3.h"
  19. #include "Bbox.h"
  20. class TbObj {
  21. private:
  22.   struct TbRedoInfo {
  23.     TbObj        *self;
  24.     Xform<float>  xf;
  25.     //Pnt3         rot_ctr;
  26.   };
  27.   static vector<TbRedoInfo> undo_stack;
  28.   static int                real_size;
  29.   Xform<float> xf;        // registration/modeling transformation
  30. protected:
  31.   Pnt3         rot_ctr;   // rotation center (in local coords)
  32.   Bbox         bbox;      // bounding box (in local coords)
  33. public:
  34.   TbObj(void);
  35.   ~TbObj(void);
  36.   void         save_for_undo(void);
  37.   static void  undo(void);
  38.   static void  redo(void);
  39.   static void  clear_undo(TbObj* objToRemove = NULL);
  40.   const Pnt3  &localCenter(void)      { return rot_ctr; }
  41.   Pnt3         worldCenter(void);
  42.   const Bbox  &localBbox(void)        { return bbox; }
  43.   Bbox         worldBbox(void);
  44.   float   radius(void);
  45.   void    rotate (float q0, float q1, float q2, float q3,
  46.   bool undoable = true);
  47.   void    translate (float t0, float t1, float t2,
  48.      bool undoable = true);
  49.   void    new_rotation_center (const Pnt3 &wc);
  50.   Xform<float> getXform(void) const;
  51.   void         setXform(const Xform<float> &x,
  52. bool undoable = true);
  53. private:
  54.   bool    readXform  (istream& in);
  55.   bool    writeXform (ostream& out);
  56. public:
  57.   void    resetXform (void);
  58.   void    xformPnt   (Pnt3 &p)  { xf(p); }
  59.   void    xformInvPnt(Pnt3 &p)  { xf.apply_inv(p,p); }
  60.   void    gl_xform   (void)     { glMultMatrixf(xf); }
  61.   // These are virtual only so that we can do a dynamic
  62.   // cast to TbObj
  63.   // The input arg can be a string, the conversion is automatic
  64.   virtual bool    readXform  (const crope& baseFile);
  65.   virtual bool    writeXform (const crope& baseFile);
  66. };
  67. #endif