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/domNode.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 20 domNode::create(DAE& dae) 21 { 22 domNodeRef ref = new domNode(dae); 23 return ref; 24 } 25 26 27 daeMetaElement * 28 domNode::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( "node" ); 36 meta->registerClass(domNode::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(domNode,elemAsset) ); 45 mea->setElementType( domAsset::registerElement(dae) ); 46 cm->appendChild( mea ); 47 48 cm = new daeMetaChoice( meta, cm, 0, 1, 0, -1 ); 49 50 mea = new daeMetaElementArrayAttribute( meta, cm, 0, 1, 1 ); 51 mea->setName( "lookat" ); 52 mea->setOffset( daeOffsetOf(domNode,elemLookat_array) ); 53 mea->setElementType( domLookat::registerElement(dae) ); 54 cm->appendChild( mea ); 55 56 mea = new daeMetaElementArrayAttribute( meta, cm, 0, 1, 1 ); 57 mea->setName( "matrix" ); 58 mea->setOffset( daeOffsetOf(domNode,elemMatrix_array) ); 59 mea->setElementType( domMatrix::registerElement(dae) ); 60 cm->appendChild( mea ); 61 62 mea = new daeMetaElementArrayAttribute( meta, cm, 0, 1, 1 ); 63 mea->setName( "rotate" ); 64 mea->setOffset( daeOffsetOf(domNode,elemRotate_array) ); 65 mea->setElementType( domRotate::registerElement(dae) ); 66 cm->appendChild( mea ); 67 68 mea = new daeMetaElementArrayAttribute( meta, cm, 0, 1, 1 ); 69 mea->setName( "scale" ); 70 mea->setOffset( daeOffsetOf(domNode,elemScale_array) ); 71 mea->setElementType( domScale::registerElement(dae) ); 72 cm->appendChild( mea ); 73 74 mea = new daeMetaElementArrayAttribute( meta, cm, 0, 1, 1 ); 75 mea->setName( "skew" ); 76 mea->setOffset( daeOffsetOf(domNode,elemSkew_array) ); 77 mea->setElementType( domSkew::registerElement(dae) ); 78 cm->appendChild( mea ); 79 80 mea = new daeMetaElementArrayAttribute( meta, cm, 0, 1, 1 ); 81 mea->setName( "translate" ); 82 mea->setOffset( daeOffsetOf(domNode,elemTranslate_array) ); 83 mea->setElementType( domTranslate::registerElement(dae) ); 84 cm->appendChild( mea ); 85 86 cm->setMaxOrdinal( 0 ); 87 cm->getParent()->appendChild( cm ); 88 cm = cm->getParent(); 89 90 mea = new daeMetaElementArrayAttribute( meta, cm, 3002, 0, -1 ); 91 mea->setName( "instance_camera" ); 92 mea->setOffset( daeOffsetOf(domNode,elemInstance_camera_array) ); 93 mea->setElementType( domInstance_camera::registerElement(dae) ); 94 cm->appendChild( mea ); 95 96 mea = new daeMetaElementArrayAttribute( meta, cm, 3003, 0, -1 ); 97 mea->setName( "instance_controller" ); 98 mea->setOffset( daeOffsetOf(domNode,elemInstance_controller_array) ); 99 mea->setElementType( domInstance_controller::registerElement(dae) ); 100 cm->appendChild( mea ); 101 102 mea = new daeMetaElementArrayAttribute( meta, cm, 3004, 0, -1 ); 103 mea->setName( "instance_geometry" ); 104 mea->setOffset( daeOffsetOf(domNode,elemInstance_geometry_array) ); 105 mea->setElementType( domInstance_geometry::registerElement(dae) ); 106 cm->appendChild( mea ); 107 108 mea = new daeMetaElementArrayAttribute( meta, cm, 3005, 0, -1 ); 109 mea->setName( "instance_light" ); 110 mea->setOffset( daeOffsetOf(domNode,elemInstance_light_array) ); 111 mea->setElementType( domInstance_light::registerElement(dae) ); 112 cm->appendChild( mea ); 113 114 mea = new daeMetaElementArrayAttribute( meta, cm, 3006, 0, -1 ); 115 mea->setName( "instance_node" ); 116 mea->setOffset( daeOffsetOf(domNode,elemInstance_node_array) ); 117 mea->setElementType( domInstance_node::registerElement(dae) ); 118 cm->appendChild( mea ); 119 120 mea = new daeMetaElementArrayAttribute( meta, cm, 3007, 0, -1 ); 121 mea->setName( "node" ); 122 mea->setOffset( daeOffsetOf(domNode,elemNode_array) ); 123 mea->setElementType( domNode::registerElement(dae) ); 124 cm->appendChild( mea ); 125 126 mea = new daeMetaElementArrayAttribute( meta, cm, 3008, 0, -1 ); 127 mea->setName( "extra" ); 128 mea->setOffset( daeOffsetOf(domNode,elemExtra_array) ); 129 mea->setElementType( domExtra::registerElement(dae) ); 130 cm->appendChild( mea ); 131 132 cm->setMaxOrdinal( 3008 ); 133 meta->setCMRoot( cm ); 134 // Ordered list of sub-elements 135 meta->addContents(daeOffsetOf(domNode,_contents)); 136 meta->addContentsOrder(daeOffsetOf(domNode,_contentsOrder)); 137 138 meta->addCMDataArray(daeOffsetOf(domNode,_CMData), 1); 139 // Add attribute: id 140 { 141 daeMetaAttribute *ma = new daeMetaAttribute; 142 ma->setName( "id" ); 143 ma->setType( dae.getAtomicTypes().get("xsID")); 144 ma->setOffset( daeOffsetOf( domNode , attrId )); 145 ma->setContainer( meta ); 146 147 meta->appendAttribute(ma); 148 } 149 150 // Add attribute: name 151 { 152 daeMetaAttribute *ma = new daeMetaAttribute; 153 ma->setName( "name" ); 154 ma->setType( dae.getAtomicTypes().get("xsNCName")); 155 ma->setOffset( daeOffsetOf( domNode , attrName )); 156 ma->setContainer( meta ); 157 158 meta->appendAttribute(ma); 159 } 160 161 // Add attribute: sid 162 { 163 daeMetaAttribute *ma = new daeMetaAttribute; 164 ma->setName( "sid" ); 165 ma->setType( dae.getAtomicTypes().get("xsNCName")); 166 ma->setOffset( daeOffsetOf( domNode , attrSid )); 167 ma->setContainer( meta ); 168 169 meta->appendAttribute(ma); 170 } 171 172 // Add attribute: type 173 { 174 daeMetaAttribute *ma = new daeMetaAttribute; 175 ma->setName( "type" ); 176 ma->setType( dae.getAtomicTypes().get("NodeType")); 177 ma->setOffset( daeOffsetOf( domNode , attrType )); 178 ma->setContainer( meta ); 179 ma->setDefaultString( "NODE"); 180 181 meta->appendAttribute(ma); 182 } 183 184 // Add attribute: layer 185 { 186 daeMetaAttribute *ma = new daeMetaArrayAttribute; 187 ma->setName( "layer" ); 188 ma->setType( dae.getAtomicTypes().get("ListOfNames")); 189 ma->setOffset( daeOffsetOf( domNode , attrLayer )); 190 ma->setContainer( meta ); 191 192 meta->appendAttribute(ma); 193 } 194 195 meta->setElementSize(sizeof(domNode)); 196 meta->validate(); 197 198 return meta; 199 } 200 201