FCDocument/FCDPhysicsAnalyticalGeometry.h

00001 /*
00002     Copyright (C) 2005-2006 Feeling Software Inc.
00003     MIT License: http://www.opensource.org/licenses/mit-license.php
00004 */
00005 
00006 #ifndef _FCD_PHYSICS_ANALYTICAL_GEOM_H_
00007 #define _FCD_PHYSICS_ANALYTICAL_GEOM_H_
00008 
00009 #include "FCDocument/FCDEntity.h"
00010 #include "FCDocument/FCDEntityInstance.h"
00011 #include "FUtils/FUDaeEnum.h"
00012 
00013 class FCDocument;
00014 class FCDPhysicsParameterGeneric;
00015 
00016 typedef vector<FCDPhysicsParameterGeneric*> FCDPhysicsParameterList;
00017 
00018 class FCOLLADA_EXPORT FCDPhysicsAnalyticalGeometry : public FCDEntity
00019 {
00020 private:
00021     DeclareObjectType;
00022 
00023 public:
00024     enum GeomType { BOX, PLANE, SPHERE, CYLINDER, CAPSULE, TAPERED_CYLINDER, TAPERED_CAPSULE };
00025 
00026     FCDPhysicsAnalyticalGeometry(FCDocument* document);
00027     virtual ~FCDPhysicsAnalyticalGeometry();
00028 
00029     virtual Type GetType() const {return PHYSICS_ANALYTICAL_GEOMETRY;}
00030 
00031     // Returns the entity type
00032     virtual GeomType GetGeomType() const = 0;
00033 
00034     // Create a copy of this analyticalGeometry
00035     virtual FCDPhysicsAnalyticalGeometry* Clone() = 0;
00036 
00037     // Read in the <physics_analyticalGeometry> node of the COLLADA document
00038     virtual FUStatus LoadFromXML(xmlNode* node);
00039 
00040     // Write out the <physics_analyticalGeometry> node to the COLLADA xml tree
00041     virtual xmlNode* WriteToXML(xmlNode* parentNode) const = 0;
00042 };
00043 
00044 class FCOLLADA_EXPORT FCDPASBox : public FCDPhysicsAnalyticalGeometry
00045 {
00046 private:
00047     DeclareObjectType;
00048 
00049 public:
00050     FCDPASBox(FCDocument* document);
00051     virtual ~FCDPASBox() {}
00052 
00053     virtual FUStatus LoadFromXML(xmlNode* node);
00054     virtual xmlNode* WriteToXML(xmlNode* parentNode) const;
00055     virtual GeomType GetGeomType() const {return BOX;}
00056     virtual FCDPhysicsAnalyticalGeometry* Clone();
00057 
00058 public:
00059     FMVector3 halfExtents;
00060 };
00061 
00062 class FCOLLADA_EXPORT FCDPASPlane : public FCDPhysicsAnalyticalGeometry
00063 {
00064 private:
00065     DeclareObjectType;
00066 
00067 public:
00068     FCDPASPlane(FCDocument* document);
00069     virtual ~FCDPASPlane() {}
00070 
00071     virtual FUStatus LoadFromXML(xmlNode* node);
00072     virtual xmlNode* WriteToXML(xmlNode* parentNode) const;
00073     virtual GeomType GetGeomType() const {return PLANE;}
00074     virtual FCDPhysicsAnalyticalGeometry* Clone();
00075 
00076 public:
00077     FMVector3 normal;
00078     float d;
00079 };
00080 
00081 class FCOLLADA_EXPORT FCDPASSphere : public FCDPhysicsAnalyticalGeometry
00082 {
00083 private:
00084     DeclareObjectType;
00085 
00086 public:
00087     FCDPASSphere(FCDocument* document);
00088     virtual ~FCDPASSphere() {}
00089 
00090     virtual FUStatus LoadFromXML(xmlNode* node);
00091     virtual xmlNode* WriteToXML(xmlNode* parentNode) const;
00092     virtual GeomType GetGeomType() const {return SPHERE;}
00093     virtual FCDPhysicsAnalyticalGeometry* Clone();
00094 
00095 public:
00096     float radius;
00097 };
00098 
00099 class FCOLLADA_EXPORT FCDPASCylinder : public FCDPhysicsAnalyticalGeometry
00100 {
00101 private:
00102     DeclareObjectType;
00103 
00104 public:
00105     FCDPASCylinder(FCDocument* document);
00106     virtual ~FCDPASCylinder() {}
00107 
00108     virtual FUStatus LoadFromXML(xmlNode* node);
00109     virtual xmlNode* WriteToXML(xmlNode* parentNode) const;
00110     virtual GeomType GetGeomType() const {return CYLINDER;}
00111     virtual FCDPhysicsAnalyticalGeometry* Clone();
00112 
00113 public:
00114     float height;
00115     float radius;
00116 };
00117 
00118 class FCOLLADA_EXPORT FCDPASCapsule : public FCDPhysicsAnalyticalGeometry
00119 {
00120 private:
00121     DeclareObjectType;
00122 
00123 public:
00124     FCDPASCapsule(FCDocument* document);
00125     virtual ~FCDPASCapsule() {}
00126 
00127     virtual FUStatus LoadFromXML(xmlNode* node);
00128     virtual xmlNode* WriteToXML(xmlNode* parentNode) const;
00129     virtual GeomType GetGeomType() const {return CAPSULE;}
00130     virtual FCDPhysicsAnalyticalGeometry* Clone();
00131 
00132 public:
00133     float height;
00134     float radius;
00135 };
00136 
00137 class FCOLLADA_EXPORT FCDPASTaperedCapsule : public FCDPASCapsule
00138 {
00139 private:
00140     DeclareObjectType;
00141 
00142 public:
00143     FCDPASTaperedCapsule(FCDocument* document);
00144     virtual ~FCDPASTaperedCapsule() {}
00145 
00146     virtual FUStatus LoadFromXML(xmlNode* node);
00147     virtual xmlNode* WriteToXML(xmlNode* parentNode) const;
00148     virtual GeomType GetGeomType() const {return TAPERED_CAPSULE;}
00149     virtual FCDPhysicsAnalyticalGeometry* Clone();
00150 
00151 public:
00152     //inherits all other attributes from Capsule
00153     float radius2;
00154 };
00155 
00156 class FCOLLADA_EXPORT FCDPASTaperedCylinder : public FCDPASCylinder
00157 {
00158 private:
00159     DeclareObjectType;
00160 
00161 public:
00162     FCDPASTaperedCylinder(FCDocument* document);
00163     virtual ~FCDPASTaperedCylinder() {}
00164 
00165     virtual FUStatus LoadFromXML(xmlNode* node);
00166     virtual xmlNode* WriteToXML(xmlNode* parentNode) const;
00167     virtual GeomType GetGeomType() const {return TAPERED_CYLINDER;}
00168     virtual FCDPhysicsAnalyticalGeometry* Clone();
00169 
00170 public:
00171     //inherits all other attributes from Cylinder
00172     float radius2;
00173 };
00174 
00175 
00176 #endif // _FCD_PHYSICS_ANALYTICAL_GEOMETRY_H_

Generated on Fri May 12 16:44:39 2006 for FCollada by  doxygen 1.4.6-NO