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