187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk/*
287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk* Copyright 2006 Sony Computer Entertainment Inc.
387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk*
487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk* Licensed under the MIT Open Source License, for details please see license.txt or the website
587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk* http://www.opensource.org/licenses/mit-license.php
687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk*
787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk*/
887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk
987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk#include <dae.h>
1087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk#include <dae/daeDom.h>
1187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk#include <dom/domConvex_mesh.h>
1287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk#include <dae/daeMetaCMPolicy.h>
1387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk#include <dae/daeMetaSequence.h>
1487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk#include <dae/daeMetaChoice.h>
1587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk#include <dae/daeMetaGroup.h>
1687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk#include <dae/daeMetaAny.h>
1787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk#include <dae/daeMetaElementAttribute.h>
1887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk
1987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex SakhartchoukdaeElementRef
2087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex SakhartchoukdomConvex_mesh::create(DAE& dae)
2187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk{
2287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	domConvex_meshRef ref = new domConvex_mesh(dae);
2387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	return ref;
2487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk}
2587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk
2687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk
2787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex SakhartchoukdaeMetaElement *
2887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex SakhartchoukdomConvex_mesh::registerElement(DAE& dae)
2987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk{
3087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	daeMetaElement* meta = dae.getMeta(ID());
3187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	if ( meta != NULL ) return meta;
3287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk
3387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	meta = new daeMetaElement(dae);
3487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	dae.setMeta(ID(), *meta);
3587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	meta->setName( "convex_mesh" );
3687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	meta->registerClass(domConvex_mesh::create);
3787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk
3887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	daeMetaCMPolicy *cm = NULL;
3987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	daeMetaElementAttribute *mea = NULL;
4087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	cm = new daeMetaSequence( meta, cm, 0, 0, 1 );
4187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk
4287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	mea = new daeMetaElementArrayAttribute( meta, cm, 0, 1, -1 );
4387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	mea->setName( "source" );
4487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	mea->setOffset( daeOffsetOf(domConvex_mesh,elemSource_array) );
4587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	mea->setElementType( domSource::registerElement(dae) );
4687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	cm->appendChild( mea );
4787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk
4887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	mea = new daeMetaElementAttribute( meta, cm, 1, 1, 1 );
4987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	mea->setName( "vertices" );
5087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	mea->setOffset( daeOffsetOf(domConvex_mesh,elemVertices) );
5187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	mea->setElementType( domVertices::registerElement(dae) );
5287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	cm->appendChild( mea );
5387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk
5487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	cm = new daeMetaChoice( meta, cm, 0, 2, 0, -1 );
5587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk
5687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	mea = new daeMetaElementArrayAttribute( meta, cm, 0, 1, 1 );
5787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	mea->setName( "lines" );
5887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	mea->setOffset( daeOffsetOf(domConvex_mesh,elemLines_array) );
5987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	mea->setElementType( domLines::registerElement(dae) );
6087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	cm->appendChild( mea );
6187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk
6287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	mea = new daeMetaElementArrayAttribute( meta, cm, 0, 1, 1 );
6387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	mea->setName( "linestrips" );
6487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	mea->setOffset( daeOffsetOf(domConvex_mesh,elemLinestrips_array) );
6587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	mea->setElementType( domLinestrips::registerElement(dae) );
6687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	cm->appendChild( mea );
6787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk
6887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	mea = new daeMetaElementArrayAttribute( meta, cm, 0, 1, 1 );
6987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	mea->setName( "polygons" );
7087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	mea->setOffset( daeOffsetOf(domConvex_mesh,elemPolygons_array) );
7187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	mea->setElementType( domPolygons::registerElement(dae) );
7287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	cm->appendChild( mea );
7387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk
7487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	mea = new daeMetaElementArrayAttribute( meta, cm, 0, 1, 1 );
7587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	mea->setName( "polylist" );
7687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	mea->setOffset( daeOffsetOf(domConvex_mesh,elemPolylist_array) );
7787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	mea->setElementType( domPolylist::registerElement(dae) );
7887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	cm->appendChild( mea );
7987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk
8087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	mea = new daeMetaElementArrayAttribute( meta, cm, 0, 1, 1 );
8187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	mea->setName( "triangles" );
8287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	mea->setOffset( daeOffsetOf(domConvex_mesh,elemTriangles_array) );
8387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	mea->setElementType( domTriangles::registerElement(dae) );
8487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	cm->appendChild( mea );
8587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk
8687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	mea = new daeMetaElementArrayAttribute( meta, cm, 0, 1, 1 );
8787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	mea->setName( "trifans" );
8887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	mea->setOffset( daeOffsetOf(domConvex_mesh,elemTrifans_array) );
8987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	mea->setElementType( domTrifans::registerElement(dae) );
9087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	cm->appendChild( mea );
9187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk
9287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	mea = new daeMetaElementArrayAttribute( meta, cm, 0, 1, 1 );
9387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	mea->setName( "tristrips" );
9487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	mea->setOffset( daeOffsetOf(domConvex_mesh,elemTristrips_array) );
9587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	mea->setElementType( domTristrips::registerElement(dae) );
9687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	cm->appendChild( mea );
9787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk
9887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	cm->setMaxOrdinal( 0 );
9987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	cm->getParent()->appendChild( cm );
10087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	cm = cm->getParent();
10187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk
10287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	mea = new daeMetaElementArrayAttribute( meta, cm, 3003, 0, -1 );
10387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	mea->setName( "extra" );
10487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	mea->setOffset( daeOffsetOf(domConvex_mesh,elemExtra_array) );
10587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	mea->setElementType( domExtra::registerElement(dae) );
10687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	cm->appendChild( mea );
10787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk
10887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	cm->setMaxOrdinal( 3003 );
10987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	meta->setCMRoot( cm );
11087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	// Ordered list of sub-elements
11187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	meta->addContents(daeOffsetOf(domConvex_mesh,_contents));
11287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	meta->addContentsOrder(daeOffsetOf(domConvex_mesh,_contentsOrder));
11387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk
11487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	meta->addCMDataArray(daeOffsetOf(domConvex_mesh,_CMData), 1);
11587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	//	Add attribute: convex_hull_of
11687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	{
11787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk		daeMetaAttribute *ma = new daeMetaAttribute;
11887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk		ma->setName( "convex_hull_of" );
11987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk		ma->setType( dae.getAtomicTypes().get("xsAnyURI"));
12087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk		ma->setOffset( daeOffsetOf( domConvex_mesh , attrConvex_hull_of ));
12187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk		ma->setContainer( meta );
12287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk
12387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk		meta->appendAttribute(ma);
12487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	}
12587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk
12687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	meta->setElementSize(sizeof(domConvex_mesh));
12787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	meta->validate();
12887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk
12987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	return meta;
13087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk}
13187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk
132