[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 FCDLibrary.h
|
---|
| 14 | This file contains the FCDLibrary template class.
|
---|
| 15 | See the FCDLibrary.hpp file for the template implementation.
|
---|
| 16 | */
|
---|
| 17 |
|
---|
| 18 | #ifndef _FCD_LIBRARY_
|
---|
| 19 | #define _FCD_LIBRARY_
|
---|
| 20 |
|
---|
| 21 | class FCDocument;
|
---|
| 22 | class FCDEntity;
|
---|
| 23 |
|
---|
| 24 | /**
|
---|
| 25 | A COLLADA library.
|
---|
| 26 |
|
---|
| 27 | A COLLADA library holds a list of entities. There are libraries for the following entities:
|
---|
| 28 | animations (FCDAnimation), animation clips (FCDAnimationClip), meshes and splines (FCDGeometry),
|
---|
| 29 | materials (FCDMaterial), effects (FCDEffect), images (FCDImage), skins and morphers (FCDController),
|
---|
| 30 | cameras (FCDCamera), lights (FCDLight), physics models (FCDPhysicsModel), physics materials
|
---|
| 31 | (FCDPhysicsMaterial), physics scenes (FCDPhysicsSceneNode) and visual scenes (FCDSceneNode).
|
---|
| 32 |
|
---|
| 33 | The COLLADA libraries are contained within the FCDocument object.
|
---|
| 34 |
|
---|
| 35 | @ingroup FCDocument
|
---|
| 36 | */
|
---|
| 37 | template <class T>
|
---|
| 38 | class FCDLibrary
|
---|
| 39 | {
|
---|
| 40 | private:
|
---|
| 41 | FCDocument* document;
|
---|
| 42 |
|
---|
| 43 | protected:
|
---|
| 44 | /** The list type for the entities. */
|
---|
| 45 | typedef vector<T*> FCDEntityList;
|
---|
| 46 |
|
---|
| 47 | /** Entities list. This list should contain all the root entities of the correct type.
|
---|
| 48 | Note that the following entity types are tree-based, rather than list-based: FCDAnimation,
|
---|
| 49 | FCDSceneNode and FCDPhysicsSceneNode. */
|
---|
| 50 | FCDEntityList entities;
|
---|
| 51 |
|
---|
| 52 | /** Retrieves the parent document.
|
---|
| 53 | @return The parent document. */
|
---|
| 54 | inline FCDocument* GetDocument() { return document; }
|
---|
| 55 | inline const FCDocument* GetDocument() const { return document; } /**< See above. */
|
---|
| 56 |
|
---|
| 57 | public:
|
---|
| 58 | /** Constructor: do not use directly.
|
---|
| 59 | All the necessary libraries are created by the FCDocument object during its creation.
|
---|
| 60 | @param document The parent document. */
|
---|
| 61 | FCDLibrary(FCDocument* document);
|
---|
| 62 |
|
---|
| 63 | /** Destructor: do not use directly.
|
---|
| 64 | The libraries are released by the FCDocument, just before it is released. */
|
---|
| 65 | virtual ~FCDLibrary();
|
---|
| 66 |
|
---|
| 67 | /** Create a new entity within this library.
|
---|
| 68 | @return The newly created entity. */
|
---|
| 69 | T* AddEntity();
|
---|
| 70 |
|
---|
| 71 | /** Releases an entity contained within this library.
|
---|
| 72 | @param entity The entity to delete. */
|
---|
| 73 | void ReleaseEntity(T* entity);
|
---|
| 74 |
|
---|
| 75 | /** Retrieve the library entity with the given COLLADA id.
|
---|
| 76 | @param daeId The COLLADA id of the entity.
|
---|
| 77 | @return The library entity which matches the COLLADA id.
|
---|
| 78 | This pointer will be NULL if no matching entity was found. */
|
---|
| 79 | T* FindDaeId(const string& daeId);
|
---|
| 80 |
|
---|
| 81 | /** Returns whether the library contains no entities.
|
---|
| 82 | @return Whether the library is empty. */
|
---|
| 83 | inline bool IsEmpty() const { return entities.empty(); }
|
---|
| 84 |
|
---|
| 85 | /** [INTERNAL] Reads in the contents of the library from the COLLADA XML document.
|
---|
| 86 | @param node The COLLADA XML tree node to parse into entities.
|
---|
| 87 | @return The status of the import. If the status is not successful, it may be dangerous to
|
---|
| 88 | extract information from the library. */
|
---|
| 89 | virtual FUStatus LoadFromXML(xmlNode* node);
|
---|
| 90 |
|
---|
| 91 | /** [INTERNAL] Writes out the library entities to the COLLADA XML document.
|
---|
| 92 | @param node The COLLADA XML tree node in which to write the library entities. */
|
---|
| 93 | virtual void WriteToXML(xmlNode* node) const;
|
---|
| 94 |
|
---|
| 95 | /** @deprecated [INTERNAL] Retrieves the list of post-processing commands for the entities of this library.
|
---|
| 96 | @return The list of post-processing commands. */
|
---|
| 97 | StringList GetPostProcessCmds() const;
|
---|
| 98 |
|
---|
| 99 | /** Retrieve the number of entities within the library.
|
---|
| 100 | @return the number of entities contained within the library. */
|
---|
| 101 | inline size_t GetEntityCount() const { return entities.size(); }
|
---|
| 102 |
|
---|
| 103 | /** Retrieve an indexed entity from the library.
|
---|
| 104 | @param index The index of the entity to retrieve.
|
---|
| 105 | Should be within the range [0, GetEntityCount()[.
|
---|
| 106 | @return The indexed entity. */
|
---|
| 107 | inline T* GetEntity(size_t index) { FUAssert(index < GetEntityCount(), return NULL); return entities.at(index); }
|
---|
| 108 |
|
---|
| 109 | /** Retrieve an indexed entity from the library.
|
---|
| 110 | @param index The index of the entity to retrieve.
|
---|
| 111 | Should be within the range [0, GetEntityCount()[.
|
---|
| 112 | @return The indexed entity. */
|
---|
| 113 | inline const T* GetEntity(size_t index) const { FUAssert(index < GetEntityCount(), return NULL); return entities.at(index); }
|
---|
| 114 | };
|
---|
| 115 |
|
---|
| 116 | #include "FCDocument/FCDLibrary.hpp"
|
---|
| 117 |
|
---|
| 118 | #endif // _FCD_LIBRARY_
|
---|