UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
PBDRigidSpringConstraints.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
4#include "Chaos/Array.h"
7
8namespace Chaos
9{
10 class FPBDRigidSpringConstraints;
11
43
44
45 class FPBDRigidSpringConstraints : public TPBDIndexedConstraintContainer<FPBDRigidSpringConstraints>
46 {
47 public:
48 // @todo(ccaulfield): an alternative AddConstraint which takes the constrain settings rather than assuming everything is in world-space rest pose
49
55
58 //
59 // Constraint Container API
60 //
61
66 {
67 return Constraints.Num();
68 }
69
78
82 void RemoveConstraint(int ConstraintIndex);
83
88 {
89 // @todo(chaos)
90 }
91
92
93 //
94 // Constraint API
95 //
97 {
98 return Handles;
99 }
101 {
102 return Handles;
103 }
104
106 {
107 return Handles[ConstraintIndex];
108 }
109
111 {
112 return Handles[ConstraintIndex];
113 }
114
119 {
120 return Constraints[ConstraintIndex];
121 }
122
126 const TVector<FVec3, 2>& GetConstraintPositions(int ConstraintIndex) const
127 {
128 return Distances[ConstraintIndex];
129 }
130
135 {
136 Distances[ConstraintIndex] = ConstraintPositions;
137 }
138
142 FReal GetRestLength(int32 ConstraintIndex) const
143 {
144 return SpringSettings[ConstraintIndex].RestLength;
145 }
146
150 void SetRestLength(int32 ConstraintIndex, const FReal SpringLength)
151 {
152 SpringSettings[ConstraintIndex].RestLength = SpringLength;
153 }
154
155
156 //
157 // FConstraintContainer Implementation
158 //
159 virtual int32 GetNumConstraints() const override final { return NumConstraints(); }
160 virtual void ResetConstraints() override final {}
161 virtual void AddConstraintsToGraph(Private::FPBDIslandManager& IslandManager) override final;
162 virtual void PrepareTick() override final {}
163 virtual void UnprepareTick() override final {}
164
165 //
166 // TSimpleConstraintContainerSolver API - used by RBAN solvers
167 //
168 void AddBodies(FSolverBodyContainer& SolverBodyContainer);
169 void GatherInput(const FReal Dt) {}
170 void ScatterOutput(const FReal Dt);
171 void ApplyPositionConstraints(const FReal Dt, const int32 It, const int32 NumIts);
172 void ApplyVelocityConstraints(const FReal Dt, const int32 It, const int32 NumIts) {}
173 void ApplyProjectionConstraints(const FReal Dt, const int32 It, const int32 NumIts) {}
174
175 //
176 // TIndexedConstraintContainerSolver API - used by World solvers
177 //
178 void AddBodies(const TArrayView<int32>& ConstraintIndices, FSolverBodyContainer& SolverBodyContainer);
179 void GatherInput(const TArrayView<int32>& ConstraintIndices, const FReal Dt) {}
180 void ScatterOutput(const TArrayView<int32>& ConstraintIndices, const FReal Dt);
181 void ApplyPositionConstraints(const TArrayView<int32>& ConstraintIndices, const FReal Dt, const int32 It, const int32 NumIts);
182 void ApplyVelocityConstraints(const TArrayView<int32>& ConstraintIndices, const FReal Dt, const int32 It, const int32 NumIts) {}
183 void ApplyProjectionConstraints(const TArrayView<int32>& ConstraintIndices, const FReal Dt, const int32 It, const int32 NumIts) {}
184
185 protected:
188
189 private:
190 void AddBodies(const int32 ConstraintIndex, FSolverBodyContainer& SolverBodyContainer);
191 void ApplyPhase1Single(const FReal Dt, int32 ConstraintIndex) const;
192
193 void InitDistance(int32 ConstraintIndex, const FVec3& Location0, const FVec3& Location1);
194
195 FVec3 GetDelta(int32 ConstraintIndex, const FVec3& WorldSpaceX1, const FVec3& WorldSpaceX2) const;
196
197 struct FSpringSettings
198 {
200 FReal Damping;
201 FReal RestLength;
202 };
203
205 TArray<TVector<FVec3, 2>> Distances;
206 TArray<FSpringSettings> SpringSettings;
207
208 TArray<FSolverBodyPtrPair> ConstraintSolverBodies;
209
211 FConstraintHandleAllocator HandleAllocator;
212 };
213}
#define TEXT(x)
Definition Platform.h:1272
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
A type id for constraint handles to support safe up/down casting (including intermediate classes in t...
Definition ConstraintHandle.h:49
static const FConstraintHandleTypeID & StaticType()
Definition IndexedConstraintContainer.h:50
int32 GetConstraintIndex(const FIndexedConstraintHandle *ConstraintHandle) const
Definition IndexedConstraintContainer.h:255
void SetConstraintIndex(FIndexedConstraintHandle *ConstraintHandle, int32 ConstraintIndex) const
Definition IndexedConstraintContainer.h:260
Definition PBDRigidSpringConstraints.h:13
CHAOS_API const TVector< FVec3, 2 > & GetConstraintPositions() const
Definition PBDRigidSpringConstraints.cpp:14
static const FConstraintHandleTypeID & StaticType()
Definition PBDRigidSpringConstraints.h:37
FPBDRigidSpringConstraintHandle(FConstraintContainer *InConstraintContainer, int32 InConstraintIndex)
Definition PBDRigidSpringConstraints.h:23
FPBDRigidSpringConstraintHandle()
Definition PBDRigidSpringConstraints.h:19
CHAOS_API void SetRestLength(const FReal SpringLength)
Definition PBDRigidSpringConstraints.cpp:35
CHAOS_API FReal GetRestLength() const
Definition PBDRigidSpringConstraints.cpp:30
virtual CHAOS_API FParticlePair GetConstrainedParticles() const override final
Definition PBDRigidSpringConstraints.cpp:25
CHAOS_API void SetConstraintPositions(const TVector< FVec3, 2 > &ConstraintPositions)
Definition PBDRigidSpringConstraints.cpp:20
Definition PBDRigidSpringConstraints.h:46
FConstraintContainerHandle * GetConstraintHandle(int32 ConstraintIndex)
Definition PBDRigidSpringConstraints.h:110
void AddBodies(FSolverBodyContainer &SolverBodyContainer)
Definition PBDRigidSpringConstraints.cpp:132
void ApplyPositionConstraints(const FReal Dt, const int32 It, const int32 NumIts)
Definition PBDRigidSpringConstraints.cpp:152
TVector< TGeometryParticleHandle< FReal, 3 > *, 2 > FConstrainedParticlePair
Definition PBDRigidSpringConstraints.h:53
void GatherInput(const TArrayView< int32 > &ConstraintIndices, const FReal Dt)
Definition PBDRigidSpringConstraints.h:179
void ScatterOutput(const FReal Dt)
Definition PBDRigidSpringConstraints.cpp:140
void DisableConstraints(const TSet< TGeometryParticleHandle< FReal, 3 > * > &RemovedParticles)
Definition PBDRigidSpringConstraints.h:87
void ApplyVelocityConstraints(const FReal Dt, const int32 It, const int32 NumIts)
Definition PBDRigidSpringConstraints.h:172
virtual void ResetConstraints() override final
Definition PBDRigidSpringConstraints.h:160
int32 NumConstraints() const
Definition PBDRigidSpringConstraints.h:65
TConstraintHandleAllocator< FPBDRigidSpringConstraints > FConstraintHandleAllocator
Definition PBDRigidSpringConstraints.h:52
const TVector< FVec3, 2 > & GetConstraintPositions(int ConstraintIndex) const
Definition PBDRigidSpringConstraints.h:126
void ApplyProjectionConstraints(const TArrayView< int32 > &ConstraintIndices, const FReal Dt, const int32 It, const int32 NumIts)
Definition PBDRigidSpringConstraints.h:183
FPBDRigidSpringConstraints()
Definition PBDRigidSpringConstraints.cpp:44
void ApplyProjectionConstraints(const FReal Dt, const int32 It, const int32 NumIts)
Definition PBDRigidSpringConstraints.h:173
FPBDRigidSpringConstraintHandle FConstraintContainerHandle
Definition PBDRigidSpringConstraints.h:51
FHandles & GetConstraintHandles()
Definition PBDRigidSpringConstraints.h:96
void RemoveConstraint(int ConstraintIndex)
Definition PBDRigidSpringConstraints.cpp:67
virtual void AddConstraintsToGraph(Private::FPBDIslandManager &IslandManager) override final
Definition PBDRigidSpringConstraints.cpp:127
void SetRestLength(int32 ConstraintIndex, const FReal SpringLength)
Definition PBDRigidSpringConstraints.h:150
virtual int32 GetNumConstraints() const override final
Definition PBDRigidSpringConstraints.h:159
void SetConstraintPositions(int ConstraintIndex, const TVector< FVec3, 2 > &ConstraintPositions)
Definition PBDRigidSpringConstraints.h:134
virtual void UnprepareTick() override final
Definition PBDRigidSpringConstraints.h:163
void ApplyVelocityConstraints(const TArrayView< int32 > &ConstraintIndices, const FReal Dt, const int32 It, const int32 NumIts)
Definition PBDRigidSpringConstraints.h:182
FReal GetRestLength(int32 ConstraintIndex) const
Definition PBDRigidSpringConstraints.h:142
virtual void PrepareTick() override final
Definition PBDRigidSpringConstraints.h:162
void GatherInput(const FReal Dt)
Definition PBDRigidSpringConstraints.h:169
const FHandles & GetConstConstraintHandles() const
Definition PBDRigidSpringConstraints.h:100
const FConstraintContainerHandle * GetConstraintHandle(int32 ConstraintIndex) const
Definition PBDRigidSpringConstraints.h:105
const FConstrainedParticlePair & GetConstrainedParticles(int32 ConstraintIndex) const
Definition PBDRigidSpringConstraints.h:118
virtual ~FPBDRigidSpringConstraints()
Definition PBDRigidSpringConstraints.cpp:48
FConstraintContainerHandle * AddConstraint(const FConstrainedParticlePair &InConstrainedParticles, const TVector< FVec3, 2 > &InLocations, FReal Stiffness, FReal Damping, FReal RestLength)
Definition PBDRigidSpringConstraints.cpp:52
Definition SolverBodyContainer.h:37
Definition IslandManager.h:453
Definition ParticleHandle.h:436
Definition IndexedConstraintContainer.h:68
Definition IndexedConstraintContainer.h:268
Definition Vector.h:41
Definition Constraints.Build.cs:6
Definition ArrayView.h:139
Definition SkeletalMeshComponent.h:307
FRealDouble FReal
Definition Real.h:22