UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
PBDJointConstraintData.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
10
11
12namespace Chaos
13{
14
16 {
17 JointTransforms = static_cast<uint64_t>(1) << 0,
18 CollisionEnabled = static_cast<uint64_t>(1) << 1,
19 Projection = static_cast<uint64_t>(1) << 2,
20 ParentInvMassScale = static_cast<uint64_t>(1) << 3,
21 LinearBreakForce = static_cast<uint64_t>(1) << 4,
22 AngularBreakTorque = static_cast<uint64_t>(1) << 5,
23 UserData = static_cast<uint64_t>(1) << 6,
24 LinearDrive = static_cast<uint64_t>(1) << 7,
25 AngularDrive = static_cast<uint64_t>(1) << 8,
26 Stiffness = static_cast<uint64_t>(1) << 9,
27 Limits = static_cast<uint64_t>(1) << 10,
28 LinearViolationCallbackThreshold = static_cast<uint64_t>(1) << 11,
29 AngularViolationCallbackThreshold = static_cast<uint64_t>(1) << 12,
30
32 };
33
34
36
38 {
39 public:
41
42 friend class FPBDRigidsSolver; // friend so we can call ReleaseKinematicEndPoint when unregistering joint.
43
45 virtual ~FJointConstraint() override {}
46
47 const FPBDJointSettings& GetJointSettings()const { return JointSettings.Read(); }
48
50
51 // If we created particle to serve as kinematic endpoint, track so we can release later. This will add particle to solver.
53
55
56 //See JointProperties for API
57 //Each CHAOS_INNER_JOINT_PROPERTY entry will have a Get* and Set*
58#define CHAOS_INNER_JOINT_PROPERTY(OuterProp, FuncName, Inner, InnerType) CONSTRAINT_JOINT_PROPERPETY_IMPL2(InnerType, FuncName, OuterProp, Inner)
60
61 CHAOS_API void SetLinearPositionDriveEnabled(TVector<bool, 3> Enabled);
62
63 CHAOS_API void SetLinearVelocityDriveEnabled(TVector<bool, 3> Enabled);
64
66 {
67 // Output properties
68 bool bIsBreaking = false;
69 bool bIsBroken = false;
70 bool bDriveTargetChanged = false;
73 bool bIsViolating = false;
74 float LinearViolation = 0.f;
75 float AngularViolation = 0.f;
76 };
78
80 {
81 JointProxies.SyncRemote(Manager, DataIdx, RemoteData);
82 JointBodies.SyncRemote(Manager, DataIdx, RemoteData);
83 JointSettings.SyncRemote(Manager, DataIdx, RemoteData);
84 }
85
88
89 const FProxyBasePair& GetParticleProxies() const { return JointProxies.Read().ParticleProxies; }
90 const FPhysicsObjectPair& GetPhysicsBodies() const { return JointBodies.Read().PhysicsBodies; }
91
92 protected:
93
95
99
100
102
103 private:
104 // TODO: When we build constraint with only one actor, we spawn this particle to serve as kinematic endpoint
105 // to attach to, as Chaos requires two particles currently. This tracks particle that will need to be released with joint.
106 FSingleParticlePhysicsProxy* KinematicEndPoint;
107 };
108
109} // Chaos
110
111
112
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define FVector
Definition IOSSystemIncludes.h:8
Definition PBDConstraintBaseData.h:36
Definition ParticleDirtyFlags.h:1129
Definition ParticleDirtyFlags.h:1039
Definition PBDJointConstraintData.h:38
CHAOS_API void ReleaseKinematicEndPoint(FPBDRigidsSolver *Solver)
Definition PBDJointConstraintData.cpp:51
TChaosProperty< FPhysicsObjectPairProperty, EChaosProperty::JointPhysicsObjects > JointBodies
Definition PBDJointConstraintData.h:97
FOutputData Output
Definition PBDJointConstraintData.h:101
CHAOS_API void SetKinematicEndPoint(FSingleParticlePhysicsProxy *InParticle, FPBDRigidsSolver *Solver)
Definition PBDJointConstraintData.cpp:24
virtual ~FJointConstraint() override
Definition PBDJointConstraintData.h:45
CHAOS_API void SetPhysicsBodies(const FPhysicsObjectPair &InBodies)
Definition PBDJointConstraintData.cpp:76
TChaosProperty< FPBDJointSettings, EChaosProperty::JointSettings > JointSettings
Definition PBDJointConstraintData.h:98
FOutputData & GetOutputData()
Definition PBDJointConstraintData.h:77
CHAOS_API FSingleParticlePhysicsProxy * GetKinematicEndPoint() const
Definition PBDJointConstraintData.cpp:31
const FPhysicsObjectPair & GetPhysicsBodies() const
Definition PBDJointConstraintData.h:90
TChaosProperty< FProxyBasePairProperty, EChaosProperty::JointParticleProxies > JointProxies
Definition PBDJointConstraintData.h:96
const FPBDJointSettings & GetJointSettings() const
Definition PBDJointConstraintData.h:47
CHAOS_API void SetLinearPositionDriveEnabled(TVector< bool, 3 > Enabled)
Definition PBDJointConstraintData.cpp:36
void SetJointSettings(const FPBDJointSettings &NewSettings)
Definition PBDJointConstraintData.cpp:16
CHAOS_API void SetLinearVelocityDriveEnabled(TVector< bool, 3 > Enabled)
Definition PBDJointConstraintData.cpp:44
CHAOS_API FJointConstraint()
Definition PBDJointConstraintData.cpp:10
virtual void SyncRemoteDataImp(FDirtyPropertiesManager &Manager, int32 DataIdx, FDirtyChaosProperties &RemoteData) override
Definition PBDJointConstraintData.h:79
const FProxyBasePair & GetParticleProxies() const
Definition PBDJointConstraintData.h:89
CHAOS_API void SetParticleProxies(const FProxyBasePair &InJointParticles)
Definition PBDJointConstraintData.cpp:60
Definition PBDJointConstraintTypes.h:114
Definition PBDRigidsSolver.h:84
Definition SingleParticlePhysicsProxy.h:58
Definition Properties.h:14
Definition ParticleDirtyFlags.h:918
Definition SkeletalMeshComponent.h:307
@ Enabled
Definition SimulationModuleBase.h:139
EJointConstraintFlags
Definition PBDJointConstraintData.h:16
Definition PBDJointConstraintData.h:66
bool bIsViolating
Definition PBDJointConstraintData.h:73
float AngularViolation
Definition PBDJointConstraintData.h:75
bool bIsBroken
Definition PBDJointConstraintData.h:69
bool bIsBreaking
Definition PBDJointConstraintData.h:68
FVector Torque
Definition PBDJointConstraintData.h:72
float LinearViolation
Definition PBDJointConstraintData.h:74
bool bDriveTargetChanged
Definition PBDJointConstraintData.h:70
FVector Force
Definition PBDJointConstraintData.h:71