PxConvexMeshGeometry.h

Go to the documentation of this file.
00001 //
00002 // Redistribution and use in source and binary forms, with or without
00003 // modification, are permitted provided that the following conditions
00004 // are met:
00005 //  * Redistributions of source code must retain the above copyright
00006 //    notice, this list of conditions and the following disclaimer.
00007 //  * Redistributions in binary form must reproduce the above copyright
00008 //    notice, this list of conditions and the following disclaimer in the
00009 //    documentation and/or other materials provided with the distribution.
00010 //  * Neither the name of NVIDIA CORPORATION nor the names of its
00011 //    contributors may be used to endorse or promote products derived
00012 //    from this software without specific prior written permission.
00013 //
00014 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
00015 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00016 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
00017 // PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
00018 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00019 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00020 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00021 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
00022 // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00023 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
00024 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00025 //
00026 // Copyright (c) 2008-2018 NVIDIA Corporation. All rights reserved.
00027 // Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved.
00028 // Copyright (c) 2001-2004 NovodeX AG. All rights reserved.  
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 } // namespace physx
00154 #endif
00155 
00157 #endif


Copyright © 2008-2018 NVIDIA Corporation, 2701 San Tomas Expressway, Santa Clara, CA 95050 U.S.A. All rights reserved. www.nvidia.com