FCDocument/FCDAnimationCurve.h

Go to the documentation of this file.
00001 /*
00002     Copyright (C) 2005-2006 Feeling Software Inc.
00003     MIT License: http://www.opensource.org/licenses/mit-license.php
00004 */
00005 /*
00006     Based on the FS Import classes:
00007     Copyright (C) 2005-2006 Feeling Software Inc
00008     Copyright (C) 2005-2006 Autodesk Media Entertainment
00009     MIT License: http://www.opensource.org/licenses/mit-license.php
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     // Targeting information
00047     int32 targetElement;
00048     string targetQualifier;
00049 
00050     // Input information
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     // Driver information
00059     const float* inputDriver;
00060     string driverPointer;
00061 
00062     // The interpolation values follow the FUDaeInterpolation enum (FUDaeEnum.h)
00063     UInt32List interpolations;
00064 
00065     // Animation clips that depend on this curve
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_

Generated on Fri May 12 16:44:38 2006 for FCollada by  doxygen 1.4.6-NO