RavEngine
Loading...
Searching...
No Matches
PxContactJoint.h
1// Redistribution and use in source and binary forms, with or without
2// modification, are permitted provided that the following conditions
3// are met:
4// * Redistributions of source code must retain the above copyright
5// notice, this list of conditions and the following disclaimer.
6// * Redistributions in binary form must reproduce the above copyright
7// notice, this list of conditions and the following disclaimer in the
8// documentation and/or other materials provided with the distribution.
9// * Neither the name of NVIDIA CORPORATION nor the names of its
10// contributors may be used to endorse or promote products derived
11// from this software without specific prior written permission.
12//
13// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
14// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
17// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24//
25// Copyright (c) 2008-2022 NVIDIA Corporation. All rights reserved.
26// Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved.
27// Copyright (c) 2001-2004 NovodeX AG. All rights reserved.
28
29#ifndef PX_CONTACT_JOINT_H
30#define PX_CONTACT_JOINT_H
31
32#include "extensions/PxJoint.h"
33
34#if !PX_DOXYGEN
35namespace physx
36{
37#endif
38
39 class PxContactJoint;
40
52 PxContactJoint* PxContactJointCreate(PxPhysics& physics, PxRigidActor* actor0, const PxTransform& localFrame0, PxRigidActor* actor1, const PxTransform& localFrame1);
53
61 {
62 PxVec3 linear0;
63 PxVec3 linear1;
64 PxVec3 angular0;
65 PxVec3 angular1;
66
68
69 PxJacobianRow(const PxVec3& lin0, const PxVec3& lin1, const PxVec3& ang0, const PxVec3& ang1) :
70 linear0(lin0), linear1(lin1), angular0(ang0), angular1(ang1)
71 {
72
73 }
74
75 void operator *= (const PxReal scale)
76 {
77 linear0 *= scale;
78 linear1 *= scale;
79 angular0 *= scale;
80 angular1 *= scale;
81 }
82
83 PxJacobianRow operator * (const PxReal scale) const
84 {
85 return PxJacobianRow(linear0*scale, linear1*scale, angular0*scale, angular1*scale);
86 }
87 };
88
94 class PxContactJoint : public PxJoint
95 {
96 public:
97
101 virtual void setContact(const PxVec3& contact) = 0;
102
106 virtual void setContactNormal(const PxVec3& contactNormal) = 0;
107
111 virtual void setPenetration(const PxReal penetration) = 0;
112
116 virtual PxVec3 getContact() const = 0;
117
121 virtual PxVec3 getContactNormal() const = 0;
122
126 virtual PxReal getPenetration() const = 0;
127
128 virtual PxReal getRestitution() const = 0;
129 virtual void setRestitution(const PxReal restitution) = 0;
130 virtual PxReal getBounceThreshold() const = 0;
131 virtual void setBounceThreshold(const PxReal bounceThreshold) = 0;
132
136 virtual const char* getConcreteTypeName() const { return "PxContactJoint"; }
137
138 virtual void computeJacobians(PxJacobianRow* jacobian) const = 0;
139 virtual PxU32 getNbJacobianRows() const = 0;
140
141 protected:
142 //serialization
143
147 PX_INLINE PxContactJoint(PxType concreteType, PxBaseFlags baseFlags) : PxJoint(concreteType, baseFlags) {}
148
152 PX_INLINE PxContactJoint(PxBaseFlags baseFlags) : PxJoint(baseFlags) {}
153
157 virtual bool isKindOf(const char* name) const { return !::strcmp("PxContactJoint", name) || PxJoint::isKindOf(name); }
158
159 //~serialization
160 };
161
162#if !PX_DOXYGEN
163}
164#endif
165
166
167#endif
a joint that maintains an upper or lower bound (or both) on the distance between two points on differ...
Definition PxContactJoint.h:95
virtual PxReal getPenetration() const =0
Return the current penetration value of the joint.
virtual void setContact(const PxVec3 &contact)=0
Set the current contact of the joint.
virtual bool isKindOf(const char *name) const
Returns whether a given type name matches with the type of this instance.
Definition PxContactJoint.h:157
virtual void setContactNormal(const PxVec3 &contactNormal)=0
Set the current contact normal of the joint.
virtual PxVec3 getContactNormal() const =0
Return the current contact normal of the joint.
virtual PxVec3 getContact() const =0
Return the current contact of the joint.
virtual const char * getConcreteTypeName() const
Returns string name of PxContactJoint, used for serialization.
Definition PxContactJoint.h:136
PX_INLINE PxContactJoint(PxBaseFlags baseFlags)
Deserialization constructor.
Definition PxContactJoint.h:152
virtual void setPenetration(const PxReal penetration)=0
Set the current penetration of the joint.
PX_INLINE PxContactJoint(PxType concreteType, PxBaseFlags baseFlags)
Constructor.
Definition PxContactJoint.h:147
a base interface providing common functionality for PhysX joints
Definition PxJoint.h:105
virtual bool isKindOf(const char *name) const
Returns whether a given type name matches with the type of this instance.
Definition PxJoint.h:379
3 Element vector class.
Definition PxVec3.h:50
#define PX_INLINE
Definition PxPreprocessor.h:320
Sorts an array of objects in ascending order, assuming that the predicate implements the < operator:
Definition PxBoxController.h:39
PxContactJoint * PxContactJointCreate(PxPhysics &physics, PxRigidActor *actor0, const PxTransform &localFrame0, PxRigidActor *actor1, const PxTransform &localFrame1)
Create a distance Joint.
Definition ExtContactJoint.cpp:218
a joint that maintains an upper or lower bound (or both) on the distance between two points on differ...
Definition PxContactJoint.h:61