• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2 * Copyright 2006 Sony Computer Entertainment Inc.
3 *
4 * Licensed under the MIT Open Source License, for details please see license.txt or the website
5 * http://www.opensource.org/licenses/mit-license.php
6 *
7 */
8 
9 #include <dae.h>
10 #include <dae/daeDom.h>
11 #include <dom/domCOLLADA.h>
12 #include <dae/daeMetaCMPolicy.h>
13 #include <dae/daeMetaSequence.h>
14 #include <dae/daeMetaChoice.h>
15 #include <dae/daeMetaGroup.h>
16 #include <dae/daeMetaAny.h>
17 #include <dae/daeMetaElementAttribute.h>
18 
19 extern daeString COLLADA_VERSION;
20 extern daeString COLLADA_NAMESPACE;
21 
22 daeElementRef
create(DAE & dae)23 domCOLLADA::create(DAE& dae)
24 {
25 	domCOLLADARef ref = new domCOLLADA(dae);
26 	ref->_meta = dae.getMeta(domCOLLADA::ID());
27 	ref->setAttribute("version", COLLADA_VERSION );
28 	ref->setAttribute("xmlns", COLLADA_NAMESPACE );
29 	ref->_meta = NULL;
30 	return ref;
31 }
32 
33 
34 daeMetaElement *
registerElement(DAE & dae)35 domCOLLADA::registerElement(DAE& dae)
36 {
37 	daeMetaElement* meta = dae.getMeta(ID());
38 	if ( meta != NULL ) return meta;
39 
40 	meta = new daeMetaElement(dae);
41 	dae.setMeta(ID(), *meta);
42 	meta->setName( "COLLADA" );
43 	meta->registerClass(domCOLLADA::create);
44 
45 	daeMetaCMPolicy *cm = NULL;
46 	daeMetaElementAttribute *mea = NULL;
47 	cm = new daeMetaSequence( meta, cm, 0, 1, 1 );
48 
49 	mea = new daeMetaElementAttribute( meta, cm, 0, 1, 1 );
50 	mea->setName( "asset" );
51 	mea->setOffset( daeOffsetOf(domCOLLADA,elemAsset) );
52 	mea->setElementType( domAsset::registerElement(dae) );
53 	cm->appendChild( mea );
54 
55 	cm = new daeMetaChoice( meta, cm, 0, 1, 0, -1 );
56 
57 	mea = new daeMetaElementArrayAttribute( meta, cm, 0, 1, 1 );
58 	mea->setName( "library_animations" );
59 	mea->setOffset( daeOffsetOf(domCOLLADA,elemLibrary_animations_array) );
60 	mea->setElementType( domLibrary_animations::registerElement(dae) );
61 	cm->appendChild( mea );
62 
63 	mea = new daeMetaElementArrayAttribute( meta, cm, 0, 1, 1 );
64 	mea->setName( "library_animation_clips" );
65 	mea->setOffset( daeOffsetOf(domCOLLADA,elemLibrary_animation_clips_array) );
66 	mea->setElementType( domLibrary_animation_clips::registerElement(dae) );
67 	cm->appendChild( mea );
68 
69 	mea = new daeMetaElementArrayAttribute( meta, cm, 0, 1, 1 );
70 	mea->setName( "library_cameras" );
71 	mea->setOffset( daeOffsetOf(domCOLLADA,elemLibrary_cameras_array) );
72 	mea->setElementType( domLibrary_cameras::registerElement(dae) );
73 	cm->appendChild( mea );
74 
75 	mea = new daeMetaElementArrayAttribute( meta, cm, 0, 1, 1 );
76 	mea->setName( "library_controllers" );
77 	mea->setOffset( daeOffsetOf(domCOLLADA,elemLibrary_controllers_array) );
78 	mea->setElementType( domLibrary_controllers::registerElement(dae) );
79 	cm->appendChild( mea );
80 
81 	mea = new daeMetaElementArrayAttribute( meta, cm, 0, 1, 1 );
82 	mea->setName( "library_geometries" );
83 	mea->setOffset( daeOffsetOf(domCOLLADA,elemLibrary_geometries_array) );
84 	mea->setElementType( domLibrary_geometries::registerElement(dae) );
85 	cm->appendChild( mea );
86 
87 	mea = new daeMetaElementArrayAttribute( meta, cm, 0, 1, 1 );
88 	mea->setName( "library_effects" );
89 	mea->setOffset( daeOffsetOf(domCOLLADA,elemLibrary_effects_array) );
90 	mea->setElementType( domLibrary_effects::registerElement(dae) );
91 	cm->appendChild( mea );
92 
93 	mea = new daeMetaElementArrayAttribute( meta, cm, 0, 1, 1 );
94 	mea->setName( "library_force_fields" );
95 	mea->setOffset( daeOffsetOf(domCOLLADA,elemLibrary_force_fields_array) );
96 	mea->setElementType( domLibrary_force_fields::registerElement(dae) );
97 	cm->appendChild( mea );
98 
99 	mea = new daeMetaElementArrayAttribute( meta, cm, 0, 1, 1 );
100 	mea->setName( "library_images" );
101 	mea->setOffset( daeOffsetOf(domCOLLADA,elemLibrary_images_array) );
102 	mea->setElementType( domLibrary_images::registerElement(dae) );
103 	cm->appendChild( mea );
104 
105 	mea = new daeMetaElementArrayAttribute( meta, cm, 0, 1, 1 );
106 	mea->setName( "library_lights" );
107 	mea->setOffset( daeOffsetOf(domCOLLADA,elemLibrary_lights_array) );
108 	mea->setElementType( domLibrary_lights::registerElement(dae) );
109 	cm->appendChild( mea );
110 
111 	mea = new daeMetaElementArrayAttribute( meta, cm, 0, 1, 1 );
112 	mea->setName( "library_materials" );
113 	mea->setOffset( daeOffsetOf(domCOLLADA,elemLibrary_materials_array) );
114 	mea->setElementType( domLibrary_materials::registerElement(dae) );
115 	cm->appendChild( mea );
116 
117 	mea = new daeMetaElementArrayAttribute( meta, cm, 0, 1, 1 );
118 	mea->setName( "library_nodes" );
119 	mea->setOffset( daeOffsetOf(domCOLLADA,elemLibrary_nodes_array) );
120 	mea->setElementType( domLibrary_nodes::registerElement(dae) );
121 	cm->appendChild( mea );
122 
123 	mea = new daeMetaElementArrayAttribute( meta, cm, 0, 1, 1 );
124 	mea->setName( "library_physics_materials" );
125 	mea->setOffset( daeOffsetOf(domCOLLADA,elemLibrary_physics_materials_array) );
126 	mea->setElementType( domLibrary_physics_materials::registerElement(dae) );
127 	cm->appendChild( mea );
128 
129 	mea = new daeMetaElementArrayAttribute( meta, cm, 0, 1, 1 );
130 	mea->setName( "library_physics_models" );
131 	mea->setOffset( daeOffsetOf(domCOLLADA,elemLibrary_physics_models_array) );
132 	mea->setElementType( domLibrary_physics_models::registerElement(dae) );
133 	cm->appendChild( mea );
134 
135 	mea = new daeMetaElementArrayAttribute( meta, cm, 0, 1, 1 );
136 	mea->setName( "library_physics_scenes" );
137 	mea->setOffset( daeOffsetOf(domCOLLADA,elemLibrary_physics_scenes_array) );
138 	mea->setElementType( domLibrary_physics_scenes::registerElement(dae) );
139 	cm->appendChild( mea );
140 
141 	mea = new daeMetaElementArrayAttribute( meta, cm, 0, 1, 1 );
142 	mea->setName( "library_visual_scenes" );
143 	mea->setOffset( daeOffsetOf(domCOLLADA,elemLibrary_visual_scenes_array) );
144 	mea->setElementType( domLibrary_visual_scenes::registerElement(dae) );
145 	cm->appendChild( mea );
146 
147 	cm->setMaxOrdinal( 0 );
148 	cm->getParent()->appendChild( cm );
149 	cm = cm->getParent();
150 
151 	mea = new daeMetaElementAttribute( meta, cm, 3002, 0, 1 );
152 	mea->setName( "scene" );
153 	mea->setOffset( daeOffsetOf(domCOLLADA,elemScene) );
154 	mea->setElementType( domCOLLADA::domScene::registerElement(dae) );
155 	cm->appendChild( mea );
156 
157 	mea = new daeMetaElementArrayAttribute( meta, cm, 3003, 0, -1 );
158 	mea->setName( "extra" );
159 	mea->setOffset( daeOffsetOf(domCOLLADA,elemExtra_array) );
160 	mea->setElementType( domExtra::registerElement(dae) );
161 	cm->appendChild( mea );
162 
163 	cm->setMaxOrdinal( 3003 );
164 	meta->setCMRoot( cm );
165 	// Ordered list of sub-elements
166 	meta->addContents(daeOffsetOf(domCOLLADA,_contents));
167 	meta->addContentsOrder(daeOffsetOf(domCOLLADA,_contentsOrder));
168 
169 	meta->addCMDataArray(daeOffsetOf(domCOLLADA,_CMData), 1);	//	Add attribute: xmlns
170 	{
171 		daeMetaAttribute* ma = new daeMetaAttribute;
172 		ma->setName( "xmlns" );
173 		ma->setType( dae.getAtomicTypes().get("xsAnyURI"));
174 		ma->setOffset( daeOffsetOf( domCOLLADA , attrXmlns ));
175 		ma->setContainer( meta );
176 		//ma->setIsRequired( true );
177 		meta->appendAttribute(ma);
178 	}
179 
180 	//	Add attribute: version
181 	{
182 		daeMetaAttribute *ma = new daeMetaAttribute;
183 		ma->setName( "version" );
184 		ma->setType( dae.getAtomicTypes().get("VersionType"));
185 		ma->setOffset( daeOffsetOf( domCOLLADA , attrVersion ));
186 		ma->setContainer( meta );
187 		ma->setIsRequired( true );
188 
189 		meta->appendAttribute(ma);
190 	}
191 
192 	//	Add attribute: xml_base
193 	{
194 		daeMetaAttribute *ma = new daeMetaAttribute;
195 		ma->setName( "xml_base" );
196 		ma->setType( dae.getAtomicTypes().get("xsAnyURI"));
197 		ma->setOffset( daeOffsetOf( domCOLLADA , attrXml_base ));
198 		ma->setContainer( meta );
199 
200 		meta->appendAttribute(ma);
201 	}
202 
203 	meta->setElementSize(sizeof(domCOLLADA));
204 	meta->validate();
205 
206 	return meta;
207 }
208 
209 daeElementRef
create(DAE & dae)210 domCOLLADA::domScene::create(DAE& dae)
211 {
212 	domCOLLADA::domSceneRef ref = new domCOLLADA::domScene(dae);
213 	return ref;
214 }
215 
216 
217 daeMetaElement *
registerElement(DAE & dae)218 domCOLLADA::domScene::registerElement(DAE& dae)
219 {
220 	daeMetaElement* meta = dae.getMeta(ID());
221 	if ( meta != NULL ) return meta;
222 
223 	meta = new daeMetaElement(dae);
224 	dae.setMeta(ID(), *meta);
225 	meta->setName( "scene" );
226 	meta->registerClass(domCOLLADA::domScene::create);
227 
228 	meta->setIsInnerClass( true );
229 	daeMetaCMPolicy *cm = NULL;
230 	daeMetaElementAttribute *mea = NULL;
231 	cm = new daeMetaSequence( meta, cm, 0, 1, 1 );
232 
233 	mea = new daeMetaElementArrayAttribute( meta, cm, 0, 0, -1 );
234 	mea->setName( "instance_physics_scene" );
235 	mea->setOffset( daeOffsetOf(domCOLLADA::domScene,elemInstance_physics_scene_array) );
236 	mea->setElementType( domInstanceWithExtra::registerElement(dae) );
237 	cm->appendChild( mea );
238 
239 	mea = new daeMetaElementAttribute( meta, cm, 1, 0, 1 );
240 	mea->setName( "instance_visual_scene" );
241 	mea->setOffset( daeOffsetOf(domCOLLADA::domScene,elemInstance_visual_scene) );
242 	mea->setElementType( domInstanceWithExtra::registerElement(dae) );
243 	cm->appendChild( mea );
244 
245 	mea = new daeMetaElementArrayAttribute( meta, cm, 2, 0, -1 );
246 	mea->setName( "extra" );
247 	mea->setOffset( daeOffsetOf(domCOLLADA::domScene,elemExtra_array) );
248 	mea->setElementType( domExtra::registerElement(dae) );
249 	cm->appendChild( mea );
250 
251 	cm->setMaxOrdinal( 2 );
252 	meta->setCMRoot( cm );
253 
254 	meta->setElementSize(sizeof(domCOLLADA::domScene));
255 	meta->validate();
256 
257 	return meta;
258 }
259 
260