home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1997 March / VPR9703A.ISO / VPR_DATA / DOGA / SOURCES / MEDIT.LZH / MOTION.H < prev    next >
C/C++ Source or Header  |  1995-09-29  |  3KB  |  119 lines

  1. #ifndef _MOTION_
  2. #define _MOTION_
  3. #include "parts.h"
  4. #include "matrix.h"
  5.  
  6. class Vector;
  7. class Matrix;
  8. class Bezier;
  9. class Pose;
  10. class Motion;
  11. class CameraMotion;
  12. class Mechanic;
  13. class TokenReader;
  14.  
  15.  
  16. const int BEGIN = 1;
  17. const int EyeLength = 1000;
  18.  
  19. enum DirType {DirForward, DirLinear};
  20.  
  21. class MotionData {
  22. public:
  23.     Vector rotation[2];
  24.     Vector scale[2];
  25.     Bezier *bezier;
  26.     DirType dirtype;
  27.     double speed[2];
  28.  
  29.     MotionData(Bezier *bezier);
  30.     MotionData(MotionData& md);
  31.     ~MotionData();
  32.  
  33.     void GetPosition(double t, Vector& pos, Vector& rot, Vector& scal);
  34.     void SetForward(void);
  35.     void SetAnyAxis(Vector& v1, Vector& v2);
  36.  
  37. };
  38.  
  39.  
  40. class Motion {
  41. public:
  42.     int beginframe, endframe;
  43.     int boxflag;
  44.     Mechanic *mecha;
  45.     MotionData *motiondata;
  46.     int nowframe;
  47.     Vector position, rotation, scale;
  48.  
  49.     int *point_x, *point_y, *point_z;
  50.     int *view_x, *view_y, *view_z;
  51.     int *line_1, *line_2;
  52.     int lines;
  53.  
  54.     Motion *next;
  55.  
  56.     Motion(Mechanic *mec, int beginframe, int endframe, Bezier* bez = NULL);
  57.     Motion(Motion& m);
  58.     ~Motion();
  59.  
  60.     virtual void GetPosition(int frame);
  61.     void GetMatrix(Matrix& move, Matrix& rot, Matrix& scal, int frame = -1);
  62.     Matrix GetMatrix(int frame = -1);
  63.  
  64.     void SetRotation(Vector& rot, int pos = 0);
  65.     void SetScale(Vector& scal, int pos = 0);
  66.     void SetPosition(Vector& vec, int pos = 0);
  67.     void SetForward(void);
  68.  
  69.     void ChangeMove(Vector& dir);
  70.     void ChangeFix(void);
  71.  
  72.     virtual void CalcPoints(Matrix& m);
  73.     virtual void CalcView(Matrix& m);
  74.  
  75.     virtual void CalcPointsBox(Matrix& m);
  76.     virtual void CalcViewBox(Matrix& m);
  77.  
  78.     virtual void GetName(char *str);
  79.  
  80.  
  81.     void SetMech(Mechanic *mec);
  82.     void Zoom(int begin, int end);
  83.  
  84.  
  85.     static Motion *ReadMotion(TokenReader& reader, char *token, int defaultbegin, int defaultend);
  86.     static void FileWriteList(Motion* motion, FILE *fp);
  87.     void MotionWrite(FILE *fp);
  88.     void PoseWrite(int frame, FILE *fp);
  89.  
  90.     static int FileRead(Motion* &motion, CameraMotion* &camera, Vector& light, char *filename);
  91.     static int FileWrite(Motion* motion, CameraMotion* camera, Vector& light, char *filename);
  92.  
  93. };
  94.  
  95. class CameraMotion : public Motion {
  96. public:
  97.     double angle;
  98.     Motion *target;
  99.     CameraMotion(Motion *target, int frames);
  100.     CameraMotion(Motion *m, Motion *t);
  101.  
  102.     virtual void GetPosition(int frame);
  103.     virtual void CalcPoints(Matrix& m);
  104.     virtual void CalcView(Matrix& m);
  105.     virtual void CalcPointsBox(Matrix& m);
  106.     virtual void CalcViewBox(Matrix& m);
  107.     virtual void GetName(char *str);
  108.  
  109.     void MotionWrite(FILE *fp);
  110.     void PoseWrite(int frame, FILE *fp);
  111.  
  112.     void SetAngle(double a);
  113. private:
  114.     int l1[CameraLines], l2[CameraLines];
  115.     Vector pv[CameraPoints];
  116. };
  117.  
  118.  
  119. #endif