RavEngine
Loading...
Searching...
No Matches
NpConstraint.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_CONSTRAINT_H
30#define NP_CONSTRAINT_H
31
32#include "foundation/PxUserAllocated.h"
33#include "PxConstraint.h"
34#include "NpBase.h"
35#include "../../../simulationcontroller/include/ScConstraintCore.h"
36#include "NpActor.h"
37
38namespace physx
39{
40class NpScene;
41
42class NpConstraint : public PxConstraint, public NpBase
43{
44//= ATTENTION! =====================================================================================
45// Changing the data layout of this class breaks the binary serialization format. See comments for
46// PX_BINARY_SERIAL_VERSION. If a modification is required, please adjust the getBinaryMetaData
47// function. If the modification is made on a custom branch, please change PX_BINARY_SERIAL_VERSION
48// accordingly.
49//==================================================================================================
50public:
51// PX_SERIALIZATION
52 NpConstraint(PxBaseFlags baseFlags) : PxConstraint(baseFlags), NpBase(PxEmpty), mCore(PxEmpty) {}
53 static NpConstraint* createObject(PxU8*& address, PxDeserializationContext& context);
54 static void getBinaryMetaData(PxOutputStream& stream);
55 void preExportDataReset() {}
56 void exportExtraData(PxSerializationContext&) {}
57 void importExtraData(PxDeserializationContext&) {}
58 void resolveReferences(PxDeserializationContext& context);
59 virtual void requiresObjects(PxProcessPxBaseCallback&) {}
60 virtual bool isSubordinate() const { return true; }
61//~PX_SERIALIZATION
62 NpConstraint(PxRigidActor* actor0, PxRigidActor* actor1, PxConstraintConnector& connector, const PxConstraintShaderTable& shaders, PxU32 dataSize);
63 virtual ~NpConstraint();
64 // PxConstraint
65 virtual void release() PX_OVERRIDE;
66 virtual PxScene* getScene() const PX_OVERRIDE;
67 virtual void getActors(PxRigidActor*& actor0, PxRigidActor*& actor1) const PX_OVERRIDE;
68 virtual void setActors(PxRigidActor* actor0, PxRigidActor* actor1) PX_OVERRIDE;
69 virtual void markDirty() PX_OVERRIDE;
71 virtual void setFlags(PxConstraintFlags flags) PX_OVERRIDE;
72 virtual void setFlag(PxConstraintFlag::Enum flag, bool value) PX_OVERRIDE;
73 virtual void getForce(PxVec3& linear, PxVec3& angular) const PX_OVERRIDE;
74 virtual bool isValid() const PX_OVERRIDE;
75 virtual void setBreakForce(PxReal linear, PxReal angular) PX_OVERRIDE;
76 virtual void getBreakForce(PxReal& linear, PxReal& angular) const PX_OVERRIDE;
77 virtual void setMinResponseThreshold(PxReal threshold) PX_OVERRIDE;
78 virtual PxReal getMinResponseThreshold() const PX_OVERRIDE;
79 virtual void* getExternalReference(PxU32& typeID) PX_OVERRIDE;
81 //~PxConstraint
82
83 void updateConstants(PxsSimulationController& simController);
84 void comShift(PxRigidActor*);
85 void actorDeleted(PxRigidActor*);
86
87 NpScene* getSceneFromActors() const;
88
89 PX_FORCE_INLINE Sc::ConstraintCore& getCore() { return mCore; }
90 PX_FORCE_INLINE const Sc::ConstraintCore& getCore() const { return mCore; }
91 static PX_FORCE_INLINE size_t getCoreOffset() { return PX_OFFSET_OF_RT(NpConstraint, mCore); }
92
93 PX_FORCE_INLINE bool isDirty() const { return mCore.isDirty(); }
94 PX_FORCE_INLINE void markClean() { mCore.clearDirty(); }
95private:
96 PxRigidActor* mActor0;
97 PxRigidActor* mActor1;
99
100 void addConnectors(PxRigidActor* actor0, PxRigidActor* actor1);
101 void removeConnectors(const char* errorMsg0, const char* errorMsg1);
102
103 PX_INLINE void scSetFlags(PxConstraintFlags f)
104 {
105 PX_ASSERT(!isAPIWriteForbidden());
106 mCore.setFlags(f);
107 markDirty();
108 UPDATE_PVD_PROPERTY
109 }
110};
111
112}
113
114#endif
Definition base.h:1940
Definition NpBase.h:167
Definition NpConstraint.h:43
virtual PxConstraintFlags getFlags() const PX_OVERRIDE
Retrieve the flags for this constraint.
Definition NpConstraint.cpp:279
virtual void * getExternalReference(PxU32 &typeID) PX_OVERRIDE
Fetch external owner of the constraint.
Definition NpConstraint.cpp:408
virtual void setMinResponseThreshold(PxReal threshold) PX_OVERRIDE
Set the minimum response threshold for a constraint row.
Definition NpConstraint.cpp:382
virtual void setBreakForce(PxReal linear, PxReal angular) PX_OVERRIDE
Set the break force and torque thresholds for this constraint.
Definition NpConstraint.cpp:364
virtual void markDirty() PX_OVERRIDE
Notify the scene that the constraint shader data has been updated by the application.
Definition NpConstraint.cpp:320
virtual bool isValid() const PX_OVERRIDE
whether the constraint is valid.
Definition NpConstraint.cpp:400
virtual void setFlags(PxConstraintFlags flags) PX_OVERRIDE
Set the flags for this constraint.
Definition NpConstraint.cpp:286
virtual void setConstraintFunctions(PxConstraintConnector &n, const PxConstraintShaderTable &t) PX_OVERRIDE
Set the constraint functions for this constraint.
Definition NpConstraint.cpp:94
virtual void setActors(PxRigidActor *actor0, PxRigidActor *actor1) PX_OVERRIDE
Sets the actors for this constraint.
Definition NpConstraint.cpp:239
virtual PxScene * getScene() const PX_OVERRIDE
Retrieves the scene which this constraint belongs to.
Definition NpConstraint.cpp:220
virtual void getBreakForce(PxReal &linear, PxReal &angular) const PX_OVERRIDE
Retrieve the constraint break force and torque thresholds.
Definition NpConstraint.cpp:376
virtual void release() PX_OVERRIDE
Releases a PxConstraint instance.
Definition NpConstraint.cpp:186
virtual void getForce(PxVec3 &linear, PxVec3 &angular) const PX_OVERRIDE
Retrieve the constraint force most recently applied to maintain this constraint.
Definition NpConstraint.cpp:311
virtual PxReal getMinResponseThreshold() const PX_OVERRIDE
Retrieve the constraint break force and torque thresholds.
Definition NpConstraint.cpp:394
virtual void setFlag(PxConstraintFlag::Enum flag, bool value) PX_OVERRIDE
Set a flag for this constraint.
Definition NpConstraint.cpp:298
virtual void getActors(PxRigidActor *&actor0, PxRigidActor *&actor1) const PX_OVERRIDE
Retrieves the actors for this constraint.
Definition NpConstraint.cpp:225
Definition NpScene.h:130
This class connects a custom constraint to the SDK.
Definition PxConstraintDesc.h:354
A plugin class for implementing constraints.
Definition PxConstraint.h:100
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
PxRigidActor represents a base class shared between dynamic and static rigid bodies in the physics SD...
Definition PxRigidActor.h:53
A scene is a collection of bodies and constraints which can interact.
Definition PxScene.h:178
Binary serialization context class.
Definition PxSerialFramework.h:99
3 Element vector class.
Definition PxVec3.h:50
Definition PxsSimulationController.h:124
Definition ScConstraintCore.h:43
#define PX_FORCE_INLINE
Definition PxPreprocessor.h:335
#define PX_OVERRIDE
Definition PxPreprocessor.h:375
#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 PxConstraint.h:57
a table of function pointers for a constraint
Definition PxConstraint.h:87