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_
|
---|