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/domConvex_mesh.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 domConvex_mesh::create(DAE& dae) 21 { 22 domConvex_meshRef ref = new domConvex_mesh(dae); 23 return ref; 24 } 25 26 27 daeMetaElement * 28 domConvex_mesh::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( "convex_mesh" ); 36 meta->registerClass(domConvex_mesh::create); 37 38 daeMetaCMPolicy *cm = NULL; 39 daeMetaElementAttribute *mea = NULL; 40 cm = new daeMetaSequence( meta, cm, 0, 0, 1 ); 41 42 mea = new daeMetaElementArrayAttribute( meta, cm, 0, 1, -1 ); 43 mea->setName( "source" ); 44 mea->setOffset( daeOffsetOf(domConvex_mesh,elemSource_array) ); 45 mea->setElementType( domSource::registerElement(dae) ); 46 cm->appendChild( mea ); 47 48 mea = new daeMetaElementAttribute( meta, cm, 1, 1, 1 ); 49 mea->setName( "vertices" ); 50 mea->setOffset( daeOffsetOf(domConvex_mesh,elemVertices) ); 51 mea->setElementType( domVertices::registerElement(dae) ); 52 cm->appendChild( mea ); 53 54 cm = new daeMetaChoice( meta, cm, 0, 2, 0, -1 ); 55 56 mea = new daeMetaElementArrayAttribute( meta, cm, 0, 1, 1 ); 57 mea->setName( "lines" ); 58 mea->setOffset( daeOffsetOf(domConvex_mesh,elemLines_array) ); 59 mea->setElementType( domLines::registerElement(dae) ); 60 cm->appendChild( mea ); 61 62 mea = new daeMetaElementArrayAttribute( meta, cm, 0, 1, 1 ); 63 mea->setName( "linestrips" ); 64 mea->setOffset( daeOffsetOf(domConvex_mesh,elemLinestrips_array) ); 65 mea->setElementType( domLinestrips::registerElement(dae) ); 66 cm->appendChild( mea ); 67 68 mea = new daeMetaElementArrayAttribute( meta, cm, 0, 1, 1 ); 69 mea->setName( "polygons" ); 70 mea->setOffset( daeOffsetOf(domConvex_mesh,elemPolygons_array) ); 71 mea->setElementType( domPolygons::registerElement(dae) ); 72 cm->appendChild( mea ); 73 74 mea = new daeMetaElementArrayAttribute( meta, cm, 0, 1, 1 ); 75 mea->setName( "polylist" ); 76 mea->setOffset( daeOffsetOf(domConvex_mesh,elemPolylist_array) ); 77 mea->setElementType( domPolylist::registerElement(dae) ); 78 cm->appendChild( mea ); 79 80 mea = new daeMetaElementArrayAttribute( meta, cm, 0, 1, 1 ); 81 mea->setName( "triangles" ); 82 mea->setOffset( daeOffsetOf(domConvex_mesh,elemTriangles_array) ); 83 mea->setElementType( domTriangles::registerElement(dae) ); 84 cm->appendChild( mea ); 85 86 mea = new daeMetaElementArrayAttribute( meta, cm, 0, 1, 1 ); 87 mea->setName( "trifans" ); 88 mea->setOffset( daeOffsetOf(domConvex_mesh,elemTrifans_array) ); 89 mea->setElementType( domTrifans::registerElement(dae) ); 90 cm->appendChild( mea ); 91 92 mea = new daeMetaElementArrayAttribute( meta, cm, 0, 1, 1 ); 93 mea->setName( "tristrips" ); 94 mea->setOffset( daeOffsetOf(domConvex_mesh,elemTristrips_array) ); 95 mea->setElementType( domTristrips::registerElement(dae) ); 96 cm->appendChild( mea ); 97 98 cm->setMaxOrdinal( 0 ); 99 cm->getParent()->appendChild( cm ); 100 cm = cm->getParent(); 101 102 mea = new daeMetaElementArrayAttribute( meta, cm, 3003, 0, -1 ); 103 mea->setName( "extra" ); 104 mea->setOffset( daeOffsetOf(domConvex_mesh,elemExtra_array) ); 105 mea->setElementType( domExtra::registerElement(dae) ); 106 cm->appendChild( mea ); 107 108 cm->setMaxOrdinal( 3003 ); 109 meta->setCMRoot( cm ); 110 // Ordered list of sub-elements 111 meta->addContents(daeOffsetOf(domConvex_mesh,_contents)); 112 meta->addContentsOrder(daeOffsetOf(domConvex_mesh,_contentsOrder)); 113 114 meta->addCMDataArray(daeOffsetOf(domConvex_mesh,_CMData), 1); 115 // Add attribute: convex_hull_of 116 { 117 daeMetaAttribute *ma = new daeMetaAttribute; 118 ma->setName( "convex_hull_of" ); 119 ma->setType( dae.getAtomicTypes().get("xsAnyURI")); 120 ma->setOffset( daeOffsetOf( domConvex_mesh , attrConvex_hull_of )); 121 ma->setContainer( meta ); 122 123 meta->appendAttribute(ma); 124 } 125 126 meta->setElementSize(sizeof(domConvex_mesh)); 127 meta->validate(); 128 129 return meta; 130 } 131 132