00001
00002
00003
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
00032 virtual GeomType GetGeomType() const = 0;
00033
00034
00035 virtual FCDPhysicsAnalyticalGeometry* Clone() = 0;
00036
00037
00038 virtual FUStatus LoadFromXML(xmlNode* node);
00039
00040
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
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
00172 float radius2;
00173 };
00174
00175
00176 #endif // _FCD_PHYSICS_ANALYTICAL_GEOMETRY_H_