[964] | 1 | /*
|
---|
| 2 | Copyright (C) 2005-2006 Feeling Software Inc.
|
---|
| 3 | MIT License: http://www.opensource.org/licenses/mit-license.php
|
---|
| 4 | */
|
---|
| 5 | /*
|
---|
| 6 | Based on the FS Import classes:
|
---|
| 7 | Copyright (C) 2005-2006 Feeling Software Inc
|
---|
| 8 | Copyright (C) 2005-2006 Autodesk Media Entertainment
|
---|
| 9 | MIT License: http://www.opensource.org/licenses/mit-license.php
|
---|
| 10 | */
|
---|
| 11 |
|
---|
| 12 | /**
|
---|
| 13 | @file FCDAnimationChannel.h
|
---|
| 14 | This file contains the FCDAnimationChannel class.
|
---|
| 15 | */
|
---|
| 16 |
|
---|
| 17 | #ifndef _FCD_ANIMATION_CHANNEL_H_
|
---|
| 18 | #define _FCD_ANIMATION_CHANNEL_H_
|
---|
| 19 |
|
---|
| 20 | #include "FCDocument/FCDObject.h"
|
---|
| 21 |
|
---|
| 22 | class FCDocument;
|
---|
| 23 | class FCDAnimated;
|
---|
| 24 | class FCDAnimation;
|
---|
| 25 | class FCDAnimationCurve;
|
---|
| 26 |
|
---|
| 27 | /** A dynamically-sized array of animation curves. */
|
---|
| 28 | typedef vector<FCDAnimationCurve*> FCDAnimationCurveList;
|
---|
| 29 |
|
---|
| 30 | /**
|
---|
| 31 | A COLLADA animation channel.
|
---|
| 32 | Each animation channel holds the animation curves for one animatable element,
|
---|
| 33 | such as a single floating-point value, a 3D vector or a matrix.
|
---|
| 34 |
|
---|
| 35 | @see FCDAnimated
|
---|
| 36 | @ingroup FCDocument
|
---|
| 37 | */
|
---|
| 38 | class FCOLLADA_EXPORT FCDAnimationChannel : public FCDObject
|
---|
| 39 | {
|
---|
| 40 | private:
|
---|
| 41 | DeclareObjectType;
|
---|
| 42 | FCDAnimation* parent;
|
---|
| 43 |
|
---|
| 44 | // Channel target
|
---|
| 45 | string targetPointer;
|
---|
| 46 | string targetQualifier;
|
---|
| 47 |
|
---|
| 48 | // Maya-specific: the driver for this/these curves
|
---|
| 49 | string driverPointer;
|
---|
| 50 | int32 driverQualifier;
|
---|
| 51 |
|
---|
| 52 | FCDAnimationCurveList curves;
|
---|
| 53 |
|
---|
| 54 | public:
|
---|
| 55 | /** Constructor: do not use directly.
|
---|
| 56 | Instead, call the FCDAnimation::AddChannel function.
|
---|
| 57 | @param document The COLLADA document that owns the animation channel.
|
---|
| 58 | @param parent The animation sub-tree that contains the animation channel. */
|
---|
| 59 | FCDAnimationChannel(FCDocument* document, FCDAnimation* parent);
|
---|
| 60 |
|
---|
| 61 | /** Destructor: do not use directly.
|
---|
| 62 | Instead, call the FCDAnimation::ReleaseChannel function. */
|
---|
| 63 | virtual ~FCDAnimationChannel();
|
---|
| 64 |
|
---|
| 65 | /** Retrieves the animation sub-tree that contains the animation channel.
|
---|
| 66 | @return The parent animation sub-tree. */
|
---|
| 67 | FCDAnimation* GetParent() { return parent; }
|
---|
| 68 | const FCDAnimation* GetParent() const { return parent; } /**< See above. */
|
---|
| 69 |
|
---|
| 70 | /** Retrieves the list of animation curves contained within the channel.
|
---|
| 71 | @return The list of animation curves. */
|
---|
| 72 | const FCDAnimationCurveList& GetCurves() const { return curves; }
|
---|
| 73 |
|
---|
| 74 | /** Retrieves the number of animation curves contained within the channel.
|
---|
| 75 | @return The number of animation curves. */
|
---|
| 76 | size_t GetCurveCount() const { return curves.size(); }
|
---|
| 77 |
|
---|
| 78 | /** Retrieves an animation curve contained within the channel.
|
---|
| 79 | @param index The index of the animation curve.
|
---|
| 80 | @return The animation curve at the given index. This pointer will be NULL
|
---|
| 81 | if the index is out-of-bounds. */
|
---|
| 82 | FCDAnimationCurve* GetCurve(size_t index) { FUAssert(index < GetCurveCount(), return NULL); return curves.at(index); }
|
---|
| 83 | const FCDAnimationCurve* GetCurve(size_t index) const { FUAssert(index < GetCurveCount(), return NULL); return curves.at(index); } /**< See above. */
|
---|
| 84 |
|
---|
| 85 | /** Adds a new animation curve to this animation channel.
|
---|
| 86 | @return The new animation curve. */
|
---|
| 87 | FCDAnimationCurve* AddCurve();
|
---|
| 88 |
|
---|
| 89 | /** Releases an animation curve contained within this channel.
|
---|
| 90 | @todo This function is not yet implemented, as it requires
|
---|
| 91 | a lot more memory management than FCollada currently does.
|
---|
| 92 | @param curve The animation curve to release. */
|
---|
| 93 | void ReleaseCurve(FCDAnimationCurve* curve);
|
---|
| 94 |
|
---|
| 95 | /** [INTERNAL] Retrieves the target pointer prefix for this animation channel.
|
---|
| 96 | This function is used during the import of a COLLADA document to match the
|
---|
| 97 | target pointer prefixes with the animated elements.
|
---|
| 98 | @return The target pointer prefix. */
|
---|
| 99 | const string& GetTargetPointer() const { return targetPointer; }
|
---|
| 100 |
|
---|
| 101 | /** [INTERNAL] Retrieves the target qualifier for this animation channel.
|
---|
| 102 | This function is used during the import of a COLLADA document.
|
---|
| 103 | Where there is a target qualifier, there should be only one curve contained by the channel.
|
---|
| 104 | @return The target qualifier. This value may be the empty string if the channel
|
---|
| 105 | targets all the values targeted by the target pointer prefix. */
|
---|
| 106 | const string& GetTargetQualifier() const { return targetQualifier; }
|
---|
| 107 |
|
---|
| 108 | /** [INTERNAL] Enforces the tarrget pointer prefix for the animation channel.
|
---|
| 109 | This function is used during the export of a COLLADA document.
|
---|
| 110 | @param p The new target pointer prefix. */
|
---|
| 111 | void SetTargetPointer(const string& p) { targetPointer = p; }
|
---|
| 112 |
|
---|
| 113 | /** [INTERNAL] Considers the given animated element as the driver for this animation channel.
|
---|
| 114 | @param animated An animated element.
|
---|
| 115 | @return Whether the animated element is in fact the driver for the animation channel. */
|
---|
| 116 | bool LinkDriver(FCDAnimated* animated);
|
---|
| 117 |
|
---|
| 118 | /** [INTERNAL] Verifies that if a driver is used by this channel, then it was found during
|
---|
| 119 | the import of the animated elements.
|
---|
| 120 | @return The status of the verification. */
|
---|
| 121 | FUStatus CheckDriver();
|
---|
| 122 |
|
---|
| 123 | /** [INTERNAL] Reads in the animation channel from a given COLLADA XML tree node.
|
---|
| 124 | @param channelNode The COLLADA XML tree node.
|
---|
| 125 | @return The status of the import. If the status is not successful,
|
---|
| 126 | it may be dangerous to extract information from the animation channel. */
|
---|
| 127 | FUStatus LoadFromXML(xmlNode* channelNode);
|
---|
| 128 |
|
---|
| 129 | /** [INTERNAL] Writes out the animation channel to the given COLLADA XML tree node.
|
---|
| 130 | @param parentNode The COLLADA XML parent node in which to insert the animation channel.
|
---|
| 131 | @return The created element XML tree node. */
|
---|
| 132 | void WriteToXML(xmlNode* parentNode) const;
|
---|
| 133 | };
|
---|
| 134 |
|
---|
| 135 | #endif // _FCD_ANIMATION_CHANNEL_H_
|
---|