RavEngine
Loading...
Searching...
No Matches
PvdMetaDataPvdBinding.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 PVD_META_DATA_PVD_BINDING_H
30#define PVD_META_DATA_PVD_BINDING_H
31
32#if PX_SUPPORT_PVD
33
34#include "PxPhysXConfig.h"
35#include "foundation/PxArray.h"
36
37namespace physx
38{
39 namespace pvdsdk
40 {
41 class PsPvd;
42 class PvdDataStream;
43 struct PvdMetaDataBindingData;
44 }
45}
46
47namespace physx
48{
49
50namespace Sc
51{
52struct Contact;
53}
54
55namespace Vd
56{
57
58using namespace physx::pvdsdk;
59
60class PvdVisualizer
61{
62 protected:
63 virtual ~PvdVisualizer()
64 {
65 }
66
67 public:
68 virtual void visualize(PxArticulationLink& link) = 0;
69};
70
71class PvdMetaDataBinding
72{
73 PvdMetaDataBindingData* mBindingData;
74
75 public:
76 PvdMetaDataBinding();
77 ~PvdMetaDataBinding();
78 void registerSDKProperties(PvdDataStream& inStream);
79
80 void sendAllProperties(PvdDataStream& inStream, const PxPhysics& inPhysics);
81
82 void sendAllProperties(PvdDataStream& inStream, const PxScene& inScene);
83 // per frame update
84 void sendBeginFrame(PvdDataStream& inStream, const PxScene* inScene, PxReal simulateElapsedTime);
85 void sendContacts(PvdDataStream& inStream, const PxScene& inScene, PxArray<Sc::Contact>& inContacts);
86 void sendContacts(PvdDataStream& inStream, const PxScene& inScene);
87 void sendStats(PvdDataStream& inStream, const PxScene* inScene);
88 void sendSceneQueries(PvdDataStream& inStream, const PxScene& inScene, PsPvd* pvd);
89 void sendEndFrame(PvdDataStream& inStream, const PxScene* inScene);
90
91 void createInstance(PvdDataStream& inStream, const PxMaterial& inMaterial, const PxPhysics& ownerPhysics);
92 void sendAllProperties(PvdDataStream& inStream, const PxMaterial& inMaterial);
93 void destroyInstance(PvdDataStream& inStream, const PxMaterial& inMaterial, const PxPhysics& ownerPhysics);
94
95 void createInstance(PvdDataStream& inStream, const PxFEMSoftBodyMaterial& inMaterial, const PxPhysics& ownerPhysics);
96 void sendAllProperties(PvdDataStream& inStream, const PxFEMSoftBodyMaterial& inMaterial);
97 void destroyInstance(PvdDataStream& inStream, const PxFEMSoftBodyMaterial& inMaterial, const PxPhysics& ownerPhysics);
98
99 // jcarius: Commented-out until FEMCloth is not under construction anymore
100 // void createInstance(PvdDataStream& inStream, const PxFEMClothMaterial& inMaterial, const PxPhysics& ownerPhysics);
101 // void sendAllProperties(PvdDataStream& inStream, const PxFEMClothMaterial& inMaterial);
102 // void destroyInstance(PvdDataStream& inStream, const PxFEMClothMaterial& inMaterial, const PxPhysics& ownerPhysics);
103
104 void createInstance(PvdDataStream& inStream, const PxPBDMaterial& inMaterial, const PxPhysics& ownerPhysics);
105 void sendAllProperties(PvdDataStream& inStream, const PxPBDMaterial& inMaterial);
106 void destroyInstance(PvdDataStream& inStream, const PxPBDMaterial& inMaterial, const PxPhysics& ownerPhysics);
107
108 void createInstance(PvdDataStream& inStream, const PxFLIPMaterial& inMaterial, const PxPhysics& ownerPhysics);
109 void sendAllProperties(PvdDataStream& inStream, const PxFLIPMaterial& inMaterial);
110 void destroyInstance(PvdDataStream& inStream, const PxFLIPMaterial& inMaterial, const PxPhysics& ownerPhysics);
111
112 void createInstance(PvdDataStream& inStream, const PxMPMMaterial& inMaterial, const PxPhysics& ownerPhysics);
113 void sendAllProperties(PvdDataStream& inStream, const PxMPMMaterial& inMaterial);
114 void destroyInstance(PvdDataStream& inStream, const PxMPMMaterial& inMaterial, const PxPhysics& ownerPhysics);
115
116
117 void createInstance(PvdDataStream& inStream, const PxHeightField& inData, const PxPhysics& ownerPhysics);
118 void sendAllProperties(PvdDataStream& inStream, const PxHeightField& inData);
119 void destroyInstance(PvdDataStream& inStream, const PxHeightField& inData, const PxPhysics& ownerPhysics);
120
121 void createInstance(PvdDataStream& inStream, const PxConvexMesh& inData, const PxPhysics& ownerPhysics);
122 void destroyInstance(PvdDataStream& inStream, const PxConvexMesh& inData, const PxPhysics& ownerPhysics);
123
124 void createInstance(PvdDataStream& inStream, const PxTetrahedronMesh& inData, const PxPhysics& ownerPhysics);
125 void destroyInstance(PvdDataStream& inStream, const PxTetrahedronMesh& inData, const PxPhysics& ownerPhysics);
126
127 void createInstance(PvdDataStream& inStream, const PxTriangleMesh& inData, const PxPhysics& ownerPhysics);
128 void destroyInstance(PvdDataStream& inStream, const PxTriangleMesh& inData, const PxPhysics& ownerPhysics);
129
130 void createInstance(PvdDataStream& inStream, const PxRigidStatic& inObj, const PxScene& ownerScene, const PxPhysics& ownerPhysics, PsPvd* pvd);
131 void sendAllProperties(PvdDataStream& inStream, const PxRigidStatic& inObj);
132 void destroyInstance(PvdDataStream& inStream, const PxRigidStatic& inObj, const PxScene& ownerScene);
133
134 void createInstance(PvdDataStream& inStream, const PxRigidDynamic& inObj, const PxScene& ownerScene, const PxPhysics& ownerPhysics, PsPvd* pvd);
135 void sendAllProperties(PvdDataStream& inStream, const PxRigidDynamic& inObj);
136 void destroyInstance(PvdDataStream& inStream, const PxRigidDynamic& inObj, const PxScene& ownerScene);
137
138 void createInstance(PvdDataStream& inStream, const PxSoftBody& inObj, const PxScene& ownerScene, const PxPhysics& ownerPhysics, PsPvd* pvd);
139 void sendAllProperties(PvdDataStream& inStream, const PxSoftBody& inObj);
140 void destroyInstance(PvdDataStream& inStream, const PxSoftBody& inObj, const PxScene& ownerScene);
141
142 void createInstance(PvdDataStream& inStream, const PxFEMCloth& inObj, const PxScene& ownerScene, const PxPhysics& ownerPhysics, PsPvd* pvd);
143 void sendAllProperties(PvdDataStream& inStream, const PxFEMCloth& inObj);
144 void destroyInstance(PvdDataStream& inStream, const PxFEMCloth& inObj, const PxScene& ownerScene);
145
146 void createInstance(PvdDataStream& inStream, const PxPBDParticleSystem& inObj, const PxScene& ownerScene, const PxPhysics& ownerPhysics, PsPvd* pvd);
147 void sendAllProperties(PvdDataStream& inStream, const PxPBDParticleSystem& inObj);
148 void destroyInstance(PvdDataStream& inStream, const PxPBDParticleSystem& inObj, const PxScene& ownerScene);
149
150 void createInstance(PvdDataStream& inStream, const PxFLIPParticleSystem& inObj, const PxScene& ownerScene, const PxPhysics& ownerPhysics, PsPvd* pvd);
151 void sendAllProperties(PvdDataStream& inStream, const PxFLIPParticleSystem& inObj);
152 void destroyInstance(PvdDataStream& inStream, const PxFLIPParticleSystem& inObj, const PxScene& ownerScene);
153
154 void createInstance(PvdDataStream& inStream, const PxMPMParticleSystem& inObj, const PxScene& ownerScene, const PxPhysics& ownerPhysics, PsPvd* pvd);
155 void sendAllProperties(PvdDataStream& inStream, const PxMPMParticleSystem& inObj);
156 void destroyInstance(PvdDataStream& inStream, const PxMPMParticleSystem& inObj, const PxScene& ownerScene);
157
158 void createInstance(PvdDataStream& inStream, const PxCustomParticleSystem& inObj, const PxScene& ownerScene, const PxPhysics& ownerPhysics, PsPvd* pvd);
159 void sendAllProperties(PvdDataStream& inStream, const PxCustomParticleSystem& inObj);
160 void destroyInstance(PvdDataStream& inStream, const PxCustomParticleSystem& inObj, const PxScene& ownerScene);
161
162 void createInstance(PvdDataStream& inStream, const PxHairSystem& inObj, const PxScene& ownerScene, const PxPhysics& ownerPhysics, PsPvd* pvd);
163 void sendAllProperties(PvdDataStream& inStream, const PxHairSystem& inObj);
164 void destroyInstance(PvdDataStream& inStream, const PxHairSystem& inObj, const PxScene& ownerScene);
165
166 void createInstance(PvdDataStream& inStream, const PxArticulationReducedCoordinate& inObj, const PxScene& ownerScene, const PxPhysics& ownerPhysics, PsPvd* pvd);
167 void sendAllProperties(PvdDataStream& inStream, const PxArticulationReducedCoordinate& inObj);
168 void destroyInstance(PvdDataStream& inStream, const PxArticulationReducedCoordinate& inObj, const PxScene& ownerScene);
169
170 void createInstance(PvdDataStream& inStream, const PxArticulationLink& inObj, const PxPhysics& ownerPhysics, PsPvd* pvd);
171 void sendAllProperties(PvdDataStream& inStream, const PxArticulationLink& inObj);
172 void destroyInstance(PvdDataStream& inStream, const PxArticulationLink& inObj);
173
174 void createInstance(PvdDataStream& inStream, const PxShape& inObj, const PxRigidActor& owner, const PxPhysics& ownerPhysics, PsPvd* pvd);
175 void sendAllProperties(PvdDataStream& inStream, const PxShape& inObj);
176 void releaseAndRecreateGeometry(PvdDataStream& inStream, const PxShape& inObj, PxPhysics& ownerPhysics, PsPvd* pvd);
177 void updateMaterials(PvdDataStream& inStream, const PxShape& inObj, PsPvd* pvd);
178 void destroyInstance(PvdDataStream& inStream, const PxShape& inObj, const PxRigidActor& owner);
179
180 // These are created as part of the articulation link's creation process, so outside entities don't need to
181 // create them.
182 void sendAllProperties(PvdDataStream& inStream, const PxArticulationJointReducedCoordinate& inObj);
183
184 // per frame update
185 void updateDynamicActorsAndArticulations(PvdDataStream& inStream, const PxScene* inScene, PvdVisualizer* linkJointViz);
186
187 // Origin Shift
188 void originShift(PvdDataStream& inStream, const PxScene* inScene, PxVec3 shift);
189
190 void createInstance(PvdDataStream& inStream, const PxAggregate& inObj, const PxScene& ownerScene);
191 void sendAllProperties(PvdDataStream& inStream, const PxAggregate& inObj);
192 void destroyInstance(PvdDataStream& inStream, const PxAggregate& inObj, const PxScene& ownerScene);
193 void detachAggregateActor(PvdDataStream& inStream, const PxAggregate& inObj, const PxActor& inActor);
194 void attachAggregateActor(PvdDataStream& inStream, const PxAggregate& inObj, const PxActor& inActor);
195
196 template <typename TDataType>
197 void registrarPhysicsObject(PvdDataStream&, const TDataType&, PsPvd*);
198};
199}
200}
201
202#endif
203#endif
PxActor is the base class for the main simulation objects in the physics SDK.
Definition PxActor.h:201
Class to aggregate actors into a single broad-phase entry.
Definition PxAggregate.h:98
Definition PxArray.h:53
A joint between two links in an articulation.
Definition PxArticulationJointReducedCoordinate.h:49
A tree structure of bodies connected by joints that is treated as a unit by the dynamics solver....
Definition PxArticulationReducedCoordinate.h:448
A convex mesh.
Definition PxConvexMesh.h:83
Material class to represent a set of softbody FEM material properties.
Definition PxFEMSoftBodyMaterial.h:49
Material class to represent a set of FLIP particle material properties.
Definition PxFLIPMaterial.h:49
A height field class.
Definition PxHeightField.h:84
Material class to represent a set of MPM particle material properties.
Definition PxMPMMaterial.h:94
Material class to represent a set of surface properties.
Definition PxMaterial.h:149
Material class to represent a set of PBD particle material properties.
Definition PxPBDMaterial.h:49
A particle system that uses the position based dynamics(PBD) solver.
Definition PxPBDParticleSystem.h:57
Abstract singleton factory class used for instancing objects in the Physics SDK.
Definition PxPhysics.h:91
PxRigidActor represents a base class shared between dynamic and static rigid bodies in the physics SD...
Definition PxRigidActor.h:53
PxRigidDynamic represents a dynamic rigid simulation object in the physics SDK.
Definition PxRigidDynamic.h:82
PxRigidStatic represents a static rigid body simulation object in the physics SDK.
Definition PxRigidStatic.h:58
A scene is a collection of bodies and constraints which can interact.
Definition PxScene.h:178
Abstract class for collision shapes.
Definition PxShape.h:146
Represents a FEM softbody including everything to calculate its definition like geometry and material...
Definition PxSoftBody.h:104
A tetramedron mesh, also called a 'tetrahedron soup'.
Definition PxTetrahedronMesh.h:115
A triangle mesh, also called a 'polygon soup'.
Definition PxTriangleMesh.h:118
3 Element vector class.
Definition PxVec3.h:50
Definition PsPvd.h:56
Definition PxPvdDataStream.h:241
Sorts an array of objects in ascending order, assuming that the predicate implements the < operator:
Definition PxBoxController.h:39