Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/ColladaPlugin/include/OgreColladaLibrary.h @ 21

Last change on this file since 21 was 21, checked in by nicolasc, 17 years ago

added ogreode and Colladaplugin

File size: 3.9 KB
Line 
1/**
2 * This source file is part of OgreColladaPlugin
3 * an addon for OGRE (Object-oriented Graphics Rendering Engine)
4 * For the latest info, see http://www.ogre3d.org/
5 *
6 * This program is free software; you can redistribute it and/or modify it under
7 * the terms of the GNU Lesser General Public License as published by the Free Software
8 * Foundation; either version 2 of the License, or (at your option) any later
9 * version.
10
11 * This program is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
14
15 * You should have received a copy of the GNU Lesser General Public License along with
16 * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
17 * Place - Suite 330, Boston, MA 02111-1307, USA, or go to
18 * http://www.gnu.org/copyleft/lesser.txt.
19 *
20 * @author      Philipp Hartl
21 * @see         README
22 */
23
24#ifndef __COLLADA_LIBRARY_H__
25#define __COLLADA_LIBRARY_H__
26
27#include "OgreColladaPrerequisites.h"
28
29namespace Ogre
30{
31        namespace ColladaLibrarySpecific
32        {
33                /**
34                 * <library type="...">
35                */
36                enum Type
37                {
38                        ANIMATION = 0,
39                        CAMERA,
40                        CODE,
41                        CONTROLLER,
42                        GEOMETRY,
43                        IMAGE,
44                        LIGHT,
45                        MATERIAL,
46                        PROGRAM,
47                        TEXTURE,
48
49                        UNKNOWN = -1
50                };
51
52                /**
53                 * compare the string with collada syntax
54                 *
55                 * @param       s       the semantic string we have
56                 * @return      the corresponding library type
57                 */
58                Type getType(const String &s);
59        }
60
61        /**
62         * a template libray class
63         * used by all possible library types
64         * holds all entities of the library type T
65         */
66        template <class T> 
67        class ColladaLibrary
68        {
69        public:
70                ColladaLibrary();
71                ~ColladaLibrary();
72
73                /**
74                 * create new instance of library type
75                 * for each instance importId() is called
76                 *
77                 * @param       doc             everything belongs to the document
78                 * @param       node    the library node we want to import
79                 * @return      void
80                 */
81                void initialise(ColladaDocument *doc, xmlNode *node);
82
83                /**
84                 * find library entity by identifier and return a pointer on it
85                 *
86                 * @param       id      the string identifier
87                 * @return      a pointer at existing instance or NULL
88                 */
89                T *getEntity(const String &id) const;
90
91        private:
92                typedef std::vector<T *> ColladaLibraryVector;
93
94                ColladaLibraryVector mEntities;         // a vector with all entities of <library>
95        };
96
97        /**
98         * library container
99         * holds all <library> nodes in collada document
100         */
101        class ColladaLibraryContainer
102        {
103        public:
104                ColladaLibraryContainer(ColladaDocument *doc);
105                ~ColladaLibraryContainer(void);
106
107                /**
108                 * import the <library> node, identified by its id
109                 * look in possible library entities, CAMERA, GEOMETRY, LIGHT, ...
110                 *
111                 * @param       id      the string identifier
112                 * @return      a pointer on the successfully imported node, NULL otherwise
113                 */
114                ColladaEntity *importInstance(const String &id);
115
116                /**
117                 * import <library> node and fill up the specific library entity
118                 * by the type, which can be: CAMERA, GEOMETRY, LIGHT, MATERIAL, TEXTURE, ...
119                 * in first step we only want to know the id and name of the node
120                 *
121                 * @param       node    the library node we want to import
122                 * @return      void
123                 */
124                void doImport(xmlNode *node);
125
126                /**
127                 * find the entity by its identifier
128                 *
129                 * @param       id      the string identifier we are looking for
130                 * @return      a pointer on it, NULL otherwise
131                 */
132                ColladaCamera   *getCamera(const String &id) const;
133                ColladaImage    *getImage(const String &id) const;
134                ColladaLight    *getLight(const String &id) const;
135                ColladaMaterial *getMaterial(const String &id) const;
136                ColladaTexture  *getTexture(const String &id) const;
137
138        private:
139                ColladaDocument *mDoc;
140
141                // library entities
142                ColladaLibrary<ColladaCamera>   *mCameras;
143                ColladaLibrary<ColladaGeometry> *mGeometries;
144                ColladaLibrary<ColladaImage>    *mImages;
145                ColladaLibrary<ColladaLight>    *mLights;
146                ColladaLibrary<ColladaMaterial> *mMaterials;
147                ColladaLibrary<ColladaTexture>  *mTextures;
148        };
149}
150
151#endif // __COLLADA_LIBRARY_H__
Note: See TracBrowser for help on using the repository browser.