RavEngine
Loading...
Searching...
No Matches
NpFEMSoftBodyMaterial.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_FEM_MATERIAL_H
30#define NP_FEM_MATERIAL_H
31
32#include "common/PxSerialFramework.h"
33#include "foundation/PxUserAllocated.h"
34#include "foundation/PxUtilities.h"
35#include "CmRefCountable.h"
36#include "PxsFEMSoftBodyMaterialCore.h"
37
38namespace physx
39{
40 // Compared to other objects, materials are special since they belong to the SDK and not to scenes
41 // (similar to meshes). That's why the NpFEMMaterial does have direct access to the core material instead
42 // of having a buffered interface for it. Scenes will have copies of the SDK material table and there
43 // the materials will be buffered.
44
46 {
47 //= ATTENTION! =====================================================================================
48 // Changing the data layout of this class breaks the binary serialization format. See comments for
49 // PX_BINARY_SERIAL_VERSION. If a modification is required, please adjust the getBinaryMetaData
50 // function. If the modification is made on a custom branch, please change PX_BINARY_SERIAL_VERSION
51 // accordingly.
52 //==================================================================================================
53 public:
54 // PX_SERIALIZATION
55 NpFEMSoftBodyMaterial(PxBaseFlags baseFlags) : PxFEMSoftBodyMaterial(baseFlags), mMaterial(PxEmpty) {}
56 virtual void resolveReferences(PxDeserializationContext& context);
57 static NpFEMSoftBodyMaterial* createObject(PxU8*& address, PxDeserializationContext& context);
58 static void getBinaryMetaData(PxOutputStream& stream);
59
60 void preExportDataReset() { Cm::RefCountable_preExportDataReset(*this); }
61 void exportExtraData(PxSerializationContext&) {}
62 void importExtraData(PxDeserializationContext&) {}
63 virtual void requiresObjects(PxProcessPxBaseCallback&) {}
64 //~PX_SERIALIZATION
66 virtual ~NpFEMSoftBodyMaterial();
67
68 // PxBase
69 virtual void onRefCountZero();
70 //~PxBase
71
72 virtual void release();
73
74 // PxRefCounted
75 virtual void acquireReference();
76 virtual PxU32 getReferenceCount() const;
77 //~PxRefCounted
78
79 // PxFEMMaterial
80 virtual void setYoungsModulus(PxReal young) PX_OVERRIDE;
81 virtual PxReal getYoungsModulus() const PX_OVERRIDE;
82 virtual void setPoissons(PxReal poisson) PX_OVERRIDE;
83 virtual PxReal getPoissons() const PX_OVERRIDE;
84 virtual void setDynamicFriction(PxReal threshold) PX_OVERRIDE;
85 virtual PxReal getDynamicFriction() const PX_OVERRIDE;
86 //~PxFEMMaterial
87
88 // PxFEMSoftBodyMaterial
89 virtual void setDamping(PxReal damping) PX_OVERRIDE;
90 virtual PxReal getDamping() const PX_OVERRIDE;
91 virtual void setDampingScale(PxReal scale);
92 virtual PxReal getDampingScale() const;
93 virtual void setDeformThreshold(PxReal threshold);
94 virtual PxReal getDeformThreshold() const;
95 virtual void setDeformLowLimitRatio(PxReal threshold);
96 virtual PxReal getDeformLowLimitRatio() const;
97 virtual void setDeformHighLimitRatio(PxReal threshold);
98 virtual PxReal getDeformHighLimitRatio() const;
99 //~PxFEMSoftBodyMaterial
100
101 PX_FORCE_INLINE static void getMaterialIndices(PxFEMSoftBodyMaterial*const* materials, PxU16* materialIndices, PxU32 materialCount);
102
103 private:
104 PX_INLINE void updateMaterial();
105
106 // PX_SERIALIZATION
107 public:
108 //~PX_SERIALIZATION
110 };
111
112 PX_FORCE_INLINE void NpFEMSoftBodyMaterial::getMaterialIndices(PxFEMSoftBodyMaterial*const* materials, PxU16* materialIndices, PxU32 materialCount)
113 {
114 for (PxU32 i = 0; i < materialCount; i++)
115 materialIndices[i] = static_cast<NpFEMSoftBodyMaterial*>(materials[i])->mMaterial.mMaterialIndex;
116 }
117}
118
119#endif
Definition base.h:1940
Definition NpFEMSoftBodyMaterial.h:46
virtual void setDampingScale(PxReal scale)
Sets material damping scale. A scale of 1 corresponds to default damping, a value of 0 will only appl...
virtual void setPoissons(PxReal poisson) PX_OVERRIDE
Sets the Poisson's ratio which defines the body's volume preservation. Completely incompressible mate...
virtual PxReal getDampingScale() const
Retrieves material damping scale.
virtual void acquireReference()
Acquires a counted reference to this object.
virtual void setYoungsModulus(PxReal young) PX_OVERRIDE
Sets young's modulus which defines the body's stiffness.
virtual void setDamping(PxReal damping) PX_OVERRIDE
Sets material velocity damping term.
virtual PxReal getDamping() const PX_OVERRIDE
Retrieves velocity damping.
virtual PxU32 getReferenceCount() const
Returns the reference count of the object.
virtual void setDynamicFriction(PxReal threshold) PX_OVERRIDE
Sets the dynamic friction value which defines the strength of resistance when two objects slide relat...
virtual PxReal getDynamicFriction() const PX_OVERRIDE
Retrieves the dynamic friction value.
virtual void release()
Decrements the reference count of the object and releases it if the new reference count is zero.
virtual PxReal getYoungsModulus() const PX_OVERRIDE
Retrieves the young's modulus value.
virtual PxReal getPoissons() const PX_OVERRIDE
Retrieves the Poisson's ratio.
Binary deserialization context class.
Definition PxSerialFramework.h:174
Material class to represent a set of softbody FEM material properties.
Definition PxFEMSoftBodyMaterial.h:49
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
Definition PxUserAllocated.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