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 __domInstance_rigid_body_h__
10#define __domInstance_rigid_body_h__
11
12#include <dae/daeDocument.h>
13#include <dom/domTypes.h>
14#include <dom/domElements.h>
15
16#include <dom/domTechnique.h>
17#include <dom/domExtra.h>
18#include <dom/domInstance_physics_material.h>
19#include <dom/domPhysics_material.h>
20#include <dom/domTargetableFloat.h>
21#include <dom/domTranslate.h>
22#include <dom/domRotate.h>
23#include <dom/domTargetableFloat3.h>
24#include <dom/domInstance_geometry.h>
25#include <dom/domPlane.h>
26#include <dom/domBox.h>
27#include <dom/domSphere.h>
28#include <dom/domCylinder.h>
29#include <dom/domTapered_cylinder.h>
30#include <dom/domCapsule.h>
31#include <dom/domTapered_capsule.h>
32class DAE;
33
34/**
35 * This element allows instancing a rigid_body within an instance_physics_model.
36 */
37class domInstance_rigid_body : public daeElement
38{
39public:
40	virtual COLLADA_TYPE::TypeEnum getElementType() const { return COLLADA_TYPE::INSTANCE_RIGID_BODY; }
41	static daeInt ID() { return 703; }
42	virtual daeInt typeID() const { return ID(); }
43public:
44	class domTechnique_common;
45
46	typedef daeSmartRef<domTechnique_common> domTechnique_commonRef;
47	typedef daeTArray<domTechnique_commonRef> domTechnique_common_Array;
48
49/**
50 * The technique_common element specifies the instance_rigid_body information
51 * for the common  profile which all COLLADA implementations need to support.
52 */
53	class domTechnique_common : public daeElement
54	{
55	public:
56		virtual COLLADA_TYPE::TypeEnum getElementType() const { return COLLADA_TYPE::TECHNIQUE_COMMON; }
57		static daeInt ID() { return 704; }
58		virtual daeInt typeID() const { return ID(); }
59	public:
60		class domAngular_velocity;
61
62		typedef daeSmartRef<domAngular_velocity> domAngular_velocityRef;
63		typedef daeTArray<domAngular_velocityRef> domAngular_velocity_Array;
64
65/**
66 * Specifies the initial angular velocity of the rigid_body instance in degrees
67 * per second  around each axis, in the form of an X-Y-Z Euler rotation.
68 */
69		class domAngular_velocity : public daeElement
70		{
71		public:
72			virtual COLLADA_TYPE::TypeEnum getElementType() const { return COLLADA_TYPE::ANGULAR_VELOCITY; }
73			static daeInt ID() { return 705; }
74			virtual daeInt typeID() const { return ID(); }
75
76		protected:  // Value
77			/**
78			 * The domFloat3 value of the text data of this element.
79			 */
80			domFloat3 _value;
81
82		public:	//Accessors and Mutators
83			/**
84			 * Gets the _value array.
85			 * @return Returns a domFloat3 reference of the _value array.
86			 */
87			domFloat3 &getValue() { return _value; }
88			/**
89			 * Gets the _value array.
90			 * @return Returns a constant domFloat3 reference of the _value array.
91			 */
92			const domFloat3 &getValue() const { return _value; }
93			/**
94			 * Sets the _value array.
95			 * @param val The new value for the _value array.
96			 */
97			void setValue( const domFloat3 &val ) { _value = val; }
98
99		protected:
100			/**
101			 * Constructor
102			 */
103			domAngular_velocity(DAE& dae) : daeElement(dae), _value() {}
104			/**
105			 * Destructor
106			 */
107			virtual ~domAngular_velocity() {}
108			/**
109			 * Overloaded assignment operator
110			 */
111			virtual domAngular_velocity &operator=( const domAngular_velocity &cpy ) { (void)cpy; return *this; }
112
113		public: // STATIC METHODS
114			/**
115			 * Creates an instance of this class and returns a daeElementRef referencing it.
116			 * @return a daeElementRef referencing an instance of this object.
117			 */
118			static DLLSPEC daeElementRef create(DAE& dae);
119			/**
120			 * Creates a daeMetaElement object that describes this element in the meta object reflection framework.
121			 * If a daeMetaElement already exists it will return that instead of creating a new one.
122			 * @return A daeMetaElement describing this COLLADA element.
123			 */
124			static DLLSPEC daeMetaElement* registerElement(DAE& dae);
125		};
126
127		class domVelocity;
128
129		typedef daeSmartRef<domVelocity> domVelocityRef;
130		typedef daeTArray<domVelocityRef> domVelocity_Array;
131
132/**
133 * Specifies the initial linear velocity of the rigid_body instance.
134 */
135		class domVelocity : public daeElement
136		{
137		public:
138			virtual COLLADA_TYPE::TypeEnum getElementType() const { return COLLADA_TYPE::VELOCITY; }
139			static daeInt ID() { return 706; }
140			virtual daeInt typeID() const { return ID(); }
141
142		protected:  // Value
143			/**
144			 * The domFloat3 value of the text data of this element.
145			 */
146			domFloat3 _value;
147
148		public:	//Accessors and Mutators
149			/**
150			 * Gets the _value array.
151			 * @return Returns a domFloat3 reference of the _value array.
152			 */
153			domFloat3 &getValue() { return _value; }
154			/**
155			 * Gets the _value array.
156			 * @return Returns a constant domFloat3 reference of the _value array.
157			 */
158			const domFloat3 &getValue() const { return _value; }
159			/**
160			 * Sets the _value array.
161			 * @param val The new value for the _value array.
162			 */
163			void setValue( const domFloat3 &val ) { _value = val; }
164
165		protected:
166			/**
167			 * Constructor
168			 */
169			domVelocity(DAE& dae) : daeElement(dae), _value() {}
170			/**
171			 * Destructor
172			 */
173			virtual ~domVelocity() {}
174			/**
175			 * Overloaded assignment operator
176			 */
177			virtual domVelocity &operator=( const domVelocity &cpy ) { (void)cpy; return *this; }
178
179		public: // STATIC METHODS
180			/**
181			 * Creates an instance of this class and returns a daeElementRef referencing it.
182			 * @return a daeElementRef referencing an instance of this object.
183			 */
184			static DLLSPEC daeElementRef create(DAE& dae);
185			/**
186			 * Creates a daeMetaElement object that describes this element in the meta object reflection framework.
187			 * If a daeMetaElement already exists it will return that instead of creating a new one.
188			 * @return A daeMetaElement describing this COLLADA element.
189			 */
190			static DLLSPEC daeMetaElement* registerElement(DAE& dae);
191		};
192
193		class domDynamic;
194
195		typedef daeSmartRef<domDynamic> domDynamicRef;
196		typedef daeTArray<domDynamicRef> domDynamic_Array;
197
198		class domDynamic : public daeElement
199		{
200		public:
201			virtual COLLADA_TYPE::TypeEnum getElementType() const { return COLLADA_TYPE::DYNAMIC; }
202			static daeInt ID() { return 707; }
203			virtual daeInt typeID() const { return ID(); }
204		protected:  // Attribute
205/**
206 *  The sid attribute is a text string value containing the sub-identifier
207 * of this element.  This value must be unique within the scope of the parent
208 * element. Optional attribute.
209 */
210			xsNCName attrSid;
211
212		protected:  // Value
213			/**
214			 * The domBool value of the text data of this element.
215			 */
216			domBool _value;
217
218		public:	//Accessors and Mutators
219			/**
220			 * Gets the sid attribute.
221			 * @return Returns a xsNCName of the sid attribute.
222			 */
223			xsNCName getSid() const { return attrSid; }
224			/**
225			 * Sets the sid attribute.
226			 * @param atSid The new value for the sid attribute.
227			 */
228			void setSid( xsNCName atSid ) { *(daeStringRef*)&attrSid = atSid; _validAttributeArray[0] = true; }
229
230			/**
231			 * Gets the value of this element.
232			 * @return a domBool of the value.
233			 */
234			domBool getValue() const { return _value; }
235			/**
236			 * Sets the _value of this element.
237			 * @param val The new value for this element.
238			 */
239			void setValue( domBool val ) { _value = val; }
240
241		protected:
242			/**
243			 * Constructor
244			 */
245			domDynamic(DAE& dae) : daeElement(dae), attrSid(), _value() {}
246			/**
247			 * Destructor
248			 */
249			virtual ~domDynamic() {}
250			/**
251			 * Overloaded assignment operator
252			 */
253			virtual domDynamic &operator=( const domDynamic &cpy ) { (void)cpy; return *this; }
254
255		public: // STATIC METHODS
256			/**
257			 * Creates an instance of this class and returns a daeElementRef referencing it.
258			 * @return a daeElementRef referencing an instance of this object.
259			 */
260			static DLLSPEC daeElementRef create(DAE& dae);
261			/**
262			 * Creates a daeMetaElement object that describes this element in the meta object reflection framework.
263			 * If a daeMetaElement already exists it will return that instead of creating a new one.
264			 * @return A daeMetaElement describing this COLLADA element.
265			 */
266			static DLLSPEC daeMetaElement* registerElement(DAE& dae);
267		};
268
269		class domMass_frame;
270
271		typedef daeSmartRef<domMass_frame> domMass_frameRef;
272		typedef daeTArray<domMass_frameRef> domMass_frame_Array;
273
274		class domMass_frame : public daeElement
275		{
276		public:
277			virtual COLLADA_TYPE::TypeEnum getElementType() const { return COLLADA_TYPE::MASS_FRAME; }
278			static daeInt ID() { return 708; }
279			virtual daeInt typeID() const { return ID(); }
280
281		protected:  // Elements
282			domTranslate_Array elemTranslate_array;
283			domRotate_Array elemRotate_array;
284			/**
285			 * Used to preserve order in elements that do not specify strict sequencing of sub-elements.
286			 */
287			daeElementRefArray _contents;
288			/**
289			 * Used to preserve order in elements that have a complex content model.
290			 */
291			daeUIntArray       _contentsOrder;
292
293			/**
294			 * Used to store information needed for some content model objects.
295			 */
296			daeTArray< daeCharArray * > _CMData;
297
298
299		public:	//Accessors and Mutators
300			/**
301			 * Gets the translate element array.
302			 * @return Returns a reference to the array of translate elements.
303			 */
304			domTranslate_Array &getTranslate_array() { return elemTranslate_array; }
305			/**
306			 * Gets the translate element array.
307			 * @return Returns a constant reference to the array of translate elements.
308			 */
309			const domTranslate_Array &getTranslate_array() const { return elemTranslate_array; }
310			/**
311			 * Gets the rotate element array.
312			 * @return Returns a reference to the array of rotate elements.
313			 */
314			domRotate_Array &getRotate_array() { return elemRotate_array; }
315			/**
316			 * Gets the rotate element array.
317			 * @return Returns a constant reference to the array of rotate elements.
318			 */
319			const domRotate_Array &getRotate_array() const { return elemRotate_array; }
320			/**
321			 * Gets the _contents array.
322			 * @return Returns a reference to the _contents element array.
323			 */
324			daeElementRefArray &getContents() { return _contents; }
325			/**
326			 * Gets the _contents array.
327			 * @return Returns a constant reference to the _contents element array.
328			 */
329			const daeElementRefArray &getContents() const { return _contents; }
330
331		protected:
332			/**
333			 * Constructor
334			 */
335			domMass_frame(DAE& dae) : daeElement(dae), elemTranslate_array(), elemRotate_array() {}
336			/**
337			 * Destructor
338			 */
339			virtual ~domMass_frame() { daeElement::deleteCMDataArray(_CMData); }
340			/**
341			 * Overloaded assignment operator
342			 */
343			virtual domMass_frame &operator=( const domMass_frame &cpy ) { (void)cpy; return *this; }
344
345		public: // STATIC METHODS
346			/**
347			 * Creates an instance of this class and returns a daeElementRef referencing it.
348			 * @return a daeElementRef referencing an instance of this object.
349			 */
350			static DLLSPEC daeElementRef create(DAE& dae);
351			/**
352			 * Creates a daeMetaElement object that describes this element in the meta object reflection framework.
353			 * If a daeMetaElement already exists it will return that instead of creating a new one.
354			 * @return A daeMetaElement describing this COLLADA element.
355			 */
356			static DLLSPEC daeMetaElement* registerElement(DAE& dae);
357		};
358
359		class domShape;
360
361		typedef daeSmartRef<domShape> domShapeRef;
362		typedef daeTArray<domShapeRef> domShape_Array;
363
364		class domShape : public daeElement
365		{
366		public:
367			virtual COLLADA_TYPE::TypeEnum getElementType() const { return COLLADA_TYPE::SHAPE; }
368			static daeInt ID() { return 709; }
369			virtual daeInt typeID() const { return ID(); }
370		public:
371			class domHollow;
372
373			typedef daeSmartRef<domHollow> domHollowRef;
374			typedef daeTArray<domHollowRef> domHollow_Array;
375
376			class domHollow : public daeElement
377			{
378			public:
379				virtual COLLADA_TYPE::TypeEnum getElementType() const { return COLLADA_TYPE::HOLLOW; }
380				static daeInt ID() { return 710; }
381				virtual daeInt typeID() const { return ID(); }
382			protected:  // Attribute
383/**
384 *  The sid attribute is a text string value containing the sub-identifier
385 * of this element. This value must be unique within the scope of the parent
386 * element. Optional attribute.
387 */
388				xsNCName attrSid;
389
390			protected:  // Value
391				/**
392				 * The domBool value of the text data of this element.
393				 */
394				domBool _value;
395
396			public:	//Accessors and Mutators
397				/**
398				 * Gets the sid attribute.
399				 * @return Returns a xsNCName of the sid attribute.
400				 */
401				xsNCName getSid() const { return attrSid; }
402				/**
403				 * Sets the sid attribute.
404				 * @param atSid The new value for the sid attribute.
405				 */
406				void setSid( xsNCName atSid ) { *(daeStringRef*)&attrSid = atSid; _validAttributeArray[0] = true; }
407
408				/**
409				 * Gets the value of this element.
410				 * @return a domBool of the value.
411				 */
412				domBool getValue() const { return _value; }
413				/**
414				 * Sets the _value of this element.
415				 * @param val The new value for this element.
416				 */
417				void setValue( domBool val ) { _value = val; }
418
419			protected:
420				/**
421				 * Constructor
422				 */
423				domHollow(DAE& dae) : daeElement(dae), attrSid(), _value() {}
424				/**
425				 * Destructor
426				 */
427				virtual ~domHollow() {}
428				/**
429				 * Overloaded assignment operator
430				 */
431				virtual domHollow &operator=( const domHollow &cpy ) { (void)cpy; return *this; }
432
433			public: // STATIC METHODS
434				/**
435				 * Creates an instance of this class and returns a daeElementRef referencing it.
436				 * @return a daeElementRef referencing an instance of this object.
437				 */
438				static DLLSPEC daeElementRef create(DAE& dae);
439				/**
440				 * Creates a daeMetaElement object that describes this element in the meta object reflection framework.
441				 * If a daeMetaElement already exists it will return that instead of creating a new one.
442				 * @return A daeMetaElement describing this COLLADA element.
443				 */
444				static DLLSPEC daeMetaElement* registerElement(DAE& dae);
445			};
446
447
448
449		protected:  // Elements
450			domHollowRef elemHollow;
451			domTargetableFloatRef elemMass;
452			domTargetableFloatRef elemDensity;
453			domInstance_physics_materialRef elemInstance_physics_material;
454			domPhysics_materialRef elemPhysics_material;
455			domInstance_geometryRef elemInstance_geometry;
456			domPlaneRef elemPlane;
457			domBoxRef elemBox;
458			domSphereRef elemSphere;
459			domCylinderRef elemCylinder;
460			domTapered_cylinderRef elemTapered_cylinder;
461			domCapsuleRef elemCapsule;
462			domTapered_capsuleRef elemTapered_capsule;
463			domTranslate_Array elemTranslate_array;
464			domRotate_Array elemRotate_array;
465/**
466 *  The extra element may appear any number of times.  @see domExtra
467 */
468			domExtra_Array elemExtra_array;
469			/**
470			 * Used to preserve order in elements that do not specify strict sequencing of sub-elements.
471			 */
472			daeElementRefArray _contents;
473			/**
474			 * Used to preserve order in elements that have a complex content model.
475			 */
476			daeUIntArray       _contentsOrder;
477
478			/**
479			 * Used to store information needed for some content model objects.
480			 */
481			daeTArray< daeCharArray * > _CMData;
482
483
484		public:	//Accessors and Mutators
485			/**
486			 * Gets the hollow element.
487			 * @return a daeSmartRef to the hollow element.
488			 */
489			const domHollowRef getHollow() const { return elemHollow; }
490			/**
491			 * Gets the mass element.
492			 * @return a daeSmartRef to the mass element.
493			 */
494			const domTargetableFloatRef getMass() const { return elemMass; }
495			/**
496			 * Gets the density element.
497			 * @return a daeSmartRef to the density element.
498			 */
499			const domTargetableFloatRef getDensity() const { return elemDensity; }
500			/**
501			 * Gets the instance_physics_material element.
502			 * @return a daeSmartRef to the instance_physics_material element.
503			 */
504			const domInstance_physics_materialRef getInstance_physics_material() const { return elemInstance_physics_material; }
505			/**
506			 * Gets the physics_material element.
507			 * @return a daeSmartRef to the physics_material element.
508			 */
509			const domPhysics_materialRef getPhysics_material() const { return elemPhysics_material; }
510			/**
511			 * Gets the instance_geometry element.
512			 * @return a daeSmartRef to the instance_geometry element.
513			 */
514			const domInstance_geometryRef getInstance_geometry() const { return elemInstance_geometry; }
515			/**
516			 * Gets the plane element.
517			 * @return a daeSmartRef to the plane element.
518			 */
519			const domPlaneRef getPlane() const { return elemPlane; }
520			/**
521			 * Gets the box element.
522			 * @return a daeSmartRef to the box element.
523			 */
524			const domBoxRef getBox() const { return elemBox; }
525			/**
526			 * Gets the sphere element.
527			 * @return a daeSmartRef to the sphere element.
528			 */
529			const domSphereRef getSphere() const { return elemSphere; }
530			/**
531			 * Gets the cylinder element.
532			 * @return a daeSmartRef to the cylinder element.
533			 */
534			const domCylinderRef getCylinder() const { return elemCylinder; }
535			/**
536			 * Gets the tapered_cylinder element.
537			 * @return a daeSmartRef to the tapered_cylinder element.
538			 */
539			const domTapered_cylinderRef getTapered_cylinder() const { return elemTapered_cylinder; }
540			/**
541			 * Gets the capsule element.
542			 * @return a daeSmartRef to the capsule element.
543			 */
544			const domCapsuleRef getCapsule() const { return elemCapsule; }
545			/**
546			 * Gets the tapered_capsule element.
547			 * @return a daeSmartRef to the tapered_capsule element.
548			 */
549			const domTapered_capsuleRef getTapered_capsule() const { return elemTapered_capsule; }
550			/**
551			 * Gets the translate element array.
552			 * @return Returns a reference to the array of translate elements.
553			 */
554			domTranslate_Array &getTranslate_array() { return elemTranslate_array; }
555			/**
556			 * Gets the translate element array.
557			 * @return Returns a constant reference to the array of translate elements.
558			 */
559			const domTranslate_Array &getTranslate_array() const { return elemTranslate_array; }
560			/**
561			 * Gets the rotate element array.
562			 * @return Returns a reference to the array of rotate elements.
563			 */
564			domRotate_Array &getRotate_array() { return elemRotate_array; }
565			/**
566			 * Gets the rotate element array.
567			 * @return Returns a constant reference to the array of rotate elements.
568			 */
569			const domRotate_Array &getRotate_array() const { return elemRotate_array; }
570			/**
571			 * Gets the extra element array.
572			 * @return Returns a reference to the array of extra elements.
573			 */
574			domExtra_Array &getExtra_array() { return elemExtra_array; }
575			/**
576			 * Gets the extra element array.
577			 * @return Returns a constant reference to the array of extra elements.
578			 */
579			const domExtra_Array &getExtra_array() const { return elemExtra_array; }
580			/**
581			 * Gets the _contents array.
582			 * @return Returns a reference to the _contents element array.
583			 */
584			daeElementRefArray &getContents() { return _contents; }
585			/**
586			 * Gets the _contents array.
587			 * @return Returns a constant reference to the _contents element array.
588			 */
589			const daeElementRefArray &getContents() const { return _contents; }
590
591		protected:
592			/**
593			 * Constructor
594			 */
595			domShape(DAE& dae) : daeElement(dae), elemHollow(), elemMass(), elemDensity(), elemInstance_physics_material(), elemPhysics_material(), elemInstance_geometry(), elemPlane(), elemBox(), elemSphere(), elemCylinder(), elemTapered_cylinder(), elemCapsule(), elemTapered_capsule(), elemTranslate_array(), elemRotate_array(), elemExtra_array() {}
596			/**
597			 * Destructor
598			 */
599			virtual ~domShape() { daeElement::deleteCMDataArray(_CMData); }
600			/**
601			 * Overloaded assignment operator
602			 */
603			virtual domShape &operator=( const domShape &cpy ) { (void)cpy; return *this; }
604
605		public: // STATIC METHODS
606			/**
607			 * Creates an instance of this class and returns a daeElementRef referencing it.
608			 * @return a daeElementRef referencing an instance of this object.
609			 */
610			static DLLSPEC daeElementRef create(DAE& dae);
611			/**
612			 * Creates a daeMetaElement object that describes this element in the meta object reflection framework.
613			 * If a daeMetaElement already exists it will return that instead of creating a new one.
614			 * @return A daeMetaElement describing this COLLADA element.
615			 */
616			static DLLSPEC daeMetaElement* registerElement(DAE& dae);
617		};
618
619
620
621	protected:  // Elements
622/**
623 * Specifies the initial angular velocity of the rigid_body instance in degrees
624 * per second  around each axis, in the form of an X-Y-Z Euler rotation. @see
625 * domAngular_velocity
626 */
627		domAngular_velocityRef elemAngular_velocity;
628/**
629 * Specifies the initial linear velocity of the rigid_body instance. @see
630 * domVelocity
631 */
632		domVelocityRef elemVelocity;
633		domDynamicRef elemDynamic;
634		domTargetableFloatRef elemMass;
635		domMass_frameRef elemMass_frame;
636		domTargetableFloat3Ref elemInertia;
637		domInstance_physics_materialRef elemInstance_physics_material;
638		domPhysics_materialRef elemPhysics_material;
639		domShape_Array elemShape_array;
640		/**
641		 * Used to preserve order in elements that do not specify strict sequencing of sub-elements.
642		 */
643		daeElementRefArray _contents;
644		/**
645		 * Used to preserve order in elements that have a complex content model.
646		 */
647		daeUIntArray       _contentsOrder;
648
649		/**
650		 * Used to store information needed for some content model objects.
651		 */
652		daeTArray< daeCharArray * > _CMData;
653
654
655	public:	//Accessors and Mutators
656		/**
657		 * Gets the angular_velocity element.
658		 * @return a daeSmartRef to the angular_velocity element.
659		 */
660		const domAngular_velocityRef getAngular_velocity() const { return elemAngular_velocity; }
661		/**
662		 * Gets the velocity element.
663		 * @return a daeSmartRef to the velocity element.
664		 */
665		const domVelocityRef getVelocity() const { return elemVelocity; }
666		/**
667		 * Gets the dynamic element.
668		 * @return a daeSmartRef to the dynamic element.
669		 */
670		const domDynamicRef getDynamic() const { return elemDynamic; }
671		/**
672		 * Gets the mass element.
673		 * @return a daeSmartRef to the mass element.
674		 */
675		const domTargetableFloatRef getMass() const { return elemMass; }
676		/**
677		 * Gets the mass_frame element.
678		 * @return a daeSmartRef to the mass_frame element.
679		 */
680		const domMass_frameRef getMass_frame() const { return elemMass_frame; }
681		/**
682		 * Gets the inertia element.
683		 * @return a daeSmartRef to the inertia element.
684		 */
685		const domTargetableFloat3Ref getInertia() const { return elemInertia; }
686		/**
687		 * Gets the instance_physics_material element.
688		 * @return a daeSmartRef to the instance_physics_material element.
689		 */
690		const domInstance_physics_materialRef getInstance_physics_material() const { return elemInstance_physics_material; }
691		/**
692		 * Gets the physics_material element.
693		 * @return a daeSmartRef to the physics_material element.
694		 */
695		const domPhysics_materialRef getPhysics_material() const { return elemPhysics_material; }
696		/**
697		 * Gets the shape element array.
698		 * @return Returns a reference to the array of shape elements.
699		 */
700		domShape_Array &getShape_array() { return elemShape_array; }
701		/**
702		 * Gets the shape element array.
703		 * @return Returns a constant reference to the array of shape elements.
704		 */
705		const domShape_Array &getShape_array() const { return elemShape_array; }
706		/**
707		 * Gets the _contents array.
708		 * @return Returns a reference to the _contents element array.
709		 */
710		daeElementRefArray &getContents() { return _contents; }
711		/**
712		 * Gets the _contents array.
713		 * @return Returns a constant reference to the _contents element array.
714		 */
715		const daeElementRefArray &getContents() const { return _contents; }
716
717	protected:
718		/**
719		 * Constructor
720		 */
721		domTechnique_common(DAE& dae) : daeElement(dae), elemAngular_velocity(), elemVelocity(), elemDynamic(), elemMass(), elemMass_frame(), elemInertia(), elemInstance_physics_material(), elemPhysics_material(), elemShape_array() {}
722		/**
723		 * Destructor
724		 */
725		virtual ~domTechnique_common() { daeElement::deleteCMDataArray(_CMData); }
726		/**
727		 * Overloaded assignment operator
728		 */
729		virtual domTechnique_common &operator=( const domTechnique_common &cpy ) { (void)cpy; return *this; }
730
731	public: // STATIC METHODS
732		/**
733		 * Creates an instance of this class and returns a daeElementRef referencing it.
734		 * @return a daeElementRef referencing an instance of this object.
735		 */
736		static DLLSPEC daeElementRef create(DAE& dae);
737		/**
738		 * Creates a daeMetaElement object that describes this element in the meta object reflection framework.
739		 * If a daeMetaElement already exists it will return that instead of creating a new one.
740		 * @return A daeMetaElement describing this COLLADA element.
741		 */
742		static DLLSPEC daeMetaElement* registerElement(DAE& dae);
743	};
744
745
746protected:  // Attributes
747/**
748 *  The body attribute indicates which rigid_body to instantiate. Required
749 * attribute.
750 */
751	xsNCName attrBody;
752/**
753 *  The sid attribute is a text string value containing the sub-identifier
754 * of this element. This  value must be unique within the scope of the parent
755 * element. Optional attribute.
756 */
757	xsNCName attrSid;
758/**
759 *  The name attribute is the text string name of this element. Optional attribute.
760 */
761	xsNCName attrName;
762/**
763 *  The target attribute indicates which node is influenced by this rigid_body
764 * instance.  Required attribute
765 */
766	xsAnyURI attrTarget;
767
768protected:  // Elements
769/**
770 * The technique_common element specifies the instance_rigid_body information
771 * for the common  profile which all COLLADA implementations need to support.
772 * @see domTechnique_common
773 */
774	domTechnique_commonRef elemTechnique_common;
775/**
776 *  This element may contain any number of non-common profile techniques.
777 * @see domTechnique
778 */
779	domTechnique_Array elemTechnique_array;
780/**
781 *  The extra element may appear any number of times.  @see domExtra
782 */
783	domExtra_Array elemExtra_array;
784
785public:	//Accessors and Mutators
786	/**
787	 * Gets the body attribute.
788	 * @return Returns a xsNCName of the body attribute.
789	 */
790	xsNCName getBody() const { return attrBody; }
791	/**
792	 * Sets the body attribute.
793	 * @param atBody The new value for the body attribute.
794	 */
795	void setBody( xsNCName atBody ) { *(daeStringRef*)&attrBody = atBody; _validAttributeArray[0] = true; }
796
797	/**
798	 * Gets the sid attribute.
799	 * @return Returns a xsNCName of the sid attribute.
800	 */
801	xsNCName getSid() const { return attrSid; }
802	/**
803	 * Sets the sid attribute.
804	 * @param atSid The new value for the sid attribute.
805	 */
806	void setSid( xsNCName atSid ) { *(daeStringRef*)&attrSid = atSid; _validAttributeArray[1] = true; }
807
808	/**
809	 * Gets the name attribute.
810	 * @return Returns a xsNCName of the name attribute.
811	 */
812	xsNCName getName() const { return attrName; }
813	/**
814	 * Sets the name attribute.
815	 * @param atName The new value for the name attribute.
816	 */
817	void setName( xsNCName atName ) { *(daeStringRef*)&attrName = atName; _validAttributeArray[2] = true; }
818
819	/**
820	 * Gets the target attribute.
821	 * @return Returns a xsAnyURI reference of the target attribute.
822	 */
823	xsAnyURI &getTarget() { return attrTarget; }
824	/**
825	 * Gets the target attribute.
826	 * @return Returns a constant xsAnyURI reference of the target attribute.
827	 */
828	const xsAnyURI &getTarget() const { return attrTarget; }
829	/**
830	 * Sets the target attribute.
831	 * @param atTarget The new value for the target attribute.
832	 */
833	void setTarget( const xsAnyURI &atTarget ) { attrTarget = atTarget; _validAttributeArray[3] = true; }
834	/**
835	 * Sets the target attribute.
836	 * @param atTarget The new value for the target attribute.
837	 */
838	void setTarget( xsString atTarget ) { attrTarget = atTarget; _validAttributeArray[3] = true; }
839
840	/**
841	 * Gets the technique_common element.
842	 * @return a daeSmartRef to the technique_common element.
843	 */
844	const domTechnique_commonRef getTechnique_common() const { return elemTechnique_common; }
845	/**
846	 * Gets the technique element array.
847	 * @return Returns a reference to the array of technique elements.
848	 */
849	domTechnique_Array &getTechnique_array() { return elemTechnique_array; }
850	/**
851	 * Gets the technique element array.
852	 * @return Returns a constant reference to the array of technique elements.
853	 */
854	const domTechnique_Array &getTechnique_array() const { return elemTechnique_array; }
855	/**
856	 * Gets the extra element array.
857	 * @return Returns a reference to the array of extra elements.
858	 */
859	domExtra_Array &getExtra_array() { return elemExtra_array; }
860	/**
861	 * Gets the extra element array.
862	 * @return Returns a constant reference to the array of extra elements.
863	 */
864	const domExtra_Array &getExtra_array() const { return elemExtra_array; }
865protected:
866	/**
867	 * Constructor
868	 */
869	domInstance_rigid_body(DAE& dae) : daeElement(dae), attrBody(), attrSid(), attrName(), attrTarget(dae, *this), elemTechnique_common(), elemTechnique_array(), elemExtra_array() {}
870	/**
871	 * Destructor
872	 */
873	virtual ~domInstance_rigid_body() {}
874	/**
875	 * Overloaded assignment operator
876	 */
877	virtual domInstance_rigid_body &operator=( const domInstance_rigid_body &cpy ) { (void)cpy; return *this; }
878
879public: // STATIC METHODS
880	/**
881	 * Creates an instance of this class and returns a daeElementRef referencing it.
882	 * @return a daeElementRef referencing an instance of this object.
883	 */
884	static DLLSPEC daeElementRef create(DAE& dae);
885	/**
886	 * Creates a daeMetaElement object that describes this element in the meta object reflection framework.
887	 * If a daeMetaElement already exists it will return that instead of creating a new one.
888	 * @return A daeMetaElement describing this COLLADA element.
889	 */
890	static DLLSPEC daeMetaElement* registerElement(DAE& dae);
891};
892
893
894#endif
895