00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
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