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#ifndef __domTrifans_h__
10#define __domTrifans_h__
11
12#include <dae/daeDocument.h>
13#include <dom/domTypes.h>
14#include <dom/domElements.h>
15
16#include <dom/domP.h>
17#include <dom/domExtra.h>
18#include <dom/domInputLocalOffset.h>
19class DAE;
20
21/**
22 * The trifans element provides the information needed to bind vertex attributes
23 * together and then  organize those vertices into connected triangles. Each
24 * triangle described by the mesh has three  vertices. The first triangle
25 * is formed from first, second, and third vertices. Each subsequent  triangle
26 * is formed from the current vertex, reusing the first and the previous vertices.
27 */
28class domTrifans : public daeElement
29{
30public:
31	virtual COLLADA_TYPE::TypeEnum getElementType() const { return COLLADA_TYPE::TRIFANS; }
32	static daeInt ID() { return 626; }
33	virtual daeInt typeID() const { return ID(); }
34protected:  // Attributes
35/**
36 *  The name attribute is the text string name of this element. Optional attribute.
37 */
38	xsNCName attrName;
39/**
40 *  The count attribute indicates the number of triangle fan primitives. Required
41 * attribute.
42 */
43	domUint attrCount;
44/**
45 *  The material attribute declares a symbol for a material. This symbol is
46 * bound to a material  at the time of instantiation. If the material attribute
47 * is not specified then the lighting  and shading results are application
48 * defined. Optional attribute.
49 */
50	xsNCName attrMaterial;
51
52protected:  // Elements
53/**
54 * The input element may occur any number of times. This input is a local
55 * input with the  offset and set attributes. @see domInput
56 */
57	domInputLocalOffset_Array elemInput_array;
58/**
59 *  The trifans element may have any number of p elements.  @see domP
60 */
61	domP_Array elemP_array;
62/**
63 *  The extra element may appear any number of times.  @see domExtra
64 */
65	domExtra_Array elemExtra_array;
66
67public:	//Accessors and Mutators
68	/**
69	 * Gets the name attribute.
70	 * @return Returns a xsNCName of the name attribute.
71	 */
72	xsNCName getName() const { return attrName; }
73	/**
74	 * Sets the name attribute.
75	 * @param atName The new value for the name attribute.
76	 */
77	void setName( xsNCName atName ) { *(daeStringRef*)&attrName = atName; _validAttributeArray[0] = true; }
78
79	/**
80	 * Gets the count attribute.
81	 * @return Returns a domUint of the count attribute.
82	 */
83	domUint getCount() const { return attrCount; }
84	/**
85	 * Sets the count attribute.
86	 * @param atCount The new value for the count attribute.
87	 */
88	void setCount( domUint atCount ) { attrCount = atCount; _validAttributeArray[1] = true; }
89
90	/**
91	 * Gets the material attribute.
92	 * @return Returns a xsNCName of the material attribute.
93	 */
94	xsNCName getMaterial() const { return attrMaterial; }
95	/**
96	 * Sets the material attribute.
97	 * @param atMaterial The new value for the material attribute.
98	 */
99	void setMaterial( xsNCName atMaterial ) { *(daeStringRef*)&attrMaterial = atMaterial; _validAttributeArray[2] = true; }
100
101	/**
102	 * Gets the input element array.
103	 * @return Returns a reference to the array of input elements.
104	 */
105	domInputLocalOffset_Array &getInput_array() { return elemInput_array; }
106	/**
107	 * Gets the input element array.
108	 * @return Returns a constant reference to the array of input elements.
109	 */
110	const domInputLocalOffset_Array &getInput_array() const { return elemInput_array; }
111	/**
112	 * Gets the p element array.
113	 * @return Returns a reference to the array of p elements.
114	 */
115	domP_Array &getP_array() { return elemP_array; }
116	/**
117	 * Gets the p element array.
118	 * @return Returns a constant reference to the array of p elements.
119	 */
120	const domP_Array &getP_array() const { return elemP_array; }
121	/**
122	 * Gets the extra element array.
123	 * @return Returns a reference to the array of extra elements.
124	 */
125	domExtra_Array &getExtra_array() { return elemExtra_array; }
126	/**
127	 * Gets the extra element array.
128	 * @return Returns a constant reference to the array of extra elements.
129	 */
130	const domExtra_Array &getExtra_array() const { return elemExtra_array; }
131protected:
132	/**
133	 * Constructor
134	 */
135	domTrifans(DAE& dae) : daeElement(dae), attrName(), attrCount(), attrMaterial(), elemInput_array(), elemP_array(), elemExtra_array() {}
136	/**
137	 * Destructor
138	 */
139	virtual ~domTrifans() {}
140	/**
141	 * Overloaded assignment operator
142	 */
143	virtual domTrifans &operator=( const domTrifans &cpy ) { (void)cpy; return *this; }
144
145public: // STATIC METHODS
146	/**
147	 * Creates an instance of this class and returns a daeElementRef referencing it.
148	 * @return a daeElementRef referencing an instance of this object.
149	 */
150	static DLLSPEC daeElementRef create(DAE& dae);
151	/**
152	 * Creates a daeMetaElement object that describes this element in the meta object reflection framework.
153	 * If a daeMetaElement already exists it will return that instead of creating a new one.
154	 * @return A daeMetaElement describing this COLLADA element.
155	 */
156	static DLLSPEC daeMetaElement* registerElement(DAE& dae);
157};
158
159
160#endif
161