[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 FCDocument.h
|
---|
| 14 | This file declares the COLLADA document object model top class: FCDocument.
|
---|
| 15 | */
|
---|
| 16 |
|
---|
| 17 | #ifndef _FC_DOCUMENT_H_
|
---|
| 18 | #define _FC_DOCUMENT_H_
|
---|
| 19 |
|
---|
| 20 | #include "FUtils/FUObject.h"
|
---|
| 21 |
|
---|
| 22 | template <class T> class FCDLibrary;
|
---|
| 23 | template <class T> class FUUniqueStringMapT;
|
---|
| 24 |
|
---|
| 25 | class FCDAnimation;
|
---|
| 26 | class FCDAnimationChannel;
|
---|
| 27 | class FCDAnimationClip;
|
---|
| 28 | class FCDAnimated;
|
---|
| 29 | class FCDAsset;
|
---|
| 30 | class FCDCamera;
|
---|
| 31 | class FCDController;
|
---|
| 32 | class FCDEffect;
|
---|
| 33 | class FCDGeometry;
|
---|
| 34 | class FCDImage;
|
---|
| 35 | class FCDLight;
|
---|
| 36 | class FCDMaterial;
|
---|
| 37 | class FCDMaterialLibrary;
|
---|
| 38 | class FCDObject;
|
---|
| 39 | class FCDPhysicsMaterial;
|
---|
| 40 | class FCDPhysicsModel;
|
---|
| 41 | class FCDPhysicsSceneNode;
|
---|
| 42 | class FCDTexture;
|
---|
| 43 | class FCDSceneNode;
|
---|
| 44 | class FUFileManager;
|
---|
| 45 |
|
---|
| 46 | /**
|
---|
| 47 | A layer declaration.
|
---|
| 48 | Contains a name for the layer and the ids of all the entities within the layer.
|
---|
| 49 | */
|
---|
| 50 | class FCOLLADA_EXPORT FCDLayer
|
---|
| 51 | {
|
---|
| 52 | public:
|
---|
| 53 | string name; /**< The layer name. There is no guarantee of uniqueness. */
|
---|
| 54 | StringList objects; /**< The list of COLLADA entity ids which are contained by this layer. */
|
---|
| 55 | };
|
---|
| 56 |
|
---|
| 57 | typedef vector<FCDMaterial*> FCDMaterialList; /**< A dynamically-sized array of visual material entities. */
|
---|
| 58 | typedef vector<FCDAnimated*> FCDAnimatedList; /**< A dynamically-sized array of animated values. */
|
---|
| 59 | typedef vector<FCDAnimationChannel*> FCDAnimationChannelList; /**< A dynamically-sized array of animation channels. */
|
---|
| 60 | typedef map<const float*, FCDAnimated*> FCDAnimatedValueMap; /**< A map of animatable values to animated values. */
|
---|
| 61 | typedef vector<FCDLayer*> FCDLayerList; /**< A dynamically-sized array of layer declarations. */
|
---|
| 62 | typedef vector<FCDObject*> FCDObjectList; /**< A dynamically-sized array of material entities. */
|
---|
| 63 |
|
---|
| 64 | typedef FCDLibrary<FCDAnimation> FCDAnimationLibrary; /**< A COLLADA library of animation entities. */
|
---|
| 65 | typedef FCDLibrary<FCDAnimationClip> FCDAnimationClipLibrary; /**< A COLLADA library of animation clip entities. */
|
---|
| 66 | typedef FCDLibrary<FCDCamera> FCDCameraLibrary; /**< A COLLADA library of camera entities. */
|
---|
| 67 | typedef FCDLibrary<FCDController> FCDControllerLibrary; /**< A COLLADA library of controller entities. */
|
---|
| 68 | typedef FCDLibrary<FCDGeometry> FCDGeometryLibrary; /**< A COLLADA library of geometric entities. */
|
---|
| 69 | typedef FCDLibrary<FCDImage> FCDImageLibrary; /**< A COLLADA library of images. */
|
---|
| 70 | typedef FCDLibrary<FCDLight> FCDLightLibrary; /**< A COLLADA library of light entities. */
|
---|
| 71 | typedef FCDLibrary<FCDSceneNode> FCDVisualSceneNodeLibrary; /**< A COLLADA library of visual scene nodes. */
|
---|
| 72 | typedef FCDLibrary<FCDPhysicsModel> FCDPhysicsModelLibrary; /**< A COLLADA library of physics model entities. */
|
---|
| 73 | typedef FCDLibrary<FCDPhysicsMaterial> FCDPhysicsMaterialLibrary; /**< A COLLADA library of physics material entities. */
|
---|
| 74 | typedef FCDLibrary<FCDPhysicsSceneNode> FCDPhysicsSceneLibrary; /**< A COLLADA library of physics scene nodes. */
|
---|
| 75 | typedef FUUniqueStringMapT<FUSStringBuilder> FUSUniqueStringMap; /**< A set of unique strings. */
|
---|
| 76 |
|
---|
| 77 | /** @defgroup FCDocument COLLADA Document Object Model. */
|
---|
| 78 |
|
---|
| 79 | /** The top class for the COLLADA object model.
|
---|
| 80 |
|
---|
| 81 | This class holds all the COLLADA libraries, the scene graphs and the
|
---|
| 82 | document's asset tag.
|
---|
| 83 |
|
---|
| 84 | It also holds some global information, such as the animation start and end
|
---|
| 85 | time and the layers. This global information is only exported by ColladaMaya
|
---|
| 86 | right now.
|
---|
| 87 |
|
---|
| 88 | @ingroup FCDocument COLLADA Document Object Model
|
---|
| 89 | */
|
---|
| 90 | class FCOLLADA_EXPORT FCDocument : public FUObjectContainer
|
---|
| 91 | {
|
---|
| 92 | private:
|
---|
| 93 | FUFileManager* fileManager;
|
---|
| 94 | FCDSceneNode* visualSceneRoot;
|
---|
| 95 | FCDPhysicsSceneNode* physicsSceneRoot;
|
---|
| 96 | FUSUniqueStringMap* uniqueNameMap;
|
---|
| 97 |
|
---|
| 98 | // Document parameters
|
---|
| 99 | FCDAsset* asset;
|
---|
| 100 | float lengthUnitWanted, lengthUnitConversion;
|
---|
| 101 | bool hasStartTime, hasEndTime;
|
---|
| 102 | float startTime, endTime; // Maya-only
|
---|
| 103 | FCDLayerList layers; // Maya-only
|
---|
| 104 |
|
---|
| 105 | // Parsed and merged libraries
|
---|
| 106 | FCDAnimationLibrary* animationLibrary;
|
---|
| 107 | FCDAnimationClipLibrary* animationClipLibrary;
|
---|
| 108 | FCDCameraLibrary* cameraLibrary;
|
---|
| 109 | FCDControllerLibrary* controllerLibrary;
|
---|
| 110 | FCDGeometryLibrary* geometryLibrary;
|
---|
| 111 | FCDImageLibrary* imageLibrary;
|
---|
| 112 | FCDLightLibrary* lightLibrary;
|
---|
| 113 | FCDMaterialLibrary* materialLibrary;
|
---|
| 114 | FCDPhysicsModelLibrary* physicsModelLibrary;
|
---|
| 115 | FCDPhysicsMaterialLibrary* physicsMaterialLibrary;
|
---|
| 116 | FCDPhysicsSceneLibrary* physicsSceneLibrary;
|
---|
| 117 | FCDVisualSceneNodeLibrary* visualSceneLibrary;
|
---|
| 118 |
|
---|
| 119 | // Animated values
|
---|
| 120 | FCDAnimatedList animatedValues;
|
---|
| 121 | FCDAnimatedValueMap animatedValueMap;
|
---|
| 122 |
|
---|
| 123 | StringList postCmds;
|
---|
| 124 |
|
---|
| 125 | public:
|
---|
| 126 | /** Construct a new COLLADA document. */
|
---|
| 127 | FCDocument();
|
---|
| 128 |
|
---|
| 129 | /** COLLADA document destructor. This clears out all the memory related to the document. */
|
---|
| 130 | virtual ~FCDocument();
|
---|
| 131 |
|
---|
| 132 | /** Retrieves the asset information for this COLLADA document. The asset information should always be present.
|
---|
| 133 | @return A pointer to the asset information structure. This pointer should never be NULL. */
|
---|
| 134 | FCDAsset* GetAsset() { return asset; }
|
---|
| 135 | const FCDAsset* GetAsset() const { return asset; } /**< See above. */
|
---|
| 136 |
|
---|
| 137 | /** [INTERNAL] Retrieves the local file manager for the COLLADA document. Used to resolve URIs and transform file
|
---|
| 138 | paths into their relative or absolute equivalent. May be deprecated in future versions.
|
---|
| 139 | @return The file manager for this COLLADA document. This pointer should never be NULL. */
|
---|
| 140 | FUFileManager* GetFileManager() { return fileManager; }
|
---|
| 141 | const FUFileManager* GetFileManager() const { return fileManager; } /**< See above. */
|
---|
| 142 |
|
---|
| 143 | /** Retrieves the currently selected visual scene.
|
---|
| 144 | @return The currently selected visual scene structure. */
|
---|
| 145 | FCDSceneNode* GetVisualSceneRoot() { return visualSceneRoot; }
|
---|
| 146 | const FCDSceneNode* GetVisualSceneRoot() const { return visualSceneRoot; } /**< See above. */
|
---|
| 147 |
|
---|
| 148 | /** Retrieves the currently selected physics scene.
|
---|
| 149 | @return The currently selected physics scene structure. */
|
---|
| 150 | FCDPhysicsSceneNode* GetPhysicsSceneRoot() { return physicsSceneRoot; }
|
---|
| 151 | const FCDPhysicsSceneNode* GetPhysicsSceneRoot() const { return physicsSceneRoot; } /**< See above. */
|
---|
| 152 |
|
---|
| 153 | /** @deprecated Retrieves a list of all the visual materials contained by the document.
|
---|
| 154 | @return The materials contained by this document. */
|
---|
| 155 | const FCDMaterialList& GetMaterialList();
|
---|
| 156 |
|
---|
| 157 | /** [INTERNAL] Retrieves the map of unique ids for this document.
|
---|
| 158 | @return The map of unique ids for this document. */
|
---|
| 159 | FUSUniqueStringMap* GetUniqueNameMap() { return uniqueNameMap; }
|
---|
| 160 | const FUSUniqueStringMap* GetUniqueNameMap() const { return uniqueNameMap; } /**< See above. */
|
---|
| 161 |
|
---|
| 162 | /** @deprecated Retrieves the vector pre-determined by the document as the up-axis.
|
---|
| 163 | This information is now contained within the asset structure. Please use GetAsset()->GetUpAxis().
|
---|
| 164 | @return A 3D vector for the up axis direction. */
|
---|
| 165 | const FMVector3& GetUpAxis() const;
|
---|
| 166 |
|
---|
| 167 | /** @deprecated Retrieves the length of 1 distance unit for this document, in meters. The default is 1.0,
|
---|
| 168 | which means that the 1 unit in the document is equal to 1 meter. This information is
|
---|
| 169 | now contained within the asset structure. Please use GetAsset()->GetLengthUnit().
|
---|
| 170 | @return The length of 1 distance unit for this document. */
|
---|
| 171 | float GetLengthUnit() const;
|
---|
| 172 |
|
---|
| 173 | /** [INTERNAL] Retrieves the conversion factor between the requested distance unit
|
---|
| 174 | and the document's distance unit.
|
---|
| 175 | @return The distance unit conversion factor. */
|
---|
| 176 | float GetLengthUnitConversion() const { return lengthUnitConversion; }
|
---|
| 177 |
|
---|
| 178 | /** Sets the wanted distance unit factor, in meters, for this document.
|
---|
| 179 | For example, Maya uses centimeters internally and sets the wanted distance unit factor to 0.01.
|
---|
| 180 | @param wantedLengthUnit The wanted distance unit, in meters. */
|
---|
| 181 | inline void SetLengthUnitWanted(float wantedLengthUnit) { lengthUnitWanted = wantedLengthUnit; }
|
---|
| 182 |
|
---|
| 183 | /** Returns whether a start time is being enforced for the document.
|
---|
| 184 | @return Whether the document has a start time. */
|
---|
| 185 | bool HasStartTime() const { return hasStartTime; }
|
---|
| 186 | /** Retrieves the start time set for the document.
|
---|
| 187 | @return The document start time. */
|
---|
| 188 | float GetStartTime() const { return startTime; }
|
---|
| 189 | /** Enforces a certain time as the start time for the document.
|
---|
| 190 | @param time The document start time. */
|
---|
| 191 | void SetStartTime(float time) { startTime = time; hasStartTime = true; }
|
---|
| 192 |
|
---|
| 193 | /** Returns whether a end time is being enforced for the document.
|
---|
| 194 | @return Whether the document has a end time. */
|
---|
| 195 | bool HasEndTime() const { return hasEndTime; }
|
---|
| 196 | /** Retrieves the end time set for the document.
|
---|
| 197 | @return The document end time. */
|
---|
| 198 | float GetEndTime() const { return endTime; }
|
---|
| 199 | /** Enforces a certain time as the end time for the document.
|
---|
| 200 | @param time The document end time. */
|
---|
| 201 | void SetEndTime(float time) { endTime = time; hasEndTime = true; }
|
---|
| 202 |
|
---|
| 203 | /** Retrieves the list of entity layers.
|
---|
| 204 | @return The list of entity layers. */
|
---|
| 205 | FCDLayerList& GetLayers() { return layers; }
|
---|
| 206 | const FCDLayerList& GetLayers() const { return layers; } /**< See above. */
|
---|
| 207 |
|
---|
| 208 | /** Retrieves the number of entity layers contained within the document.
|
---|
| 209 | @return The number of layers. */
|
---|
| 210 | size_t GetLayerCount() const { return layers.size(); }
|
---|
| 211 |
|
---|
| 212 | /** Retrieves a specific entity layer contained within the document.
|
---|
| 213 | @param index The index of the layer.
|
---|
| 214 | @return The entity layer. This pointer will be NULL if the index
|
---|
| 215 | is out-of-bounds. */
|
---|
| 216 | FCDLayer* GetLayer(size_t index) { FUAssert(index < GetLayerCount(), return NULL); return layers.at(index); }
|
---|
| 217 | const FCDLayer* GetLayer(size_t index) const { FUAssert(index < GetLayerCount(), return NULL); return layers.at(index); }
|
---|
| 218 |
|
---|
| 219 | /** Adds an entity layer to the document.
|
---|
| 220 | @return The new layer. */
|
---|
| 221 | FCDLayer* AddLayer();
|
---|
| 222 |
|
---|
| 223 | /** Releases an entity layer from the document
|
---|
| 224 | @param layer The layer to release. */
|
---|
| 225 | void ReleaseLayer(FCDLayer* layer);
|
---|
| 226 |
|
---|
| 227 | /** Retrieves the animation library. The animation library contains the animation curves
|
---|
| 228 | within a tree structure. To create and find animation curves, do not use the animation
|
---|
| 229 | library directly: use the FCDAnimated class, the FindAnimatedValue() function and the
|
---|
| 230 | RegisterAnimatedValue() function.
|
---|
| 231 | @return The animation library. */
|
---|
| 232 | FCDAnimationLibrary* GetAnimationLibrary() { return animationLibrary; }
|
---|
| 233 | const FCDAnimationLibrary* GetAnimationLibrary() const { return animationLibrary; } /**< See above. */
|
---|
| 234 |
|
---|
| 235 | /** Retrieves the animation clip library. The animation clip library contains a list of animation clips.
|
---|
| 236 | Each animation clip instantiates nodes from the animation library. Sections of the animation curves
|
---|
| 237 | belonging to the instantiated animation nodes are thereby packaged together as animation clips.
|
---|
| 238 | @return The animation clip library. */
|
---|
| 239 | FCDAnimationClipLibrary* GetAnimationClipLibrary() { return animationClipLibrary; }
|
---|
| 240 | const FCDAnimationClipLibrary* GetAnimationClipLibrary() const { return animationClipLibrary; } /**< See above. */
|
---|
| 241 |
|
---|
| 242 | /** Retrieves the camera library. The camera library contains a list of cameras, which may be
|
---|
| 243 | instantiated within the scene graph. COLLADA supports two camera types: perspective and orthographic.
|
---|
| 244 | @return The camera library. */
|
---|
| 245 | FCDCameraLibrary* GetCameraLibrary() { return cameraLibrary; }
|
---|
| 246 | const FCDCameraLibrary* GetCameraLibrary() const { return cameraLibrary; } /**< See above. */
|
---|
| 247 |
|
---|
| 248 | /** Retrieves the controller library. The controller library contains a list of controllers, which may
|
---|
| 249 | be instantiated within the scene graph. COLLADA supports two controller types: skin and morph.
|
---|
| 250 | @return The controller library. */
|
---|
| 251 | FCDControllerLibrary* GetControllerLibrary() { return controllerLibrary; }
|
---|
| 252 | const FCDControllerLibrary* GetControllerLibrary() const { return controllerLibrary; } /**< See above. */
|
---|
| 253 |
|
---|
| 254 | /** Retrieves the geometry library. The geometry library contains a list of basic geometries, which may
|
---|
| 255 | be instantiated within the scene graph and may be used by controllers.
|
---|
| 256 | COLLADA supports two geometry types: mesh and spline.
|
---|
| 257 | @return The geometry library. */
|
---|
| 258 | FCDGeometryLibrary* GetGeometryLibrary() { return geometryLibrary; }
|
---|
| 259 | const FCDGeometryLibrary* GetGeometryLibrary() const { return geometryLibrary; } /**< See above. */
|
---|
| 260 |
|
---|
| 261 | /** Retrieves the image library. The image library contains a list of images. Images are used
|
---|
| 262 | by effects for textures.
|
---|
| 263 | @return The image library. */
|
---|
| 264 | FCDImageLibrary* GetImageLibrary() { return imageLibrary; }
|
---|
| 265 | const FCDImageLibrary* GetImageLibrary() const { return imageLibrary; } /**< See above. */
|
---|
| 266 |
|
---|
| 267 | /** Retrieves the light library. The light library contains a list of light, which may be
|
---|
| 268 | instantiated within the scene graph. COLLADA supports four light types: ambient, directional,
|
---|
| 269 | point and spot lights.
|
---|
| 270 | @return The light library. */
|
---|
| 271 | FCDLightLibrary* GetLightLibrary() { return lightLibrary; }
|
---|
| 272 | const FCDLightLibrary* GetLightLibrary() const { return lightLibrary; } /**< See above. */
|
---|
| 273 |
|
---|
| 274 | /** Retrieves the visual material library. The visual material library contains a list of visual materials,
|
---|
| 275 | which are bound to mesh polygons within the scene graph. A visual material instantiates an effect and
|
---|
| 276 | presets the effect parameters for a given visual result.
|
---|
| 277 | @return The visual material library. */
|
---|
| 278 | FCDMaterialLibrary* GetMaterialLibrary() { return materialLibrary; }
|
---|
| 279 | const FCDMaterialLibrary* GetMaterialLibrary() const { return materialLibrary; } /**< See above. */
|
---|
| 280 |
|
---|
| 281 | /** Retrieves the effect library. The effect library contains a list of effects, which may be instantiated
|
---|
| 282 | by materials. An effect defines an interface for a rendering shader. A ColladaFX effect may contain multiple
|
---|
| 283 | passes and techniques for different platforms or level of details.
|
---|
| 284 | @return The effect library. */
|
---|
| 285 | FCDMaterialLibrary* GetEffectLibrary() { return materialLibrary; }
|
---|
| 286 | const FCDMaterialLibrary* GetEffectLibrary() const { return materialLibrary; } /**< See above. */
|
---|
| 287 |
|
---|
| 288 | /** Retrieves the visual scene library. The visual scene library contains an acyclic directed graph of
|
---|
| 289 | visual scene nodes: a visual scene node contains one or more parent nodes and zero or more child nodes.
|
---|
| 290 | A visual scene node also contains 3D transformations: translation, rotation, scale, skew, as well as
|
---|
| 291 | the compound transformations: lookAt and matrix. A visual scene node also contains instances of
|
---|
| 292 | geometries, controllers, cameras and/or lights. Only one visual scene should be used at one time
|
---|
| 293 | by the global scene.
|
---|
| 294 | @return The visual scene library. */
|
---|
| 295 | FCDVisualSceneNodeLibrary* GetVisualSceneLibrary() { return visualSceneLibrary; }
|
---|
| 296 | const FCDVisualSceneNodeLibrary* GetVisualSceneLibrary() const { return visualSceneLibrary; } /**< See above. */
|
---|
| 297 |
|
---|
| 298 | /** Retrieves the physics model library. The physics model library contains a list of physics models.
|
---|
| 299 | @return The physics model library. */
|
---|
| 300 | FCDPhysicsModelLibrary* GetPhysicsModelLibrary() { return physicsModelLibrary; }
|
---|
| 301 | const FCDPhysicsModelLibrary* GetPhysicsModelLibrary() const { return physicsModelLibrary; } /**< See above. */
|
---|
| 302 |
|
---|
| 303 | /** Retrieves the physics material library. The physics material library contains a list of physics material.
|
---|
| 304 | @return The physics material library. */
|
---|
| 305 | FCDPhysicsMaterialLibrary* GetPhysicsMaterialLibrary() { return physicsMaterialLibrary; }
|
---|
| 306 | const FCDPhysicsMaterialLibrary* GetPhysicsMaterialLibrary() const { return physicsMaterialLibrary; } /**< See above. */
|
---|
| 307 |
|
---|
| 308 | /** Retrieves the physics scene library. The physics scene library contains an acyclic directed graph of
|
---|
| 309 | physics scene nodes.
|
---|
| 310 | @return The physics scene library. */
|
---|
| 311 | FCDPhysicsSceneLibrary* GetPhysicsSceneLibrary() { return physicsSceneLibrary;}
|
---|
| 312 | const FCDPhysicsSceneLibrary* GetPhysicsSceneLibrary() const { return physicsSceneLibrary;} /**< See above. */
|
---|
| 313 |
|
---|
| 314 | /** Insert a new visual scene within the visual scene library.
|
---|
| 315 | The new visual scene will be used as the root visual scene.
|
---|
| 316 | @return The newly created visual scene. */
|
---|
| 317 | FCDSceneNode* AddVisualScene();
|
---|
| 318 |
|
---|
| 319 | /** Insert a new physics scene within the physics material library.
|
---|
| 320 | The new physics scene will be used as the root physics scene.
|
---|
| 321 | @return The newly created physics scene. */
|
---|
| 322 | FCDPhysicsSceneNode* AddPhysicsScene();
|
---|
| 323 |
|
---|
| 324 | /** [INTERNAL] Retrieves all the animation channels which include a given target pointer.
|
---|
| 325 | @param pointer A valid COLLADA target pointer. Example: "node01/translate.X".
|
---|
| 326 | @param channels A list to be filled with the animation channels which target the given pointer.
|
---|
| 327 | This list is not emptied by the function. If no animation channels are found, this list will be empty. */
|
---|
| 328 | void FindAnimationChannels(const string& pointer, FCDAnimationChannelList& channels);
|
---|
| 329 |
|
---|
| 330 | /** [INTERNAL] Retrieves the array indices of animation channels which target the given XML node.
|
---|
| 331 | @param targetArray A XML node that contains an array of animatable values.
|
---|
| 332 | @param animatedIndices A list to be filled with the array indices of the animation channels
|
---|
| 333 | which target the given XML node. If no animation channel indices are found, this list will be empty. */
|
---|
| 334 | void FindAnimationChannelsArrayIndices(xmlNode* targetArray, Int32List& animatedIndices);
|
---|
| 335 |
|
---|
| 336 | /** Retrieves the animation tree node that matches the given COLLADA id.
|
---|
| 337 | @param daeId A valid COLLADA id.
|
---|
| 338 | @return The animation tree node. This pointer will be NULL if
|
---|
| 339 | no matching animation tree node was found. */
|
---|
| 340 | FCDAnimation* FindAnimation(const string& daeId);
|
---|
| 341 |
|
---|
| 342 | /** Retrieves the animation clip that matches the given COLLADA id.
|
---|
| 343 | @param daeId A valid COLLADA id.
|
---|
| 344 | @return The animation clip. This pointer will be NULL if
|
---|
| 345 | no matching animation clip was found. */
|
---|
| 346 | FCDAnimationClip* FindAnimationClip(const string& daeId);
|
---|
| 347 |
|
---|
| 348 | /** Retrieves the camera that matches the given COLLADA id.
|
---|
| 349 | @param daeId A valid COLLADA id.
|
---|
| 350 | @return The camera. This pointer will be NULL if no matching camera was found. */
|
---|
| 351 | FCDCamera* FindCamera(const string& daeId);
|
---|
| 352 |
|
---|
| 353 | /** Retrieves the controller that matches the given COLLADA id.
|
---|
| 354 | @param daeId A valid COLLADA id.
|
---|
| 355 | @return The controller. This pointer will be NULL if no matching controller was found. */
|
---|
| 356 | FCDController* FindController(const string& daeId);
|
---|
| 357 |
|
---|
| 358 | /** Retrieves the effect that matches the given COLLADA id.
|
---|
| 359 | @param daeId A valid COLLADA id.
|
---|
| 360 | @return The effect. This pointer will be NULL if no matching effect was found. */
|
---|
| 361 | FCDEffect* FindEffect(const string& daeId);
|
---|
| 362 |
|
---|
| 363 | /** Retrieves the geometry that matches the given COLLADA id.
|
---|
| 364 | @param daeId A valid COLLADA id.
|
---|
| 365 | @return The geometry. This pointer will be NULL if no matching geometry was found. */
|
---|
| 366 | FCDGeometry* FindGeometry(const string& daeId);
|
---|
| 367 |
|
---|
| 368 | /** Retrieves the image that matches the given COLLADA id.
|
---|
| 369 | @param daeId A valid COLLADA id.
|
---|
| 370 | @return The image. This pointer will be NULL if no matching image was found. */
|
---|
| 371 | FCDImage* FindImage(const string& daeId);
|
---|
| 372 |
|
---|
| 373 | /** Retrieves the light that matches the given COLLADA id.
|
---|
| 374 | @param daeId A valid COLLADA id.
|
---|
| 375 | @return The light. This pointer will be NULL if no matching light was found. */
|
---|
| 376 | FCDLight* FindLight(const string& daeId);
|
---|
| 377 |
|
---|
| 378 | /** Retrieves the visual material that matches the given COLLADA id.
|
---|
| 379 | @param daeId A valid COLLADA id.
|
---|
| 380 | @return The visual material. This pointer will be NULL if no matching visual material was found. */
|
---|
| 381 | FCDMaterial* FindMaterial(const string& daeId);
|
---|
| 382 |
|
---|
| 383 | /** @deprecated Retrieves the texture that matches the given COLLADA id.
|
---|
| 384 | @param daeId A valid COLLADA id.
|
---|
| 385 | @return The texture. This pointer will be NULL if no matching texture was found. */
|
---|
| 386 | FCDTexture* FindTexture(const string& daeId);
|
---|
| 387 |
|
---|
| 388 | /** Retrieves the visual scene that matches the given COLLADA id.
|
---|
| 389 | @param daeId A valid COLLADA id.
|
---|
| 390 | @return The visual scene. This pointer will be NULL if no matching visual scene was found. */
|
---|
| 391 | FCDSceneNode* FindVisualScene(const string& daeId);
|
---|
| 392 |
|
---|
| 393 | /** Retrieves the physics scene that matches the given COLLADA id.
|
---|
| 394 | @param daeId A valid COLLADA id.
|
---|
| 395 | @return The physics scene. This pointer will be NULL if no matching physics scene was found. */
|
---|
| 396 | FCDPhysicsSceneNode* FindPhysicsScene(const string& daeId);
|
---|
| 397 |
|
---|
| 398 | /** Retrieves the physics material that matches the given COLLADA id.
|
---|
| 399 | @param daeId A valid COLLADA id.
|
---|
| 400 | @return The physics material. This pointer will be NULL if no matching physics material was found. */
|
---|
| 401 | FCDPhysicsMaterial* FindPhysicsMaterial(const string& daeId);
|
---|
| 402 |
|
---|
| 403 | /** Retrieves the physics model that matches the given COLLADA id.
|
---|
| 404 | @param daeId A valid COLLADA id.
|
---|
| 405 | @return The physics model. This pointer will be NULL if no matching physics model was found. */
|
---|
| 406 | FCDPhysicsModel* FindPhysicsModel(const string& daeId);
|
---|
| 407 |
|
---|
| 408 | /** Retrieves the visual scene node that matches the given COLLADA id.
|
---|
| 409 | This method searches through all the visual scenes within the visual scene library and
|
---|
| 410 | their child visual scene nodes to find the correct visual scene node.
|
---|
| 411 | @param daeId A valid COLLADA id.
|
---|
| 412 | @return The visual scene node. This pointer will be NULL if no matching visual scene node was found. */
|
---|
| 413 | FCDSceneNode* FindSceneNode(const string& daeId);
|
---|
| 414 |
|
---|
| 415 | /** [INTERNAL] Registers an animated value with the document. All animated values are
|
---|
| 416 | listed within the document.
|
---|
| 417 | @param animated The new animated value to list within the document. */
|
---|
| 418 | void RegisterAnimatedValue(FCDAnimated* animated);
|
---|
| 419 |
|
---|
| 420 | /** [INTERNAL] Unregisters an animated value of the document. All animated values are
|
---|
| 421 | listed within the document. This function must be called before deleting an animated value.
|
---|
| 422 | @param animated The animated value to un-list from the document. */
|
---|
| 423 | void UnregisterAnimatedValue(FCDAnimated* animated);
|
---|
| 424 |
|
---|
| 425 | /** [INTERNAL] Links the given animated value as a possible driver to other animated value(s). This step is
|
---|
| 426 | done during the import, after new animated values are imported. The whole list of animated values is checked
|
---|
| 427 | for potential driven values.
|
---|
| 428 | @param animated The animated value to verify.
|
---|
| 429 | @return Whether a driver was found. */
|
---|
| 430 | bool LinkDriver(FCDAnimated* animated);
|
---|
| 431 |
|
---|
| 432 | /** Retrieves an animated value given an animatable value.
|
---|
| 433 | @param ptr A pointer to an animatable value contained within the document.
|
---|
| 434 | @return The animated value. This pointer will NULL if no matching animated value was found. */
|
---|
| 435 | FCDAnimated* FindAnimatedValue(float* ptr);
|
---|
| 436 | const FCDAnimated* FindAnimatedValue(const float* ptr) const; /**< See above. */
|
---|
| 437 |
|
---|
| 438 | /** [INTERNAL] Retrieves an animated value given a COLLADA target pointer. Used during the resolving of drivers/driven
|
---|
| 439 | animated values.
|
---|
| 440 | @param fullyQualifiedTarget A valid COLLADA target pointer.
|
---|
| 441 | @return A pointer to the animatable value. */
|
---|
| 442 | const float* FindAnimatedTarget(const string& fullyQualifiedTarget);
|
---|
| 443 |
|
---|
| 444 | /** @deprecated Retrieves an animated value associated with a shader attribute, given the id of the material.
|
---|
| 445 | Do not use this function. Instead, find the material/effect within its library,
|
---|
| 446 | find the parameter and use the FindAnimatedValue function on its animatable value(s).
|
---|
| 447 | @param shader A valid material id.
|
---|
| 448 | @param attribute A valid attribute sub-id.
|
---|
| 449 | @return The animated value. This pointer will be NULL if no matching animated value was found. */
|
---|
| 450 | const FCDAnimated* FindNamedAnimated(const string& shader, const string& attribute) const;
|
---|
| 451 |
|
---|
| 452 | /** Retrieves whether a given animatable value is animated.
|
---|
| 453 | @param ptr The animatable value.
|
---|
| 454 | @return Whether the animatable value is animated. */
|
---|
| 455 | bool IsValueAnimated(const float* ptr) const;
|
---|
| 456 |
|
---|
| 457 | /** Loads a COLLADA file into this document object. This function appends into the document object all
|
---|
| 458 | the COLLADA assets found within the file identified by the given filename.
|
---|
| 459 | @param filename An OS-dependant filename.
|
---|
| 460 | @return The status of the import. If the status is not successful, it may be dangerous to
|
---|
| 461 | extract information from the document. */
|
---|
| 462 | FUStatus LoadFromFile(const fstring& filename);
|
---|
| 463 |
|
---|
| 464 | /** Loads a COLLADA string into this document object. This function appends into the document object all
|
---|
| 465 | the COLLADA assets found within the given string. The string should be in XML format.
|
---|
| 466 | @param basePath The base file path for this import. Used when transforming the relative filenames
|
---|
| 467 | found within the COLLADA string into absolute and OS-dependent filenames.
|
---|
| 468 | @param text The COLLADA string.
|
---|
| 469 | @return The status of the import. If the status is not successful, it may be dangerous to
|
---|
| 470 | extract information from the document. */
|
---|
| 471 | FUStatus LoadFromText(const fstring& basePath, const fchar* text);
|
---|
| 472 |
|
---|
| 473 | /** [INTERNAL] Reads the full document information from the given XML node tree. This step is done after
|
---|
| 474 | a successfull import, by LibXML2, of the COLLADA string/file into a full XML node tree.
|
---|
| 475 | @param colladaNode The base XML node tree to parse.
|
---|
| 476 | @return The status of the import. If the status is not successful, it may be dangerous to
|
---|
| 477 | extract information from the document. */
|
---|
| 478 | FUStatus LoadDocumentFromXML(xmlNode* colladaNode);
|
---|
| 479 |
|
---|
| 480 | /** Writes the document out to a file identified by its OS-dependent filename. This function is done
|
---|
| 481 | in two steps. First, the document is fully translated into a XML node tree. Then, the XML node tree
|
---|
| 482 | is written to a file by LibXML2.
|
---|
| 483 | @param filename The OS-dependent filename.
|
---|
| 484 | @return The status of the import. If the status is not successful, it may be dangerous to
|
---|
| 485 | extract information from the document. */
|
---|
| 486 | FUStatus WriteToFile(const fstring& filename) const;
|
---|
| 487 |
|
---|
| 488 | /** [INTERNAL] Writes out the document to a XML node tree. This is the first step of the document
|
---|
| 489 | export. This function traverses the full COLLADA document, writing all the entities into
|
---|
| 490 | the given XML node tree.
|
---|
| 491 | @param colladaNode The base XML node tree to write to.
|
---|
| 492 | @return The status of the import. If the status is not successful, it may be dangerous to
|
---|
| 493 | extract information from the document. */
|
---|
| 494 | FUStatus WriteDocumentToXML(xmlNode* colladaNode) const;
|
---|
| 495 |
|
---|
| 496 | /** [INTERNAL] Writes out the animation curves contained within an animated value to the given XML node tree.
|
---|
| 497 | @param value An animatable value.
|
---|
| 498 | @param valueNode The XML node associated with the animatable value. This XML node is used to generate a
|
---|
| 499 | valid COLLADA target pointer.
|
---|
| 500 | @param wantedSid The sub-id for the animatable value. If the animatable value is animated, this sub-id
|
---|
| 501 | will be added as an attribute to the XML node. If another node, within the sid range already uses this sub-id,
|
---|
| 502 | a unique sub-id will be generated using the wanted sub-id as a base.
|
---|
| 503 | @param arrayElement The array index for this animatable value. Defaults to -1, which implies that the
|
---|
| 504 | animatable value does not belong to an array. */
|
---|
| 505 | void WriteAnimatedValueToXML(const float* value, xmlNode* valueNode, const char* wantedSid, int32 arrayElement = -1) const;
|
---|
| 506 |
|
---|
| 507 | /** @deprecated Retrieves a list of post-processing commands.
|
---|
| 508 | @return The list of post-processing commands. */
|
---|
| 509 | const StringList& GetPostProcessCmds() const { return postCmds; }
|
---|
| 510 |
|
---|
| 511 | /** @deprecated Retrieves the list of the animated values defined within the document.
|
---|
| 512 | Do not use this function: use FindAnimatedValue() instead.
|
---|
| 513 | @return The list of animated values defined within the document. */
|
---|
| 514 | const FCDAnimatedList& getAnimatedValues() { return animatedValues; }
|
---|
| 515 | };
|
---|
| 516 |
|
---|
| 517 | #endif //_FC_DOCUMENT_H_
|
---|