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 #include <dae.h>
9 #include <dae/daeDom.h>
10 #include <dae/daeMetaElement.h>
11 #include <dom.h>
12 #ifdef COLLADA_DOM_SUPPORT150
13 #include <1.5/dom/domAny.h>
14 #include <1.5/dom/domSource.h>
15 #include <1.5/dom/domCOLLADA.h>
16 #include <1.5/dom/domConstants.h>
17 #endif
18 #ifdef COLLADA_DOM_SUPPORT141
19 #include <1.4/dom/domAny.h>
20 #include <1.4/dom/domSource.h>
21 #include <1.4/dom/domCOLLADA.h>
22 #include <1.4/dom/domConstants.h>
23 #endif
24
initializeDomMeta(DAE & dae,const char * specversion)25 daeMetaElement* initializeDomMeta(DAE& dae, const char* specversion)
26 {
27 #ifdef COLLADA_DOM_SUPPORT150
28 if( specversion == NULL || strcmp(specversion,"1.5.0") == 0 ) {
29 ColladaDOM150::registerDomTypes(dae);
30 return ColladaDOM150::registerDomElements(dae);
31 }
32 #endif
33 #ifdef COLLADA_DOM_SUPPORT141
34 if( specversion == NULL || strcmp(specversion,"1.4.1") == 0 ) {
35 ColladaDOM141::registerDomTypes(dae);
36 return ColladaDOM141::registerDomElements(dae);
37 }
38 #endif
39 return NULL;
40 }
41
GetColladaTypeCount(const char * specversion)42 daeInt GetColladaTypeCount(const char* specversion)
43 {
44 #ifdef COLLADA_DOM_SUPPORT150
45 if( specversion == NULL || strcmp(specversion,"1.5.0") == 0 ) {
46 return ColladaDOM150::colladaTypeCount();
47 }
48 #endif
49 #ifdef COLLADA_DOM_SUPPORT141
50 if( specversion == NULL || strcmp(specversion,"1.4.1") == 0 ) {
51 return ColladaDOM141::colladaTypeCount();
52 }
53 #endif
54 return 0;
55 }
56
GetCOLLADA_VERSION(const char * specversion)57 daeString GetCOLLADA_VERSION(const char* specversion)
58 {
59 #ifdef COLLADA_DOM_SUPPORT150
60 if( specversion == NULL || strcmp(specversion,"1.5.0") == 0 ) {
61 return ColladaDOM150::COLLADA_VERSION;
62 }
63 #endif
64 #ifdef COLLADA_DOM_SUPPORT141
65 if( specversion == NULL || strcmp(specversion,"1.4.1") == 0 ) {
66 return ColladaDOM141::COLLADA_VERSION;
67 }
68 #endif
69 return "";
70 }
71
GetCOLLADA_NAMESPACE(const char * specversion)72 daeString GetCOLLADA_NAMESPACE(const char* specversion)
73 {
74 #ifdef COLLADA_DOM_SUPPORT150
75 if( specversion == NULL || strcmp(specversion,"1.5.0") == 0 ) {
76 return ColladaDOM150::COLLADA_NAMESPACE;
77 }
78 #endif
79 #ifdef COLLADA_DOM_SUPPORT141
80 if( specversion == NULL || strcmp(specversion,"1.4.1") == 0 ) {
81 return ColladaDOM141::COLLADA_NAMESPACE;
82 }
83 #endif
84 return "";
85 }
86
registerElementAny(DAE & dae)87 daeMetaElement * registerElementAny(DAE& dae)
88 {
89 #ifdef COLLADA_DOM_SUPPORT150
90 if( strcmp(dae.getDomVersion(),"1.5.0") == 0 ) {
91 return ColladaDOM150::domAny::registerElement(dae);
92 }
93 #endif
94 #ifdef COLLADA_DOM_SUPPORT141
95 if( strcmp(dae.getDomVersion(),"1.4.1") == 0 ) {
96 return ColladaDOM141::domAny::registerElement(dae);
97 }
98 #endif
99 return NULL;
100 }
101
getDomAnyID(DAE & dae)102 daeInt getDomAnyID(DAE& dae)
103 {
104 #ifdef COLLADA_DOM_SUPPORT150
105 if( strcmp(dae.getDomVersion(),"1.5.0") == 0 ) {
106 return ColladaDOM150::domAny::ID();
107 }
108 #endif
109 #ifdef COLLADA_DOM_SUPPORT141
110 if( strcmp(dae.getDomVersion(),"1.4.1") == 0 ) {
111 return ColladaDOM141::domAny::ID();
112 }
113 #endif
114 return 0;
115 }
116
getDomSourceID(DAE & dae)117 daeInt getDomSourceID(DAE& dae)
118 {
119 #ifdef COLLADA_DOM_SUPPORT150
120 if( strcmp(dae.getDomVersion(),"1.5.0") == 0 ) {
121 return ColladaDOM150::domSource::ID();
122 }
123 #endif
124 #ifdef COLLADA_DOM_SUPPORT141
125 if( strcmp(dae.getDomVersion(),"1.4.1") == 0 ) {
126 return ColladaDOM141::domSource::ID();
127 }
128 #endif
129 return 0;
130 }
131
getDomCOLLADAID(const char * specversion)132 daeInt getDomCOLLADAID(const char* specversion)
133 {
134 #ifdef COLLADA_DOM_SUPPORT150
135 if( specversion == NULL || strcmp(specversion,"1.5.0") == 0 ) {
136 return ColladaDOM150::domCOLLADA::ID();
137 }
138 #endif
139 #ifdef COLLADA_DOM_SUPPORT141
140 if( specversion == NULL || strcmp(specversion,"1.4.1") == 0 ) {
141 return ColladaDOM141::domCOLLADA::ID();
142 }
143 #endif
144 return 0;
145 }
146
copyElementAny(daeElementRef dstAny,daeElement * srcAny)147 void copyElementAny(daeElementRef dstAny, daeElement* srcAny)
148 {
149 #ifdef COLLADA_DOM_SUPPORT150
150 if( strcmp(srcAny->getDAE()->getDomVersion(),"1.5.0") == 0 ) {
151 ColladaDOM150::domAny* thisAny = (ColladaDOM150::domAny*)srcAny;
152 ColladaDOM150::domAny* retAny = (ColladaDOM150::domAny*)dstAny.cast();
153 for (daeUInt i = 0; i < (daeUInt)thisAny->getAttributeCount(); i++)
154 retAny->setAttribute(thisAny->getAttributeName(i), thisAny->getAttributeValue(i));
155 retAny->setValue(thisAny->getValue());
156 }
157 #endif
158 #ifdef COLLADA_DOM_SUPPORT141
159 if( strcmp(srcAny->getDAE()->getDomVersion(),"1.4.1") == 0 ) {
160 ColladaDOM141::domAny* thisAny = (ColladaDOM141::domAny*)srcAny;
161 ColladaDOM141::domAny* retAny = (ColladaDOM141::domAny*)dstAny.cast();
162 for (daeUInt i = 0; i < (daeUInt)thisAny->getAttributeCount(); i++)
163 retAny->setAttribute(thisAny->getAttributeName(i), thisAny->getAttributeValue(i));
164 retAny->setValue(thisAny->getValue());
165 }
166 #endif
167 }
168
COLLADA_ELEMENT_TECHNIQUE_COMMON(DAE & dae)169 daeString COLLADA_ELEMENT_TECHNIQUE_COMMON(DAE& dae)
170 {
171 #ifdef COLLADA_DOM_SUPPORT150
172 if( strcmp(dae.getDomVersion(),"1.5.0") == 0 ) {
173 return ColladaDOM150::COLLADA_ELEMENT_TECHNIQUE_COMMON;
174 }
175 #endif
176 #ifdef COLLADA_DOM_SUPPORT141
177 if( strcmp(dae.getDomVersion(),"1.4.1") == 0 ) {
178 return ColladaDOM141::COLLADA_ELEMENT_TECHNIQUE_COMMON;
179 }
180 #endif
181 return daeString();
182 }
183
COLLADA_ELEMENT_TECHNIQUE(DAE & dae)184 daeString COLLADA_ELEMENT_TECHNIQUE(DAE& dae)
185 {
186 #ifdef COLLADA_DOM_SUPPORT150
187 if( strcmp(dae.getDomVersion(),"1.5.0") == 0 ) {
188 return ColladaDOM150::COLLADA_ELEMENT_TECHNIQUE;
189 }
190 #endif
191 #ifdef COLLADA_DOM_SUPPORT141
192 if( strcmp(dae.getDomVersion(),"1.4.1") == 0 ) {
193 return ColladaDOM141::COLLADA_ELEMENT_TECHNIQUE;
194 }
195 #endif
196 return daeString();
197 }
198
getDomSourceFloatArray(daeElement * elt)199 daeDoubleArray* getDomSourceFloatArray(daeElement* elt)
200 {
201 #ifdef COLLADA_DOM_SUPPORT150
202 if( strcmp(elt->getDAE()->getDomVersion(),"1.5.0") == 0 ) {
203 if( elt->typeID() == ColladaDOM150::domSource::ID() ) {
204 ColladaDOM150::domFloat_array* floatArray = ((ColladaDOM150::domSource*)elt)->getFloat_array();
205 if( floatArray != NULL ) {
206 return (daeDoubleArray*)floatArray->getCharDataObject()->get(floatArray);
207 }
208 }
209 return NULL;
210 }
211 #endif
212 #ifdef COLLADA_DOM_SUPPORT141
213 if( strcmp(elt->getDAE()->getDomVersion(),"1.4.1") == 0 ) {
214 if( elt->typeID() == ColladaDOM141::domSource::ID() ) {
215 ColladaDOM141::domFloat_array* floatArray = ((ColladaDOM141::domSource*)elt)->getFloat_array();
216 if( floatArray != NULL ) {
217 return (daeDoubleArray*)floatArray->getCharDataObject()->get(floatArray);
218 }
219 }
220 return NULL;
221 }
222 #endif
223 return NULL;
224 }
225