vee_value_curve.h

Go to the documentation of this file.
00001 /* -*- C++ -*- */
00002 
00003 /* COPYRIGHT
00004  *
00005  * This file is part of the Visual Effects Engine - VEE
00006  *
00007  * Read the "VEE-LICENSE" file for the license.
00008  *
00009  * Authors & Copyright:   
00010  *
00011  * Tommi Ilmonen, Tuukka Heikura, Marko Myllymaa and 
00012  * Janne Kontkanen 2001-2004
00013  *
00014  * Additional copyrights: Tekes 2003-2004
00015  *
00016  * firstname.lastname@hut.fi
00017  *
00018  */
00019 
00020 #ifndef VEE_VALUE_CURVE_H
00021 #define VEE_VALUE_CURVE_H
00022 
00023 #include <vee_interpolators.h>
00024 #include <vee_operator.h>
00025 #include <vee_reference_object.h>
00026 
00027 
00028 #include <string>
00029 
00030 enum VEE_TimeScale {
00031   VEE_TS_LINEAR,
00032   VEE_TS_AGE_MATCH,
00033   VEE_TS_PERIODIC,
00034   VEE_TS_SIZEOF
00035 };
00036 
00039 class VEE_ValueCurve : public VEE_Operator
00040 {
00041 public:
00042   VEE_ValueCurve();
00043   virtual ~VEE_ValueCurve();
00044 
00045   virtual bool setValue(const char *, VEE_Value *);
00046 
00047   virtual void operate(VEE_Object *, float);
00048   virtual VEE_Operator * clone() const;
00049 
00050   void setId(const char *id) { m_param = id; }
00051 
00052   void appendPoint(float v, float t)
00053   { m_curve.appendPoint(v, t); }
00054   
00055   void clearCurve() { m_curve.clear(); }
00056 
00057 protected:
00058 
00059   float m_interval;
00060   float m_untilNext;
00061 
00062   std::string m_param;
00063 
00064   VEE_LinearInterpolation2<float> m_curve;
00065   
00066 };
00067 
00070 
00071 
00072 class VEE_ValueCurveMulti : public VEE_Operator
00073 {
00074 public:
00075   VEE_ValueCurveMulti();
00076   virtual ~VEE_ValueCurveMulti();
00077 
00078   virtual bool setValue(const char *, VEE_Value *);
00079 
00080   virtual void operate(VEE_Object *, float);
00081   virtual VEE_Operator * clone() const;
00082 
00083   void resize(int curves) { m_curves.resize(curves); }
00084 
00085   void setId(const char *name, int n)
00086   { expand(n); m_curves[n].m_param = name; }
00087 
00088   void appendPoint(float v, float t, int n)
00089   { expand(n); m_curves[n].m_curve.appendPoint(v, t); }
00090   
00091   void clearCurves() { m_curves.clear(); }
00092 
00093 protected:
00094 
00095   void expand(uint n) { if(n >= m_curves.size()) m_curves.resize(n+1); }
00096 
00097   float m_interval;
00098   float m_untilNext;
00099 
00100   class Data {
00101   public:
00102     std::string m_param;
00103     VEE_LinearInterpolation2<float> m_curve;
00104   };
00105 
00106   std::vector<Data> m_curves;
00107 
00108 };
00109 
00112 
00115 class VEE_ValueCurve2 : public VEE_Operator
00116 {
00117 public:
00118   VEE_ValueCurve2();
00119   virtual ~VEE_ValueCurve2();
00120 
00121   virtual bool setValue(const char *, VEE_Value *);
00122 
00123   virtual void operate(VEE_Object *, float);
00124   virtual VEE_Operator * clone() const;
00125 
00126   void setId(const char *id) { m_param = id; }
00127 
00128   void appendPoint(float v, float t)
00129   { (*m_curve).appendPoint(v, t); }
00130   
00131   void clearCurve() { (*m_curve).clear(); }
00132 
00133   void setScaling(int scaleMethod) { m_scaling = (VEE_TimeScale) scaleMethod; }
00134 
00135   void scaleValues(float scale) 
00136   { for(uint i=0; i < (*m_curve).size(); i++) (*m_curve).getPoint(i).m_value *= scale; }
00137   void scaleTimes(float scale) 
00138   { for(uint i=0; i < (*m_curve).size(); i++) (*m_curve).getPoint(i).m_time *= scale; }
00139 
00140 protected:
00141   
00142   VEE_TimeScale m_scaling;
00143 
00144   std::string m_param;
00145 
00146   int m_offset;
00147 
00148   float m_time;
00149 
00150   VEE_ReferenceObject<VEE_LinearInterpolation<float> > m_curve;
00151   
00152 };
00153 
00154 
00155 #endif

Generated on Mon Mar 12 21:09:01 2007 for VEE - The Visual Effects Engine by  doxygen 1.4.6