RavEngine
Loading...
Searching...
No Matches
NpArticulationJointReducedCoordinate.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 NP_ARTICULATION_JOINT_RC_H
30#define NP_ARTICULATION_JOINT_RC_H
31
32#include "PxArticulationJointReducedCoordinate.h"
33#include "ScArticulationJointCore.h"
34#include "NpArticulationLink.h"
35#include "NpBase.h"
36
37#if PX_ENABLE_DEBUG_VISUALIZATION
38 #include "common/PxRenderOutput.h"
39#else
40 PX_CATCH_UNDEFINED_ENABLE_DEBUG_VISUALIZATION
41#endif
42
43namespace physx
44{
45 class NpScene;
46 class NpArticulationLink;
47
49 {
50 //= ATTENTION! =====================================================================================
51 // Changing the data layout of this class breaks the binary serialization format. See comments for
52 // PX_BINARY_SERIAL_VERSION. If a modification is required, please adjust the getBinaryMetaData
53 // function. If the modification is made on a custom branch, please change PX_BINARY_SERIAL_VERSION
54 // accordingly.
55 //==================================================================================================
56 public:
57 // PX_SERIALIZATION
59 : PxArticulationJointReducedCoordinate(baseFlags), NpBase(PxEmpty), mCore(PxEmpty) {}
60 void preExportDataReset() { mCore.preExportDataReset(); }
61
62 virtual void resolveReferences(PxDeserializationContext& context);
63 static NpArticulationJointReducedCoordinate* createObject(PxU8*& address, PxDeserializationContext& context);
64 static void getBinaryMetaData(PxOutputStream& stream);
65 void exportExtraData(PxSerializationContext&) {}
66 void importExtraData(PxDeserializationContext&) {}
67 virtual void requiresObjects(PxProcessPxBaseCallback&) {}
68 virtual bool isSubordinate() const { return true; }
69 //~PX_SERIALIZATION
70 NpArticulationJointReducedCoordinate(NpArticulationLink& parent, const PxTransform& parentFrame, NpArticulationLink& child, const PxTransform& childFrame);
72
73 //---------------------------------------------------------------------------------
74 // PxArticulationJoint implementation
75 //---------------------------------------------------------------------------------
76
77 virtual void setJointType(PxArticulationJointType::Enum jointType);
79
82
83 virtual void setFrictionCoefficient(const PxReal coefficient);
84 virtual PxReal getFrictionCoefficient() const;
85
86 virtual void setMaxJointVelocity(const PxReal maxJointV);
87 virtual PxReal getMaxJointVelocity() const;
88
89 virtual void setLimitParams(PxArticulationAxis::Enum axis, const PxArticulationLimit& pair);
91
92 virtual void setDriveParams(PxArticulationAxis::Enum axis, const PxArticulationDrive& drive);
94
95 virtual void setDriveTarget(PxArticulationAxis::Enum axis, const PxReal target, bool autowake = true);
96 virtual PxReal getDriveTarget(PxArticulationAxis::Enum axis) const;
97
98 virtual void setDriveVelocity(PxArticulationAxis::Enum axis, const PxReal targetVel, bool autowake = true);
99 virtual PxReal getDriveVelocity(PxArticulationAxis::Enum axis) const;
100
101 virtual void setArmature(PxArticulationAxis::Enum axis, const PxReal armature);
102 virtual PxReal getArmature(PxArticulationAxis::Enum axis) const;
103
104 virtual void setJointPosition(PxArticulationAxis::Enum axis, const PxReal jointPos);
105 virtual PxReal getJointPosition(PxArticulationAxis::Enum axis) const;
106
107 virtual void setJointVelocity(PxArticulationAxis::Enum axis, const PxReal jointVel);
108 virtual PxReal getJointVelocity(PxArticulationAxis::Enum axis) const;
109
110 void release();
111
112
113 PX_FORCE_INLINE Sc::ArticulationJointCore& getCore() { return mCore; }
114 static PX_FORCE_INLINE size_t getCoreOffset() { return PX_OFFSET_OF_RT(NpArticulationJointReducedCoordinate, mCore); }
115
116 PX_INLINE void scSetParentPose(const PxTransform& v)
117 {
118 PX_ASSERT(!isAPIWriteForbidden());
119 mCore.setParentPose(v);
120 UPDATE_PVD_PROPERTY
121 }
122
123 PX_INLINE void scSetChildPose(const PxTransform& v)
124 {
125 PX_ASSERT(!isAPIWriteForbidden());
126 mCore.setChildPose(v);
127 UPDATE_PVD_PROPERTY
128 }
129
130 PX_INLINE void scSetJointType(PxArticulationJointType::Enum v)
131 {
132 PX_ASSERT(!isAPIWriteForbidden());
133 mCore.setJointType(v);
134 UPDATE_PVD_PROPERTY
135 }
136 PX_INLINE void scSetFrictionCoefficient(const PxReal v)
137 {
138 PX_ASSERT(!isAPIWriteForbidden());
139 mCore.setFrictionCoefficient(v);
140 UPDATE_PVD_PROPERTY
141 }
142 PX_INLINE void scSetMaxJointVelocity(const PxReal v)
143 {
144 PX_ASSERT(!isAPIWriteForbidden());
145 mCore.setMaxJointVelocity(v);
146 UPDATE_PVD_PROPERTY
147 }
148
149 PX_INLINE void scSetLimit(PxArticulationAxis::Enum axis, const PxArticulationLimit& pair)
150 {
151 PX_ASSERT(!isAPIWriteForbidden());
152 mCore.setLimit(axis, pair);
153 UPDATE_PVD_PROPERTY
154 }
155
156 PX_INLINE void scSetDrive(PxArticulationAxis::Enum axis, const PxArticulationDrive& drive)
157 {
158 PX_ASSERT(!isAPIWriteForbidden());
159 mCore.setDrive(axis, drive);
160 UPDATE_PVD_PROPERTY
161 }
162
163 PX_INLINE void scSetDriveTarget(PxArticulationAxis::Enum axis, PxReal targetP)
164 {
165 PX_ASSERT(!isAPIWriteForbidden());
166 mCore.setTargetP(axis, targetP);
167 UPDATE_PVD_PROPERTY
168 }
169
170 PX_INLINE void scSetDriveVelocity(PxArticulationAxis::Enum axis, PxReal targetP)
171 {
172 PX_ASSERT(!isAPIWriteForbidden());
173 mCore.setTargetV(axis, targetP);
174 UPDATE_PVD_PROPERTY
175 }
176
177 PX_INLINE void scSetArmature(PxArticulationAxis::Enum axis, PxReal armature)
178 {
179 PX_ASSERT(!isAPIWriteForbidden());
180 mCore.setArmature(axis, armature);
181 UPDATE_PVD_PROPERTY
182 }
183
185 {
186 PX_ASSERT(!isAPIWriteForbidden());
187 mCore.setMotion(axis, motion);
188 UPDATE_PVD_PROPERTY
189 }
190
191 PX_INLINE void scSetJointPosition(PxArticulationAxis::Enum axis, const PxReal jointPos)
192 {
193 PX_ASSERT(!isAPIWriteForbidden());
194 mCore.setJointPosition(axis, jointPos);
195 UPDATE_PVD_PROPERTY
196 }
197
198 PX_INLINE void scSetJointVelocity(PxArticulationAxis::Enum axis, const PxReal jointVel)
199 {
200 PX_ASSERT(!isAPIWriteForbidden());
201 mCore.setJointVelocity(axis, jointVel);
202 UPDATE_PVD_PROPERTY
203 }
204
205 virtual PxArticulationLink& getParentArticulationLink() const { return *mParent; }
206 virtual PxArticulationLink& getChildArticulationLink() const { return *mChild; }
207
208 virtual PxTransform getParentPose() const;
209 virtual void setParentPose(const PxTransform& t);
210
211 virtual PxTransform getChildPose() const;
212 virtual void setChildPose(const PxTransform& t);
213
214
215 PX_INLINE const NpArticulationLink& getParent() const { return *mParent; }
216 PX_INLINE NpArticulationLink& getParent() { return *mParent; }
217
218 PX_INLINE const NpArticulationLink& getChild() const { return *mChild; }
219 PX_INLINE NpArticulationLink& getChild() { return *mChild; }
220
221 Sc::ArticulationJointCore mCore;
222 NpArticulationLink* mParent;
223 NpArticulationLink* mChild;
224#if PX_CHECKED
225 private:
226 bool isValidMotion(PxArticulationAxis::Enum axis, PxArticulationMotion::Enum motion);
227#endif
228 };
229}
230
231#endif
Definition base.h:1940
Definition NpArticulationJointReducedCoordinate.h:49
virtual void setDriveVelocity(PxArticulationAxis::Enum axis, const PxReal targetVel, bool autowake=true)
Sets the joint drive velocity target for the given axis.
Definition NpArticulationJointReducedCoordinate.cpp:320
virtual void setMotion(PxArticulationAxis::Enum axis, PxArticulationMotion::Enum motion)
Sets the joint motion for a given axis.
Definition NpArticulationJointReducedCoordinate.cpp:160
virtual void setJointType(PxArticulationJointType::Enum jointType)
Sets the joint type (e.g. revolute).
Definition NpArticulationJointReducedCoordinate.cpp:77
virtual PxArticulationLink & getParentArticulationLink() const
Gets the parent articulation link of this joint.
Definition NpArticulationJointReducedCoordinate.h:205
void release()
Releases the PxBase instance, please check documentation of release in derived class.
Definition NpArticulationJointReducedCoordinate.cpp:484
virtual void setFrictionCoefficient(const PxReal coefficient)
Sets the joint friction coefficient, which applies to all joint axes.
Definition NpArticulationJointReducedCoordinate.cpp:188
virtual PxReal getArmature(PxArticulationAxis::Enum axis) const
Gets the joint armature for the given axis.
Definition NpArticulationJointReducedCoordinate.cpp:374
virtual PxReal getFrictionCoefficient() const
Gets the joint friction coefficient.
Definition NpArticulationJointReducedCoordinate.cpp:202
virtual PxArticulationJointType::Enum getJointType() const
Gets the joint type.
Definition NpArticulationJointReducedCoordinate.cpp:94
virtual PxReal getDriveVelocity(PxArticulationAxis::Enum axis) const
Returns the joint drive velocity target for the given axis.
Definition NpArticulationJointReducedCoordinate.cpp:350
virtual void setLimitParams(PxArticulationAxis::Enum axis, const PxArticulationLimit &pair)
Sets the joint limits for a given axis.
Definition NpArticulationJointReducedCoordinate.cpp:230
virtual void setDriveTarget(PxArticulationAxis::Enum axis, const PxReal target, bool autowake=true)
Sets the joint drive position target for the given axis.
Definition NpArticulationJointReducedCoordinate.cpp:295
virtual PxReal getJointPosition(PxArticulationAxis::Enum axis) const
Gets the joint position for the given axis, i.e. joint degree of freedom (DOF).
Definition NpArticulationJointReducedCoordinate.cpp:448
virtual void setDriveParams(PxArticulationAxis::Enum axis, const PxArticulationDrive &drive)
Configures a joint drive for the given axis.
Definition NpArticulationJointReducedCoordinate.cpp:259
virtual PxArticulationLink & getChildArticulationLink() const
Gets the child articulation link of this joint.
Definition NpArticulationJointReducedCoordinate.h:206
virtual void setJointVelocity(PxArticulationAxis::Enum axis, const PxReal jointVel)
Sets the joint velocity for the given axis.
Definition NpArticulationJointReducedCoordinate.cpp:457
virtual PxArticulationLimit getLimitParams(PxArticulationAxis::Enum axis) const
Returns the joint limits for a given axis.
Definition NpArticulationJointReducedCoordinate.cpp:253
virtual PxReal getDriveTarget(PxArticulationAxis::Enum axis) const
Returns the joint drive position target for the given axis.
Definition NpArticulationJointReducedCoordinate.cpp:343
virtual PxTransform getParentPose() const
Gets the joint pose in the parent link actor frame.
Definition NpArticulationJointReducedCoordinate.cpp:380
virtual PxReal getMaxJointVelocity() const
Gets the maximal joint velocity enforced for all axes.
Definition NpArticulationJointReducedCoordinate.cpp:223
virtual PxArticulationMotion::Enum getMotion(PxArticulationAxis::Enum axis) const
Returns the joint motion for the given axis.
Definition NpArticulationJointReducedCoordinate.cpp:183
virtual PxTransform getChildPose() const
Gets the joint pose in the child link actor frame.
Definition NpArticulationJointReducedCoordinate.cpp:405
virtual void setArmature(PxArticulationAxis::Enum axis, const PxReal armature)
Sets the joint armature for the given axis.
Definition NpArticulationJointReducedCoordinate.cpp:357
virtual void setMaxJointVelocity(const PxReal maxJointV)
Sets the maximal joint velocity enforced for all axes.
Definition NpArticulationJointReducedCoordinate.cpp:209
virtual PxReal getJointVelocity(PxArticulationAxis::Enum axis) const
Gets the joint velocity for the given axis.
Definition NpArticulationJointReducedCoordinate.cpp:475
virtual PxArticulationDrive getDriveParams(PxArticulationAxis::Enum axis) const
Gets the joint drive configuration for the given axis.
Definition NpArticulationJointReducedCoordinate.cpp:288
virtual void setChildPose(const PxTransform &t)
Sets the joint pose in the child link actor frame.
Definition NpArticulationJointReducedCoordinate.cpp:412
virtual void setJointPosition(PxArticulationAxis::Enum axis, const PxReal jointPos)
Sets the joint position for the given axis.
Definition NpArticulationJointReducedCoordinate.cpp:428
virtual void setParentPose(const PxTransform &t)
Sets the joint pose in the parent link actor frame.
Definition NpArticulationJointReducedCoordinate.cpp:386
Definition NpBase.h:167
A joint between two links in an articulation.
Definition PxArticulationJointReducedCoordinate.h:49
Binary deserialization context class.
Definition PxSerialFramework.h:174
Output stream class for I/O.
Definition PxIO.h:114
Callback class used to process PxBase objects.
Definition PxSerialFramework.h:81
Binary serialization context class.
Definition PxSerialFramework.h:99
class representing a rigid euclidean transform as a quaternion and a vector
Definition PxTransform.h:49
Definition ScArticulationJointCore.h:55
#define PX_FORCE_INLINE
Definition PxPreprocessor.h:335
#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
Enum
Definition PxSolverDefs.h:252
Data structure for articulation joint drive configuration.
Definition PxSolverDefs.h:359
Enum
Definition PxSolverDefs.h:281
Data structure to set articulation joint limits.
Definition PxSolverDefs.h:327
Enum
Definition PxSolverDefs.h:268