00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifndef PX_PHYSICS_NX_CONVEXMESH_GEOMETRY
00032 #define PX_PHYSICS_NX_CONVEXMESH_GEOMETRY
00033
00036 #include "geometry/PxGeometry.h"
00037 #include "geometry/PxMeshScale.h"
00038 #include "common/PxCoreUtilityTypes.h"
00039 #include "geometry/PxConvexMesh.h"
00040
00041 #if !PX_DOXYGEN
00042 namespace physx
00043 {
00044 #endif
00045
00046 class PxConvexMesh;
00047
00053 struct PxConvexMeshGeometryFlag
00054 {
00055 enum Enum
00056 {
00057 eTIGHT_BOUNDS = (1<<0)
00058 };
00059 };
00060
00066 typedef PxFlags<PxConvexMeshGeometryFlag::Enum,PxU8> PxConvexMeshGeometryFlags;
00067 PX_FLAGS_OPERATORS(PxConvexMeshGeometryFlag::Enum,PxU8)
00068
00069
00080 class PxConvexMeshGeometry : public PxGeometry
00081 {
00082 public:
00088 PX_INLINE PxConvexMeshGeometry() :
00089 PxGeometry (PxGeometryType::eCONVEXMESH),
00090 scale (PxMeshScale(1.0f)),
00091 convexMesh (NULL),
00092 maxMargin (3.4e38f)
00093 {}
00094
00103 PX_INLINE PxConvexMeshGeometry( PxConvexMesh* mesh,
00104 const PxMeshScale& scaling = PxMeshScale(),
00105 PxConvexMeshGeometryFlags flags = PxConvexMeshGeometryFlags(),
00106 float margin = 3.4e38f) :
00107 PxGeometry (PxGeometryType::eCONVEXMESH),
00108 scale (scaling),
00109 convexMesh (mesh),
00110 maxMargin (margin),
00111 meshFlags(flags)
00112 {
00113 }
00114
00125 PX_INLINE bool isValid() const;
00126
00127 public:
00128 PxMeshScale scale;
00129 PxConvexMesh* convexMesh;
00130 PxReal maxMargin;
00131 PxConvexMeshGeometryFlags meshFlags;
00132 PxPadding<3> paddingFromFlags;
00133 };
00134
00135
00136 PX_INLINE bool PxConvexMeshGeometry::isValid() const
00137 {
00138 if(mType != PxGeometryType::eCONVEXMESH)
00139 return false;
00140 if(!scale.scale.isFinite() || !scale.rotation.isUnit())
00141 return false;
00142 if(!scale.isValidForConvexMesh())
00143 return false;
00144 if(!convexMesh)
00145 return false;
00146 if (maxMargin < 0.0f)
00147 return false;
00148
00149 return true;
00150 }
00151
00152 #if !PX_DOXYGEN
00153 }
00154 #endif
00155
00157 #endif