UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SolverConstraintContainer.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
6
7namespace Chaos
8{
9 class FConstraintHandleHolder;
10 class FSolverBodyContainer;
11
12
29 {
30 public:
31
35
37
45 {
46 Priority = InPriority;
47 }
48
53 {
54 return Priority;
55 }
56
62 virtual void Reset(const int32 MaxConstraints) = 0;
63
64 virtual int32 GetNumConstraints() const = 0;
65
70 virtual void AddConstraints() = 0;
71
80
84 virtual void AddBodies(FSolverBodyContainer& SolverBodyContainer) = 0;
85
86 virtual void GatherInput(const FReal Dt) = 0;
87 virtual void GatherInput(const FReal Dt, const int32 BeginIndex, const int32 EndIndex) = 0;
88 virtual void ScatterOutput(const FReal Dt) = 0;
89 virtual void ScatterOutput(const FReal Dt, const int32 BeginIndex, const int32 EndIndex) = 0;
90
91 virtual void PreApplyPositionConstraints(const FReal Dt) {}
92 virtual void PreApplyVelocityConstraints(const FReal Dt) {}
93 virtual void PreApplyProjectionConstraints(const FReal Dt) {}
94
98 virtual void ApplyPositionConstraints(const FReal Dt, const int32 It, const int32 NumIts) = 0;
99
103 virtual void ApplyVelocityConstraints(const FReal Dt, const int32 It, const int32 NumIts) = 0;
104
108 virtual void ApplyProjectionConstraints(const FReal Dt, const int32 It, const int32 NumIts) = 0;
109
110 private:
111 int32 Priority;
112 };
113
120 template<typename ConstraintContainerType>
122 {
123 public:
125 using FConstraintHandleType = typename FConstraintContainerType::FConstraintContainerHandle;
126
132
133 virtual void Reset(const int32 MaxConstraints) override final
134 {
135 }
136
137 virtual int32 GetNumConstraints() const override final
138 {
139 return ConstraintContainer.GetNumConstraints();
140 }
141
142 virtual void AddConstraints() override final
143 {
144 // We solve all constraints in the container in the order it prefers so nothing to do here
145 }
146
148 {
149 // This solver container is for use with the a non-graph evolution. It will not call this function.
150 ensure(false);
151 }
152
153 virtual void AddBodies(FSolverBodyContainer& SolverBodyContainer) override final
154 {
155 ConstraintContainer.AddBodies(SolverBodyContainer);
156 }
157
158 virtual void GatherInput(const FReal Dt) override final
159 {
160 ConstraintContainer.GatherInput(Dt);
161 }
162
163 virtual void GatherInput(const FReal Dt, const int32 BeginIndex, const int32 EndIndex) override final
164 {
165 // This solver container is for use with the a non-graph evolution. It will not call this function.
166 ensure(false);
167 }
168
169 virtual void ScatterOutput(const FReal Dt) override final
170 {
171 ConstraintContainer.ScatterOutput(Dt);
172 }
173
174 virtual void ScatterOutput(const FReal Dt, const int32 BeginIndex, const int32 EndIndex) override final
175 {
176 // This solver container is for use with the a non-graph evolution. It will not call this function.
177 ensure(false);
178 }
179
180 virtual void ApplyPositionConstraints(const FReal Dt, const int32 It, const int32 NumIts) override final
181 {
182 ConstraintContainer.ApplyPositionConstraints(Dt, It, NumIts);
183 }
184
185 virtual void ApplyVelocityConstraints(const FReal Dt, const int32 It, const int32 NumIts) override final
186 {
187 ConstraintContainer.ApplyVelocityConstraints(Dt, It, NumIts);
188 }
189
190 virtual void ApplyProjectionConstraints(const FReal Dt, const int32 It, const int32 NumIts) override final
191 {
192 ConstraintContainer.ApplyProjectionConstraints(Dt, It, NumIts);
193 }
194
195 protected:
197 };
198}
#define ensure( InExpression)
Definition AssertionMacros.h:464
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
Definition SolverConstraintContainer.h:29
virtual ~FConstraintContainerSolver()
Definition SolverConstraintContainer.h:36
virtual void PreApplyVelocityConstraints(const FReal Dt)
Definition SolverConstraintContainer.h:92
virtual void Reset(const int32 MaxConstraints)=0
virtual void PreApplyPositionConstraints(const FReal Dt)
Definition SolverConstraintContainer.h:91
virtual void ApplyVelocityConstraints(const FReal Dt, const int32 It, const int32 NumIts)=0
virtual void GatherInput(const FReal Dt)=0
virtual void PreApplyProjectionConstraints(const FReal Dt)
Definition SolverConstraintContainer.h:93
int32 GetPriority() const
Definition SolverConstraintContainer.h:52
virtual int32 GetNumConstraints() const =0
virtual void ApplyProjectionConstraints(const FReal Dt, const int32 It, const int32 NumIts)=0
virtual void AddConstraints(const TArrayView< Private::FPBDIslandConstraint * > &Constraints)=0
void SetPriority(const int32 InPriority)
Definition SolverConstraintContainer.h:44
virtual void GatherInput(const FReal Dt, const int32 BeginIndex, const int32 EndIndex)=0
virtual void ScatterOutput(const FReal Dt, const int32 BeginIndex, const int32 EndIndex)=0
FConstraintContainerSolver(const int32 InPriority)
Definition SolverConstraintContainer.h:32
virtual void ScatterOutput(const FReal Dt)=0
virtual void AddBodies(FSolverBodyContainer &SolverBodyContainer)=0
virtual void ApplyPositionConstraints(const FReal Dt, const int32 It, const int32 NumIts)=0
Definition SolverBodyContainer.h:37
Definition SolverConstraintContainer.h:122
virtual void GatherInput(const FReal Dt, const int32 BeginIndex, const int32 EndIndex) override final
Definition SolverConstraintContainer.h:163
virtual void ApplyVelocityConstraints(const FReal Dt, const int32 It, const int32 NumIts) override final
Definition SolverConstraintContainer.h:185
virtual void GatherInput(const FReal Dt) override final
Definition SolverConstraintContainer.h:158
virtual void ApplyPositionConstraints(const FReal Dt, const int32 It, const int32 NumIts) override final
Definition SolverConstraintContainer.h:180
typename FConstraintContainerType::FConstraintContainerHandle FConstraintHandleType
Definition SolverConstraintContainer.h:125
virtual void AddConstraints() override final
Definition SolverConstraintContainer.h:142
virtual int32 GetNumConstraints() const override final
Definition SolverConstraintContainer.h:137
virtual void AddBodies(FSolverBodyContainer &SolverBodyContainer) override final
Definition SolverConstraintContainer.h:153
virtual void AddConstraints(const TArrayView< Private::FPBDIslandConstraint * > &Constraints) override final
Definition SolverConstraintContainer.h:147
virtual void Reset(const int32 MaxConstraints) override final
Definition SolverConstraintContainer.h:133
virtual void ApplyProjectionConstraints(const FReal Dt, const int32 It, const int32 NumIts) override final
Definition SolverConstraintContainer.h:190
ConstraintContainerType FConstraintContainerType
Definition SolverConstraintContainer.h:124
virtual void ScatterOutput(const FReal Dt, const int32 BeginIndex, const int32 EndIndex) override final
Definition SolverConstraintContainer.h:174
virtual void ScatterOutput(const FReal Dt) override final
Definition SolverConstraintContainer.h:169
FConstraintContainerType & ConstraintContainer
Definition SolverConstraintContainer.h:196
TSimpleConstraintContainerSolver(FConstraintContainerType &InConstraintContainer, const int32 InPriority)
Definition SolverConstraintContainer.h:127
Definition Constraints.Build.cs:6
Definition ArrayView.h:139
Definition SkeletalMeshComponent.h:307
FRealDouble FReal
Definition Real.h:22