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/domAnimation.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 daeElementRef
create(DAE & dae)20 domAnimation::create(DAE& dae)
21 {
22 domAnimationRef ref = new domAnimation(dae);
23 return ref;
24 }
25
26
27 daeMetaElement *
registerElement(DAE & dae)28 domAnimation::registerElement(DAE& dae)
29 {
30 daeMetaElement* meta = dae.getMeta(ID());
31 if ( meta != NULL ) return meta;
32
33 meta = new daeMetaElement(dae);
34 dae.setMeta(ID(), *meta);
35 meta->setName( "animation" );
36 meta->registerClass(domAnimation::create);
37
38 daeMetaCMPolicy *cm = NULL;
39 daeMetaElementAttribute *mea = NULL;
40 cm = new daeMetaSequence( meta, cm, 0, 1, 1 );
41
42 mea = new daeMetaElementAttribute( meta, cm, 0, 0, 1 );
43 mea->setName( "asset" );
44 mea->setOffset( daeOffsetOf(domAnimation,elemAsset) );
45 mea->setElementType( domAsset::registerElement(dae) );
46 cm->appendChild( mea );
47
48 cm = new daeMetaChoice( meta, cm, 0, 1, 1, 1 );
49
50 cm = new daeMetaSequence( meta, cm, 0, 1, 1 );
51
52 mea = new daeMetaElementArrayAttribute( meta, cm, 0, 1, -1 );
53 mea->setName( "source" );
54 mea->setOffset( daeOffsetOf(domAnimation,elemSource_array) );
55 mea->setElementType( domSource::registerElement(dae) );
56 cm->appendChild( mea );
57
58 cm = new daeMetaChoice( meta, cm, 1, 1, 1, 1 );
59
60 cm = new daeMetaSequence( meta, cm, 0, 1, 1 );
61
62 mea = new daeMetaElementArrayAttribute( meta, cm, 0, 1, -1 );
63 mea->setName( "sampler" );
64 mea->setOffset( daeOffsetOf(domAnimation,elemSampler_array) );
65 mea->setElementType( domSampler::registerElement(dae) );
66 cm->appendChild( mea );
67
68 mea = new daeMetaElementArrayAttribute( meta, cm, 1, 1, -1 );
69 mea->setName( "channel" );
70 mea->setOffset( daeOffsetOf(domAnimation,elemChannel_array) );
71 mea->setElementType( domChannel::registerElement(dae) );
72 cm->appendChild( mea );
73
74 mea = new daeMetaElementArrayAttribute( meta, cm, 2, 0, -1 );
75 mea->setName( "animation" );
76 mea->setOffset( daeOffsetOf(domAnimation,elemAnimation_array) );
77 mea->setElementType( domAnimation::registerElement(dae) );
78 cm->appendChild( mea );
79
80 cm->setMaxOrdinal( 2 );
81 cm->getParent()->appendChild( cm );
82 cm = cm->getParent();
83
84 mea = new daeMetaElementArrayAttribute( meta, cm, 3, 1, -1 );
85 mea->setName( "animation" );
86 mea->setOffset( daeOffsetOf(domAnimation,elemAnimation_array) );
87 mea->setElementType( domAnimation::registerElement(dae) );
88 cm->appendChild( mea );
89
90 cm->setMaxOrdinal( 2 );
91 cm->getParent()->appendChild( cm );
92 cm = cm->getParent();
93
94 cm->setMaxOrdinal( 1 );
95 cm->getParent()->appendChild( cm );
96 cm = cm->getParent();
97
98 cm = new daeMetaSequence( meta, cm, 2, 1, 1 );
99
100 mea = new daeMetaElementArrayAttribute( meta, cm, 0, 1, -1 );
101 mea->setName( "sampler" );
102 mea->setOffset( daeOffsetOf(domAnimation,elemSampler_array) );
103 mea->setElementType( domSampler::registerElement(dae) );
104 cm->appendChild( mea );
105
106 mea = new daeMetaElementArrayAttribute( meta, cm, 1, 1, -1 );
107 mea->setName( "channel" );
108 mea->setOffset( daeOffsetOf(domAnimation,elemChannel_array) );
109 mea->setElementType( domChannel::registerElement(dae) );
110 cm->appendChild( mea );
111
112 mea = new daeMetaElementArrayAttribute( meta, cm, 2, 0, -1 );
113 mea->setName( "animation" );
114 mea->setOffset( daeOffsetOf(domAnimation,elemAnimation_array) );
115 mea->setElementType( domAnimation::registerElement(dae) );
116 cm->appendChild( mea );
117
118 cm->setMaxOrdinal( 2 );
119 cm->getParent()->appendChild( cm );
120 cm = cm->getParent();
121
122 mea = new daeMetaElementArrayAttribute( meta, cm, 5, 1, -1 );
123 mea->setName( "animation" );
124 mea->setOffset( daeOffsetOf(domAnimation,elemAnimation_array) );
125 mea->setElementType( domAnimation::registerElement(dae) );
126 cm->appendChild( mea );
127
128 cm->setMaxOrdinal( 4 );
129 cm->getParent()->appendChild( cm );
130 cm = cm->getParent();
131
132 mea = new daeMetaElementArrayAttribute( meta, cm, 2, 0, -1 );
133 mea->setName( "extra" );
134 mea->setOffset( daeOffsetOf(domAnimation,elemExtra_array) );
135 mea->setElementType( domExtra::registerElement(dae) );
136 cm->appendChild( mea );
137
138 cm->setMaxOrdinal( 2 );
139 meta->setCMRoot( cm );
140 // Ordered list of sub-elements
141 meta->addContents(daeOffsetOf(domAnimation,_contents));
142 meta->addContentsOrder(daeOffsetOf(domAnimation,_contentsOrder));
143
144 meta->addCMDataArray(daeOffsetOf(domAnimation,_CMData), 2);
145 // Add attribute: id
146 {
147 daeMetaAttribute *ma = new daeMetaAttribute;
148 ma->setName( "id" );
149 ma->setType( dae.getAtomicTypes().get("xsID"));
150 ma->setOffset( daeOffsetOf( domAnimation , attrId ));
151 ma->setContainer( meta );
152
153 meta->appendAttribute(ma);
154 }
155
156 // Add attribute: name
157 {
158 daeMetaAttribute *ma = new daeMetaAttribute;
159 ma->setName( "name" );
160 ma->setType( dae.getAtomicTypes().get("xsNCName"));
161 ma->setOffset( daeOffsetOf( domAnimation , attrName ));
162 ma->setContainer( meta );
163
164 meta->appendAttribute(ma);
165 }
166
167 meta->setElementSize(sizeof(domAnimation));
168 meta->validate();
169
170 return meta;
171 }
172
173