UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
PerParticlePBDSpringConstraints.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
5
6namespace Chaos::Softs
7{
8
9class UE_DEPRECATED(5.0, "Per particle constraint rules are no longer used by the cloth solver. Use FPBDSpringConstraints instead.") FPerParticlePBDSpringConstraints : public FPBDSpringConstraintsBase
10{
11 typedef FPBDSpringConstraintsBase Base;
12 using Base::Constraints;
13 using Base::Stiffness;
14
15public:
16 FPerParticlePBDSpringConstraints(const FSolverParticles& InParticles, const TArray<TVec2<int32>>& InConstraints, const FSolverReal InStiffness = (FSolverReal)1.)
18 {
19 for (int32 i = 0; i < Constraints.Num(); ++i)
20 {
21 const auto& Constraint = Constraints[i];
22 int32 i1 = Constraint[0];
23 int32 i2 = Constraint[1];
24 if (i1 >= ParticleToConstraints.Num())
25 {
26 ParticleToConstraints.SetNum(i1 + 1);
27 }
28 if (i2 >= ParticleToConstraints.Num())
29 {
30 ParticleToConstraints.SetNum(i2 + 1);
31 }
34 }
35 }
36 virtual ~FPerParticlePBDSpringConstraints() override {}
37
38 // TODO(mlentine): We likely need to use time n positions here
39 void Apply(FSolverParticles& InParticles, const FSolverReal Dt, const int32 Index) const
40 {
41 for (int32 i = 0; i < ParticleToConstraints[Index].Num(); ++i)
42 {
44 const auto& Constraint = Constraints[CIndex];
45 int32 i1 = Constraint[0];
46 int32 i2 = Constraint[1];
47 if (Index == i1 && InParticles.InvM(i1) > 0)
48 {
49 InParticles.P(i1) -= InParticles.InvM(i1) * Base::GetDelta(InParticles, CIndex, (FSolverReal)Stiffness);
50 }
51 else if (InParticles.InvM(i2) > 0)
52 {
53 check(Index == i2);
54 InParticles.P(i2) += InParticles.InvM(i2) * Base::GetDelta(InParticles, CIndex, (FSolverReal)Stiffness);
55 }
56 }
57 }
58
59private:
61};
62
63} // End namespace Chaos::Softs
#define check(expr)
Definition AssertionMacros.h:314
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
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 Constraints.Build.cs:6
Definition Array.h:670
Definition CollectionEmbeddedSpringConstraintFacade.cpp:6
TVector< FSolverReal, 2 > FSolverVec2
Definition PBDSoftsEvolutionFwd.h:32
@ Apply
Definition NavigationModifier.h:49
Chaos::FRealSingle FRealSingle
Definition ImmediatePhysicsCore_Chaos.h:34
U16 Index
Definition radfft.cpp:71