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_ARTICULATION_LINK
32#define PX_PHYSICS_NX_ARTICULATION_LINK
33/** \addtogroup physics
34@{ */
35
36#include "PxPhysXConfig.h"
37#include "PxArticulationJoint.h"
38#include "PxRigidBody.h"
39
40#if !PX_DOXYGEN
41namespace physx
42{
43#endif
44
45 class PxArticulationBase;
46
47/**
48\brief a component of an articulation that represents a rigid body
49
50A limited subset of the properties of PxRigidDynamic are supported. In particular, sleep properties
51are attributes of the articulation rather than each individual body, damping and velocity limits
52are not supported, and links may not be kinematic.
53
54@see PxArticulation PxArticulation.createLink PxArticulationJoint PxRigidBody
55*/
56
57class PxArticulationLink : public PxRigidBody
58{
59public:
60 /**
61 \brief Deletes the articulation link.
62
63 \note Only a leaf articulation link can be released
64
65 Do not keep a reference to the deleted instance.
66
67 @see PxArticulation::createLink()
68 */
69 virtual void release() = 0;
70
71 /**
72 \brief get the articulation to which this articulation link belongs. This returns the base class. The application should
73 establish which articulation implementation this actually is and upcast to that type to access non-common functionality
74
75 \return the articulation to which this link belongs
76 */
77 virtual PxArticulationBase& getArticulation() const = 0;
78
79 /**
80 \brief Get the joint which connects this link to its parent.
81
82 \return The joint connecting the link to the parent. NULL for the root link.
83
84 @see PxArticulationJoint
85 */
86 virtual PxArticulationJointBase* getInboundJoint() const = 0;
87
88 /**
89 \brief Get the degree of freedom of the joint which connects this link to its parent.
90
91 \return The degree of freeedom of the joint connecting the link to the parent. 0xffffffff for the root link.
92
93 @see PxArticulationJoint
94 */
95 virtual PxU32 getInboundJointDof() const = 0;
96
97 /**
98 \brief Get number of child links.
99
100 \return the number of child links
101
102 @see getChildren()
103 */
104 virtual PxU32 getNbChildren() const = 0;
105
106 /**
107 \brief Get low-level link index
108
109 \return low-level index
110 */
111 virtual PxU32 getLinkIndex() const = 0;
112
113 /**
114 \brief Retrieve all the child links.
115
116 \param[out] userBuffer The buffer to receive articulation link pointers.
117 \param[in] bufferSize Size of provided user buffer.
118 \return Number of articulation links written to the buffer.
119 \param[in] startIndex Index of first child pointer to be retrieved
120
121 @see getNbChildren()
122 */
123 virtual PxU32 getChildren(PxArticulationLink** userBuffer, PxU32 bufferSize, PxU32 startIndex=0) const = 0;
124
125 virtual const char* getConcreteTypeName() const { return "PxArticulationLink"; }
126
127protected:
128 PX_INLINE PxArticulationLink(PxType concreteType, PxBaseFlags baseFlags) : PxRigidBody(concreteType, baseFlags) {}
129 PX_INLINE PxArticulationLink(PxBaseFlags baseFlags) : PxRigidBody(baseFlags) {}
130 virtual ~PxArticulationLink() {}
131 virtual bool isKindOf(const char* name) const { return !::strcmp(s1: "PxArticulationLink", s2: name) || PxRigidBody::isKindOf(name); }
132};
133
134#if !PX_DOXYGEN
135} // namespace physx
136#endif
137
138/** @} */
139#endif
140

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