key_framer.h
00001 #ifndef KEY_FRAMER_H
00002 #define KEY_FRAMER_H
00003 #include <config.h>
00004 #include <qgl.h>
00005 #include <qstring.h>
00006 #include <util/watchdog.h>
00007 #include "bsurface.h"
00008
00009 namespace util
00010 {
00011
00012 using Shapes::BSplineSurface;
00013
00014 struct Frame{
00015 BSplineSurface key;
00016 char *name;
00017 double time;
00018 double scale;
00019 };
00020
00031 class KeyFramer : public util::FileObject {
00032
00033 public:
00034
00035 KeyFramer();
00036 KeyFramer(const KeyFramer&);
00037 ~KeyFramer();
00038
00039 bool Load(const char* fname);
00040 bool Save(const char* fname);
00041
00042 void reread()
00043 {
00044 std::string fn = getFilename();
00045 Load(fn.c_str());
00046 }
00047
00048 void SetParent(QGLWidget *parent)
00049 {gl_context=parent;}
00050
00051 int FindFrame(double time);
00052 double FindTime(unsigned int frame);
00053 void SetTime(double time);
00054 void SetFrame(unsigned int frame);
00055 double GetTime()
00056 {return sel_time;}
00057 unsigned int GetFrame()
00058 {return sel_frame;};
00059
00060 void AddFrame();
00061 void DeleteFrame();
00062 void LoadSurface(const char* fname);
00063
00064 void DisplayTime(double time);
00065 void DisplayFrame(unsigned int frame);
00066 void DisplayTimeline();
00067
00068
00069 void SetBoundingBox(Point2d min, Point2d max);
00070 void SetTime(Point3d pos);
00071 void SelectClosest(Point3d pos);
00072 void MoveSelect(Point3d pos);
00073 void AdvanceTime(double time_increment);
00074 void SetScale(double scale)
00075 { if(scale>0)keys[sel_frame].scale=scale;}
00076 void SetPrecision(int u,int v)
00077 { u_prec=u;v_prec=v;};
00078 BSplineSurface GetSurfaceFrame(unsigned int frame);
00079 BSplineSurface GetSurfaceFrame();
00080 BSplineSurface GetSurfaceTime(double time);
00081 BSplineSurface GetSurfaceTime();
00082
00083 private:
00084 int u_prec; int v_prec;
00085 int max_u,max_v;
00086 QGLWidget *gl_context;
00087 Point2d min;
00088 Point2d max;
00089 std::vector< Frame > keys;
00090 unsigned int sel_frame;
00091 double sel_time;
00092 double time_interval[2];
00093 };
00094
00095 }
00096 #endif