00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00017 #ifndef _FCD_ANIMATION_CURVE_H_
00018 #define _FCD_ANIMATION_CURVE_H_
00019
00020 #include "FUtils/FUDaeEnum.h"
00021 #include "FCDocument/FCDObject.h"
00022
00023 class FCDAnimationClip;
00024 class FCDAnimationChannel;
00025
00026 typedef vector<FCDAnimationClip*> FCDAnimationClipList;
00027 typedef float (*FCDConversionFunction)(float v);
00040 class FCOLLADA_EXPORT FCDAnimationCurve : public FCDObject
00041 {
00042 private:
00043 DeclareObjectType;
00044 FCDAnimationChannel* parent;
00045
00046
00047 int32 targetElement;
00048 string targetQualifier;
00049
00050
00051 FloatList keys, keyValues;
00052 FloatList inTangents, outTangents;
00053 FloatList inTangentWeights, outTangentWeights;
00054 bool isWeightedCurve;
00055 FUDaeInfinity::Infinity preInfinity;
00056 FUDaeInfinity::Infinity postInfinity;
00057
00058
00059 const float* inputDriver;
00060 string driverPointer;
00061
00062
00063 UInt32List interpolations;
00064
00065
00066 FCDAnimationClipList clips;
00067
00068 public:
00075 FCDAnimationCurve(FCDocument* document, FCDAnimationChannel* parent);
00076
00079 virtual ~FCDAnimationCurve();
00080
00083 inline FCDAnimationChannel* GetParent() { return parent; }
00084 inline const FCDAnimationChannel* GetParent() const { return parent; }
00088 inline FloatList& GetKeys() { return keys; }
00089 inline const FloatList& GetKeys() const { return keys; }
00093 inline FloatList& GetKeyValues() { return keyValues; }
00094 inline const FloatList& GetKeyValues() const { return keyValues; }
00101 inline UInt32List& GetInterpolations() { return interpolations; }
00102 inline const UInt32List& GetInterpolations() const { return interpolations; }
00107 inline FloatList& GetInTangents() { return inTangents; }
00108 inline const FloatList& GetInTangents() const { return inTangents; }
00113 inline FloatList& GetOutTangents() { return outTangents; }
00114 inline const FloatList& GetOutTangents() const { return outTangents; }
00121 inline FloatList& GetInTangentWeights() { return inTangentWeights; }
00122 inline const FloatList& GetInTangentWeights() const { return inTangentWeights; }
00129 inline FloatList& GetOutTangentWeights() { return outTangentWeights; }
00130 inline const FloatList& GetOutTangentWeights() const { return outTangentWeights; }
00135 inline bool IsWeightedCurve() const { return isWeightedCurve; }
00136
00140 inline void SetWeightedCurveFlag(bool _isWeightedCurve) { isWeightedCurve = _isWeightedCurve; }
00141
00146 inline FUDaeInfinity::Infinity GetPreInfinity() const { return preInfinity; }
00147
00152 inline void SetPreInfinity(FUDaeInfinity::Infinity infinity) { preInfinity = infinity; }
00153
00158 inline FUDaeInfinity::Infinity GetPostInfinity() const { return postInfinity; }
00159
00164 inline void SetPostInfinity(FUDaeInfinity::Infinity infinity) { postInfinity = infinity; }
00165
00169 inline const float* GetDriver() const { return inputDriver; }
00170
00174 inline void SetDriver(const float* driver) { inputDriver = driver; }
00175
00178 inline FCDAnimationClipList& GetClips() { return clips; }
00179 inline const FCDAnimationClipList& GetClips() const { return clips; }
00183 void Ready();
00184
00187 FCDAnimationCurve* Clone();
00188
00192 void ConvertValues(FCDConversionFunction valueConversion, FCDConversionFunction tangentConversion);
00193
00197 void ConvertInputs(FCDConversionFunction timeConversion, FCDConversionFunction tangentWeightConversion);
00198
00202 float Evaluate(float input) const;
00203
00206 inline void RegisterAnimationClip(FCDAnimationClip* clip) { clips.push_back(clip); }
00207
00212 void WriteSourceToXML(xmlNode* parentNode, const string& baseId) const;
00213
00220 xmlNode* WriteSamplerToXML(xmlNode* parentNode, const string& baseId) const;
00221
00229 xmlNode* WriteChannelToXML(xmlNode* parentNode, const string& baseId, const char* targetPointer) const;
00230
00235 inline int32 GetTargetElement() const { return targetElement; }
00236
00241 inline const string& GetTargetQualifier() const { return targetQualifier; }
00242
00246 inline void SetTargetElement(int32 e) { targetElement = e; }
00247
00251 inline void SetTargetQualifier(const string& q) { targetQualifier = q; }
00252
00255 inline const string& GetDriverPointer() const { return driverPointer; }
00256
00260 inline void SetDriverPointer(const string& p) { driverPointer = p; }
00261 };
00262
00263 #endif // _FCD_ANIMATION_CURVE_H_