1//
2// Redistribution and use in source and binary forms, with or without
3// modification, are permitted provided that the following conditions
4// are met:
5// * Redistributions of source code must retain the above copyright
6// notice, this list of conditions and the following disclaimer.
7// * Redistributions in binary form must reproduce the above copyright
8// notice, this list of conditions and the following disclaimer in the
9// documentation and/or other materials provided with the distribution.
10// * Neither the name of NVIDIA CORPORATION nor the names of its
11// contributors may be used to endorse or promote products derived
12// from this software without specific prior written permission.
13//
14// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
15// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
18// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25//
26// Copyright (c) 2008-2021 NVIDIA Corporation. All rights reserved.
27// Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved.
28// Copyright (c) 2001-2004 NovodeX AG. All rights reserved.
29
30
31#ifndef PX_PHYSICS_NX_CAPSULE_GEOMETRY
32#define PX_PHYSICS_NX_CAPSULE_GEOMETRY
33/** \addtogroup geomutils
34@{
35*/
36#include "geometry/PxGeometry.h"
37#include "foundation/PxFoundationConfig.h"
38
39#if !PX_DOXYGEN
40namespace physx
41{
42#endif
43
44/**
45\brief Class representing the geometry of a capsule.
46
47Capsules are shaped as the union of a cylinder of length 2 * halfHeight and with the
48given radius centered at the origin and extending along the x axis, and two hemispherical ends.
49\note The scaling of the capsule is expected to be baked into these values, there is no additional scaling parameter.
50
51The function PxTransformFromSegment is a helper for generating an appropriate transform for the capsule from the capsule's interior line segment.
52
53@see PxTransformFromSegment
54*/
55class PxCapsuleGeometry : public PxGeometry
56{
57public:
58 /**
59 \brief Default constructor, initializes to a capsule with zero height and radius.
60 */
61 PX_INLINE PxCapsuleGeometry() : PxGeometry(PxGeometryType::eCAPSULE), radius(0), halfHeight(0) {}
62
63 /**
64 \brief Constructor, initializes to a capsule with passed radius and half height.
65 */
66 PX_INLINE PxCapsuleGeometry(PxReal radius_, PxReal halfHeight_) : PxGeometry(PxGeometryType::eCAPSULE), radius(radius_), halfHeight(halfHeight_) {}
67
68 /**
69 \brief Returns true if the geometry is valid.
70
71 \return True if the current settings are valid.
72
73 \note A valid capsule has radius > 0, halfHeight > 0.
74 It is illegal to call PxRigidActor::createShape and PxPhysics::createShape with a capsule that has zero radius or height.
75
76 @see PxRigidActor::createShape, PxPhysics::createShape
77 */
78 PX_INLINE bool isValid() const;
79
80public:
81 /**
82 \brief The radius of the capsule.
83 */
84 PxReal radius;
85
86 /**
87 \brief half of the capsule's height, measured between the centers of the hemispherical ends.
88 */
89 PxReal halfHeight;
90};
91
92PX_INLINE bool PxCapsuleGeometry::isValid() const
93{
94 if (mType != PxGeometryType::eCAPSULE)
95 return false;
96 if (!PxIsFinite(f: radius) || !PxIsFinite(f: halfHeight))
97 return false;
98 if (radius <= 0.0f || halfHeight <= 0.0f)
99 return false;
100
101 return true;
102}
103
104#if !PX_DOXYGEN
105} // namespace physx
106#endif
107
108/** @} */
109#endif
110

source code of qtquick3dphysics/src/3rdparty/PhysX/include/geometry/PxCapsuleGeometry.h