10 class FPBDPositionConstraints;
54 if (ConstrainedParticles.Num() > 0)
56 Handles.
Reserve(ConstrainedParticles.Num());
57 for (
int32 ConstraintIndex = 0; ConstraintIndex < ConstrainedParticles.Num(); ++ConstraintIndex)
61 ConstraintSolverBodies.SetNumZeroed(ConstrainedParticles.Num());
77 return ConstrainedParticles.Num();
85 int32 NewIndex = Targets.Num();
87 ConstrainedParticles.Add(Particle);
88 ConstraintSolverBodies.Add(
nullptr);
90 return Handles[NewIndex];
99 if (ConstraintHandle !=
nullptr)
103 Handles[ConstraintIndex] =
nullptr;
107 Targets.RemoveAtSwap(ConstraintIndex);
108 ConstrainedParticles.RemoveAtSwap(ConstraintIndex);
109 ConstraintSolverBodies.RemoveAtSwap(ConstraintIndex);
113 if (ConstraintIndex < Handles.
Num())
143 return Handles[ConstraintIndex];
148 return Handles[ConstraintIndex];
156 return { ConstrainedParticles[ConstraintIndex],
nullptr };
164 return Targets[ConstraintIndex];
170 Targets[ConstraintIndex] =
Position;
211 void ApplySingle(
const FReal Dt,
int32 ConstraintIndex)
const
213 FSolverBody* Body = ConstraintSolverBodies[ConstraintIndex];
216 const FVec3& P1 = Body->CorrectedP();
217 const FVec3& P2 = Targets[ConstraintIndex];
219 Body->ApplyPositionDelta(-Stiffness *
Difference);
233 template <
typename T,
int d>
234 using TPBDPositionConstraintHandle
UE_DEPRECATED(4.27,
"Deprecated. this class is to be deleted, use FPBDPositionConstraintHandle instead") = FPBDPositionConstraintHandle;
236 template <
typename T,
int d>
237 using TPBDPositionConstraints
UE_DEPRECATED(4.27,
"Deprecated. this class is to be deleted, use FPBDPositionConstraints instead") = FPBDPositionConstraints;
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
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 PBDPositionConstraints.h:13
FPBDPositionConstraintHandle(FConstraintContainer *InConstraintContainer, int32 InConstraintIndex)
Definition PBDPositionConstraints.h:20
FGeometryParticleHandle FGeometryParticleHandle
Definition PBDPositionConstraints.h:17
static const FConstraintHandleTypeID & StaticType()
Definition PBDPositionConstraints.h:25
FPBDPositionConstraintHandle()
Definition PBDPositionConstraints.h:19
virtual FParticlePair GetConstrainedParticles() const override
Definition PBDPositionConstraints.cpp:8
Constraint a single particle to a world-space position.
Definition PBDPositionConstraints.h:38
virtual ~FPBDPositionConstraints()
Definition PBDPositionConstraints.h:65
const FConstraintContainerHandle * GetConstraintHandle(int32 ConstraintIndex) const
Definition PBDPositionConstraints.h:141
void ScatterOutput(const FReal Dt)
Definition PBDPositionConstraints.cpp:26
void ApplyVelocityConstraints(const TArrayView< int32 > &ConstraintIndices, const FReal Dt, const int32 It, const int32 NumIts)
Definition PBDPositionConstraints.h:201
virtual int32 GetNumConstraints() const override final
Definition PBDPositionConstraints.h:178
void Replace(const int32 ConstraintIndex, const FVec3 &Position)
Definition PBDPositionConstraints.h:168
void ApplyPositionConstraints(const FReal Dt, const int32 It, const int32 NumIts)
Definition PBDPositionConstraints.cpp:34
FHandles & GetConstraintHandles()
Definition PBDPositionConstraints.h:132
void ApplyVelocityConstraints(const FReal Dt, const int32 It, const int32 NumIts)
Definition PBDPositionConstraints.h:191
void UpdatePositionBasedState(const FReal Dt)
Definition PBDPositionConstraints.h:173
void DisableConstraints(const TSet< FGeometryParticleHandle * > &RemovedParticles)
Definition PBDPositionConstraints.h:123
virtual void UnprepareTick() override final
Definition PBDPositionConstraints.h:182
void ApplyProjectionConstraints(const FReal Dt, const int32 It, const int32 NumIts)
Definition PBDPositionConstraints.h:192
TConstraintHandleAllocator< FPBDPositionConstraints > FConstraintHandleAllocator
Definition PBDPositionConstraints.h:42
const FVec3 & GetConstraintPosition(int ConstraintIndex) const
Definition PBDPositionConstraints.h:162
FPBDPositionConstraints(const FReal InStiffness=(FReal) 1.)
Definition PBDPositionConstraints.h:45
virtual void PrepareTick() override final
Definition PBDPositionConstraints.h:181
FConstraintContainerHandle * GetConstraintHandle(int32 ConstraintIndex)
Definition PBDPositionConstraints.h:146
const FHandles & GetConstConstraintHandles() const
Definition PBDPositionConstraints.h:136
FPBDPositionConstraints(TArray< FVec3 > &&Locations, TArray< FPBDRigidParticleHandle * > &&InConstrainedParticles, const FReal InStiffness=(FReal) 1.)
Definition PBDPositionConstraints.h:50
void ApplyProjectionConstraints(const TArrayView< int32 > &ConstraintIndices, const FReal Dt, const int32 It, const int32 NumIts)
Definition PBDPositionConstraints.h:202
TArray< FConstraintContainerHandle * > FHandles
Definition PBDPositionConstraints.h:43
FConstraintContainerHandle * AddConstraint(FPBDRigidParticleHandle *Particle, const FVec3 &Position)
Definition PBDPositionConstraints.h:83
void RemoveConstraint(int ConstraintIndex)
Definition PBDPositionConstraints.h:96
TVec2< FGeometryParticleHandle * > GetConstrainedParticles(int32 ConstraintIndex) const
Definition PBDPositionConstraints.h:154
void AddBodies(FSolverBodyContainer &SolverBodyContainer)
Definition PBDPositionConstraints.cpp:18
virtual void AddConstraintsToGraph(Private::FPBDIslandManager &IslandManager) override final
Definition PBDPositionConstraints.cpp:13
void GatherInput(const TArrayView< int32 > &ConstraintIndices, const FReal Dt)
Definition PBDPositionConstraints.h:198
int32 NumConstraints() const
Definition PBDPositionConstraints.h:75
virtual void ResetConstraints() override final
Definition PBDPositionConstraints.h:179
void GatherInput(const FReal Dt)
Definition PBDPositionConstraints.h:188
Definition SolverBodyContainer.h:37
Definition SolverBody.h:99
Definition IslandManager.h:453
FConstraintContainerHandle * AllocHandle(FConstraintContainer *ConstraintContainer, int32 ConstraintIndex)
Definition ConstraintHandle.h:295
void FreeHandle(FConstraintContainerHandle *Handle)
Definition ConstraintHandle.h:297
Definition IndexedConstraintContainer.h:68
int32 ConstraintIndex
Definition IndexedConstraintContainer.h:59
FConstraintContainer * ConcreteContainer()
Definition IndexedConstraintContainer.h:108
Definition IndexedConstraintContainer.h:268
Definition ParticleHandle.h:987
Definition ArrayView.h:139
UE_REWRITE SizeType Num() const
Definition Array.h:1144
UE_FORCEINLINE_HINT void RemoveAtSwap(SizeType Index, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2185
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696
UE_FORCEINLINE_HINT void Reserve(SizeType Number)
Definition Array.h:3016
Definition SkeletalMeshComponent.h:307
FRealDouble FReal
Definition Real.h:22