UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
Chaos::FPBDJointConstraints Class Reference

#include <PBDJointConstraints.h>

+ Inheritance diagram for Chaos::FPBDJointConstraints:

Public Types

using Base = FPBDConstraintContainer
 
using FConstraintContainerHandle = FPBDJointConstraintHandle
 
using FConstraintHandleAllocator = TConstraintHandleAllocator< FPBDJointConstraints >
 
using FHandles = TArray< FConstraintContainerHandle * >
 

Public Member Functions

CHAOS_API FPBDJointConstraints ()
 
virtual CHAOS_API ~FPBDJointConstraints ()
 
CHAOS_API const FPBDJointSolverSettingsGetSettings () const
 
CHAOS_API void SetSettings (const FPBDJointSolverSettings &InSettings)
 
void SetUseLinearJointSolver (const bool bInEnable)
 
void SetUseSimd (const bool bInEnable)
 
void SetSortEnabled (const bool bInEnable)
 
CHAOS_API int32 NumConstraints () const
 
CHAOS_API FConstraintContainerHandleAddConstraint (const FParticlePair &InConstrainedParticles, const FRigidTransform3 &WorldConstraintFrame)
 
CHAOS_API FConstraintContainerHandleAddConstraint (const FParticlePair &InConstrainedParticles, const FTransformPair &ConnectorTransforms)
 
CHAOS_API FConstraintContainerHandleAddConstraint (const FParticlePair &InConstrainedParticles, const FPBDJointSettings &InConstraintSettings)
 
void SetConstraintState (int32 ConstraintIndex, const FPBDJointState &InState)
 
CHAOS_API void RemoveConstraint (int ConstraintIndex)
 
void RemoveConstraints (const TSet< TGeometryParticleHandle< FReal, 3 > * > &RemovedParticles)
 
CHAOS_API void DisconnectConstraints (const TSet< TGeometryParticleHandle< FReal, 3 > * > &RemovedParticles)
 
CHAOS_API bool IsConstraintEnabled (int32 ConstraintIndex) const
 
CHAOS_API bool IsConstraintBroken (int32 ConstraintIndex) const
 
CHAOS_API bool IsConstraintBreaking (int32 ConstraintIndex) const
 
CHAOS_API void ClearConstraintBreaking (int32 ConstraintIndex)
 
CHAOS_API bool IsConstraintViolating (int32 ConstraintIndex) const
 
CHAOS_API void ClearConstraintViolating (int32 ConstraintIndex)
 
CHAOS_API bool IsDriveTargetChanged (int32 ConstraintIndex) const
 
CHAOS_API void ClearDriveTargetChanged (int32 ConstraintIndex)
 
CHAOS_API void SetConstraintEnabled (int32 ConstraintIndex, bool bEnabled)
 
CHAOS_API void SetDriveTargetChanged (int32 ConstraintIndex, bool bTargetChanged)
 
CHAOS_API void BreakConstraint (int32 ConstraintIndex)
 
CHAOS_API void FixConstraint (int32 ConstraintIndex)
 
CHAOS_API void SetBreakCallback (const FJointBreakCallback &Callback)
 
CHAOS_API void ClearBreakCallback ()
 
FHandlesGetConstraintHandles ()
 
const FHandlesGetConstConstraintHandles () const
 
CHAOS_API const FConstraintContainerHandleGetConstraintHandle (int32 ConstraintIndex) const
 
CHAOS_API FConstraintContainerHandleGetConstraintHandle (int32 ConstraintIndex)
 
CHAOS_API const FParticlePairGetConstrainedParticles (int32 ConstraintIndex) const
 
CHAOS_API const FPBDJointSettingsGetConstraintSettings (int32 ConstraintIndex) const
 
CHAOS_API void SetConstraintSettings (int32 ConstraintIndex, const FPBDJointSettings &InConstraintSettings)
 
CHAOS_API void SetLinearDrivePositionTarget (int32 ConstraintIndex, FVec3 InLinearDrivePositionTarget)
 
CHAOS_API void SetAngularDrivePositionTarget (int32 ConstraintIndex, FRotation3 InAngularDrivePositionTarget)
 
CHAOS_API void SetUseLinearSolver (int32 ConstraintIndex, bool InbUseLinearSolver)
 
CHAOS_API FVec3 GetConstraintLinearImpulse (int32 ConstraintIndex) const
 
CHAOS_API FVec3 GetConstraintAngularImpulse (int32 ConstraintIndex) const
 
CHAOS_API float GetConstraintLinearViolation (int32 ConstraintIndex) const
 
CHAOS_API float GetConstraintAngularViolation (int32 ConstraintIndex) const
 
CHAOS_API ESyncState GetConstraintSyncState (int32 ConstraintIndex) const
 
CHAOS_API void SetConstraintSyncState (int32 ConstraintIndex, ESyncState SyncState)
 
CHAOS_API void SetConstraintEnabledDuringResim (int32 ConstraintIndex, bool bEnabled)
 
CHAOS_API bool IsConstraintEnabledDuringResim (int32 ConstraintIndex) const
 
CHAOS_API EResimType GetConstraintResimType (int32 ConstraintIndex) const
 
virtual CHAOS_API TUniquePtr< FConstraintContainerSolverCreateSceneSolver (const int32 Priority) override final
 
virtual CHAOS_API TUniquePtr< FConstraintContainerSolverCreateGroupSolver (const int32 Priority) override final
 
virtual int32 GetNumConstraints () const override final
 
virtual void ResetConstraints () override final
 
virtual CHAOS_API void AddConstraintsToGraph (Private::FPBDIslandManager &IslandManager) override final
 
virtual CHAOS_API void PrepareTick () override final
 
virtual CHAOS_API void UnprepareTick () override final
 
CHAOS_API void SetSolverResults (const int32 ConstraintIndex, const FVec3 &LinearImpulse, const FVec3 &AngularImpulse, const float LinearViolation, const float AngularViolation, const bool bIsBroken, const bool bIsViolating, const FSolverBody *SolverBody0, const FSolverBody *SolverBody1)
 
CHAOS_API int32 GetConstraintIsland (int32 ConstraintIndex) const
 
CHAOS_API int32 GetConstraintLevel (int32 ConstraintIndex) const
 
CHAOS_API int32 GetConstraintColor (int32 ConstraintIndex) const
 
void MarkJointsDirty ()
 
void AddBodies (FSolverBodyContainer &SolverBodyContainer)
 
void GatherInput (const FReal Dt)
 
void ScatterOutput (const FReal Dt)
 
void ApplyPositionConstraints (const FReal Dt, const int32 It, const int32 NumIts)
 
void ApplyVelocityConstraints (const FReal Dt, const int32 It, const int32 NumIts)
 
void ApplyProjectionConstraints (const FReal Dt, const int32 It, const int32 NumIts)
 
void AddBodies (const TArrayView< int32 > &ConstraintIndices, FSolverBodyContainer &SolverBodyContainer)
 
void GatherInput (const TArrayView< int32 > &ConstraintIndices, const FReal Dt)
 
void ScatterOutput (const TArrayView< int32 > &ConstraintIndices, const FReal Dt)
 
void ApplyPositionConstraints (const TArrayView< int32 > &ConstraintIndices, const FReal Dt, const int32 It, const int32 NumIts)
 
void ApplyVelocityConstraints (const TArrayView< int32 > &ConstraintIndices, const FReal Dt, const int32 It, const int32 NumIts)
 
void ApplyProjectionConstraints (const TArrayView< int32 > &ConstraintIndices, const FReal Dt, const int32 It, const int32 NumIts)
 
void GatherInput (const int32 ConstraintIndex, const FReal Dt)
 
void ScatterOutput (const int32 ConstraintIndex, const FReal Dt)
 
bool GetUseLinearSolver ()
 
void SetUseLinearSolver (const bool bUseLinearSolverIn)
 
- Public Member Functions inherited from Chaos::FPBDConstraintContainer
CHAOS_API FPBDConstraintContainer (FConstraintHandleTypeID InConstraintHandleType)
 
virtual CHAOS_API ~FPBDConstraintContainer ()
 
int32 GetContainerId () const
 
void SetContainerId (int32 InContainerId)
 
const FConstraintHandleTypeIDGetConstraintHandleType () const
 
virtual void UpdatePositionBasedState (const FReal Dt)
 
virtual void OnDisableParticle (FGeometryParticleHandle *DisabledParticle)
 
virtual void OnEnableParticle (FGeometryParticleHandle *EnabledParticle)
 

Friends

class FPBDJointConstraintHandle
 
struct FPBDJointCombinedConstraints
 

Additional Inherited Members

- Protected Attributes inherited from Chaos::FPBDConstraintContainer
FConstraintHandleTypeID ConstraintHandleType
 
int32 ContainerId
 

Detailed Description

A set of joint restricting up to 6 degrees of freedom, with linear and angular limits.

Member Typedef Documentation

◆ Base

◆ FConstraintContainerHandle

◆ FConstraintHandleAllocator

◆ FHandles

Constructor & Destructor Documentation

◆ FPBDJointConstraints()

PRAGMA_ENABLE_DEPRECATION_WARNINGS Chaos::FPBDJointConstraints::FPBDJointConstraints ( )

◆ ~FPBDJointConstraints()

Chaos::FPBDJointConstraints::~FPBDJointConstraints ( )
virtual

Member Function Documentation

◆ AddBodies() [1/2]

void Chaos::FPBDJointConstraints::AddBodies ( const TArrayView< int32 > &  ConstraintIndices,
FSolverBodyContainer SolverBodyContainer 
)
inline

◆ AddBodies() [2/2]

void Chaos::FPBDJointConstraints::AddBodies ( FSolverBodyContainer SolverBodyContainer)
inline

◆ AddConstraint() [1/3]

FPBDJointConstraints::FConstraintContainerHandle * Chaos::FPBDJointConstraints::AddConstraint ( const FParticlePair InConstrainedParticles,
const FPBDJointSettings InConstraintSettings 
)

◆ AddConstraint() [2/3]

FPBDJointConstraints::FConstraintContainerHandle * Chaos::FPBDJointConstraints::AddConstraint ( const FParticlePair InConstrainedParticles,
const FRigidTransform3 WorldConstraintFrame 
)

Add a constraint with particle-space constraint offsets.

◆ AddConstraint() [3/3]

FPBDJointConstraints::FConstraintContainerHandle * Chaos::FPBDJointConstraints::AddConstraint ( const FParticlePair InConstrainedParticles,
const FTransformPair ConnectorTransforms 
)

◆ AddConstraintsToGraph()

void Chaos::FPBDJointConstraints::AddConstraintsToGraph ( Private::FPBDIslandManager IslandManager)
finaloverridevirtual

Add all the constraints in the container to the graph

Implements Chaos::FPBDConstraintContainer.

◆ ApplyPositionConstraints() [1/2]

void Chaos::FPBDJointConstraints::ApplyPositionConstraints ( const FReal  Dt,
const int32  It,
const int32  NumIts 
)
inline

◆ ApplyPositionConstraints() [2/2]

void Chaos::FPBDJointConstraints::ApplyPositionConstraints ( const TArrayView< int32 > &  ConstraintIndices,
const FReal  Dt,
const int32  It,
const int32  NumIts 
)
inline

◆ ApplyProjectionConstraints() [1/2]

void Chaos::FPBDJointConstraints::ApplyProjectionConstraints ( const FReal  Dt,
const int32  It,
const int32  NumIts 
)
inline

◆ ApplyProjectionConstraints() [2/2]

void Chaos::FPBDJointConstraints::ApplyProjectionConstraints ( const TArrayView< int32 > &  ConstraintIndices,
const FReal  Dt,
const int32  It,
const int32  NumIts 
)
inline

◆ ApplyVelocityConstraints() [1/2]

void Chaos::FPBDJointConstraints::ApplyVelocityConstraints ( const FReal  Dt,
const int32  It,
const int32  NumIts 
)
inline

◆ ApplyVelocityConstraints() [2/2]

void Chaos::FPBDJointConstraints::ApplyVelocityConstraints ( const TArrayView< int32 > &  ConstraintIndices,
const FReal  Dt,
const int32  It,
const int32  NumIts 
)
inline

◆ BreakConstraint()

void Chaos::FPBDJointConstraints::BreakConstraint ( int32  ConstraintIndex)

◆ ClearBreakCallback()

void Chaos::FPBDJointConstraints::ClearBreakCallback ( )

Remove the previously assigned break callback.

◆ ClearConstraintBreaking()

void Chaos::FPBDJointConstraints::ClearConstraintBreaking ( int32  ConstraintIndex)

◆ ClearConstraintViolating()

void Chaos::FPBDJointConstraints::ClearConstraintViolating ( int32  ConstraintIndex)

◆ ClearDriveTargetChanged()

void Chaos::FPBDJointConstraints::ClearDriveTargetChanged ( int32  ConstraintIndex)

◆ CreateGroupSolver()

TUniquePtr< FConstraintContainerSolver > Chaos::FPBDJointConstraints::CreateGroupSolver ( const int32  Priority)
finaloverridevirtual

Create a constraint solver for an Evolution with Graph support (World evolution). The system will create several of these: usually one per worker thread (Island Group) but possibly more in complex scenes where constraint coloring is being used. It will be used to solve constraints in groups, with the constraints in each group determined by the graph/islands/islandgroups.

Implements Chaos::FPBDConstraintContainer.

◆ CreateSceneSolver()

TUniquePtr< FConstraintContainerSolver > Chaos::FPBDJointConstraints::CreateSceneSolver ( const int32  Priority)
finaloverridevirtual

Create a constraint solver for an Evolution without Graph support (RBAN evolution). There will only be one of these per scene (RBAN node) and it is used to solve all constraints in the container (serially).

Implements Chaos::FPBDConstraintContainer.

◆ DisconnectConstraints()

void Chaos::FPBDJointConstraints::DisconnectConstraints ( const TSet< TGeometryParticleHandle< FReal, 3 > * > &  RemovedParticles)
virtual

Reimplemented from Chaos::FPBDConstraintContainer.

◆ FixConstraint()

void Chaos::FPBDJointConstraints::FixConstraint ( int32  ConstraintIndex)

Repair a broken constraints (does not adjust particle positions)

◆ GatherInput() [1/3]

void Chaos::FPBDJointConstraints::GatherInput ( const FReal  Dt)
inline

◆ GatherInput() [2/3]

void Chaos::FPBDJointConstraints::GatherInput ( const int32  ConstraintIndex,
const FReal  Dt 
)
inline

◆ GatherInput() [3/3]

void Chaos::FPBDJointConstraints::GatherInput ( const TArrayView< int32 > &  ConstraintIndices,
const FReal  Dt 
)
inline

◆ GetConstConstraintHandles()

const FHandles & Chaos::FPBDJointConstraints::GetConstConstraintHandles ( ) const
inline

All of the constraints in the container, including inactive

◆ GetConstrainedParticles()

const FParticlePair & Chaos::FPBDJointConstraints::GetConstrainedParticles ( int32  ConstraintIndex) const

Get the particles that are affected by the specified constraint.

◆ GetConstraintAngularImpulse()

FVec3 Chaos::FPBDJointConstraints::GetConstraintAngularImpulse ( int32  ConstraintIndex) const

The total linear angular applied by the constraint

◆ GetConstraintAngularViolation()

float Chaos::FPBDJointConstraints::GetConstraintAngularViolation ( int32  ConstraintIndex) const

◆ GetConstraintColor()

int32 Chaos::FPBDJointConstraints::GetConstraintColor ( int32  ConstraintIndex) const

◆ GetConstraintHandle() [1/2]

FPBDJointConstraints::FConstraintContainerHandle * Chaos::FPBDJointConstraints::GetConstraintHandle ( int32  ConstraintIndex)

Get a joint constraint by index

◆ GetConstraintHandle() [2/2]

const FPBDJointConstraints::FConstraintContainerHandle * Chaos::FPBDJointConstraints::GetConstraintHandle ( int32  ConstraintIndex) const

Get a joint constraint by index

◆ GetConstraintHandles()

FHandles & Chaos::FPBDJointConstraints::GetConstraintHandles ( )
inline

All of the constraints in the container, including inactive

◆ GetConstraintIsland()

int32 Chaos::FPBDJointConstraints::GetConstraintIsland ( int32  ConstraintIndex) const

◆ GetConstraintLevel()

int32 Chaos::FPBDJointConstraints::GetConstraintLevel ( int32  ConstraintIndex) const

◆ GetConstraintLinearImpulse()

FVec3 Chaos::FPBDJointConstraints::GetConstraintLinearImpulse ( int32  ConstraintIndex) const

The total linear impulse applied by the constraint

◆ GetConstraintLinearViolation()

float Chaos::FPBDJointConstraints::GetConstraintLinearViolation ( int32  ConstraintIndex) const

◆ GetConstraintResimType()

EResimType Chaos::FPBDJointConstraints::GetConstraintResimType ( int32  ConstraintIndex) const

◆ GetConstraintSettings()

const FPBDJointSettings & Chaos::FPBDJointConstraints::GetConstraintSettings ( int32  ConstraintIndex) const

Get the settings for a joint constraint by index

◆ GetConstraintSyncState()

ESyncState Chaos::FPBDJointConstraints::GetConstraintSyncState ( int32  ConstraintIndex) const

◆ GetNumConstraints()

virtual int32 Chaos::FPBDJointConstraints::GetNumConstraints ( ) const
inlinefinaloverridevirtual

Get the number of constraints in this container (includes inactive and disabled)

Implements Chaos::FPBDConstraintContainer.

◆ GetSettings()

const FPBDJointSolverSettings & Chaos::FPBDJointConstraints::GetSettings ( ) const

Get the solver settings (used by TPBDJointContainerSolver)

◆ GetUseLinearSolver()

bool Chaos::FPBDJointConstraints::GetUseLinearSolver ( )
inline

◆ IsConstraintBreaking()

bool Chaos::FPBDJointConstraints::IsConstraintBreaking ( int32  ConstraintIndex) const

◆ IsConstraintBroken()

bool Chaos::FPBDJointConstraints::IsConstraintBroken ( int32  ConstraintIndex) const

◆ IsConstraintEnabled()

bool Chaos::FPBDJointConstraints::IsConstraintEnabled ( int32  ConstraintIndex) const

◆ IsConstraintEnabledDuringResim()

bool Chaos::FPBDJointConstraints::IsConstraintEnabledDuringResim ( int32  ConstraintIndex) const

◆ IsConstraintViolating()

bool Chaos::FPBDJointConstraints::IsConstraintViolating ( int32  ConstraintIndex) const

◆ IsDriveTargetChanged()

bool Chaos::FPBDJointConstraints::IsDriveTargetChanged ( int32  ConstraintIndex) const

◆ MarkJointsDirty()

void Chaos::FPBDJointConstraints::MarkJointsDirty ( )
inline

◆ NumConstraints()

PRAGMA_ENABLE_DEPRECATION_WARNINGS int32 Chaos::FPBDJointConstraints::NumConstraints ( ) const

Get the number of constraints.

◆ PrepareTick()

void Chaos::FPBDJointConstraints::PrepareTick ( )
finaloverridevirtual

Called oncer per tick to initialize buffers required for the rest of the tick

Implements Chaos::FPBDConstraintContainer.

◆ RemoveConstraint()

void Chaos::FPBDJointConstraints::RemoveConstraint ( int  ConstraintIndex)

Remove the specified constraint.

◆ RemoveConstraints()

void Chaos::FPBDJointConstraints::RemoveConstraints ( const TSet< TGeometryParticleHandle< FReal, 3 > * > &  RemovedParticles)
inline

◆ ResetConstraints()

virtual void Chaos::FPBDJointConstraints::ResetConstraints ( )
inlinefinaloverridevirtual

Empty the constraints (must be removed from the graph first, if required)

Implements Chaos::FPBDConstraintContainer.

◆ ScatterOutput() [1/3]

void Chaos::FPBDJointConstraints::ScatterOutput ( const FReal  Dt)
inline

◆ ScatterOutput() [2/3]

void Chaos::FPBDJointConstraints::ScatterOutput ( const int32  ConstraintIndex,
const FReal  Dt 
)
inline

◆ ScatterOutput() [3/3]

void Chaos::FPBDJointConstraints::ScatterOutput ( const TArrayView< int32 > &  ConstraintIndices,
const FReal  Dt 
)
inline

◆ SetAngularDrivePositionTarget()

void Chaos::FPBDJointConstraints::SetAngularDrivePositionTarget ( int32  ConstraintIndex,
FRotation3  InAngularDrivePositionTarget 
)

Set the angular drive target for a constraint by index

◆ SetBreakCallback()

void Chaos::FPBDJointConstraints::SetBreakCallback ( const FJointBreakCallback Callback)

Set the break callback. This will be called once after the constraint solver phase on the \ tick when the constraint is broken. There is only one callback allowed - it is usually a method on the owner (e.g., the Evolution object) which will probably dispatch its own event.

◆ SetConstraintEnabled()

void Chaos::FPBDJointConstraints::SetConstraintEnabled ( int32  ConstraintIndex,
bool  bEnabled 
)

◆ SetConstraintEnabledDuringResim()

void Chaos::FPBDJointConstraints::SetConstraintEnabledDuringResim ( int32  ConstraintIndex,
bool  bEnabled 
)

◆ SetConstraintSettings()

void Chaos::FPBDJointConstraints::SetConstraintSettings ( int32  ConstraintIndex,
const FPBDJointSettings InConstraintSettings 
)

Set the settings for a joint constraint by index

◆ SetConstraintState()

void Chaos::FPBDJointConstraints::SetConstraintState ( int32  ConstraintIndex,
const FPBDJointState InState 
)

◆ SetConstraintSyncState()

void Chaos::FPBDJointConstraints::SetConstraintSyncState ( int32  ConstraintIndex,
ESyncState  SyncState 
)

◆ SetDriveTargetChanged()

void Chaos::FPBDJointConstraints::SetDriveTargetChanged ( int32  ConstraintIndex,
bool  bTargetChanged 
)

◆ SetLinearDrivePositionTarget()

void Chaos::FPBDJointConstraints::SetLinearDrivePositionTarget ( int32  ConstraintIndex,
FVec3  InLinearDrivePositionTarget 
)

Set the linear drive target for a constraint by index

◆ SetSettings()

PRAGMA_DISABLE_DEPRECATION_WARNINGS void Chaos::FPBDJointConstraints::SetSettings ( const FPBDJointSolverSettings InSettings)

◆ SetSolverResults()

void Chaos::FPBDJointConstraints::SetSolverResults ( const int32  ConstraintIndex,
const FVec3 LinearImpulse,
const FVec3 AngularImpulse,
const float  LinearViolation,
const float  AngularViolation,
const bool  bIsBroken,
const bool  bIsViolating,
const FSolverBody SolverBody0,
const FSolverBody SolverBody1 
)

◆ SetSortEnabled()

void Chaos::FPBDJointConstraints::SetSortEnabled ( const bool  bInEnable)
inline

Whether to sort the joints internally. Sort will be triggered on any tick when a joint was added. Only needed for RBAN.

◆ SetUseLinearJointSolver()

void Chaos::FPBDJointConstraints::SetUseLinearJointSolver ( const bool  bInEnable)
inline

Whether to use a linear or non-linear joint solver. Non-linear is more stable but much more expensive. A linear solver is used by default. This API is deprecated. See FPBDJointSettings::bUseLinearSolver instead.

◆ SetUseLinearSolver() [1/2]

void Chaos::FPBDJointConstraints::SetUseLinearSolver ( const bool  bUseLinearSolverIn)
inline

◆ SetUseLinearSolver() [2/2]

void Chaos::FPBDJointConstraints::SetUseLinearSolver ( int32  ConstraintIndex,
bool  InbUseLinearSolver 
)

Set the option to use linear solver for a constraint by index

◆ SetUseSimd()

void Chaos::FPBDJointConstraints::SetUseSimd ( const bool  bInEnable)
inline

Whether to use simd in single precision on the linear joint solver.

◆ UnprepareTick()

void Chaos::FPBDJointConstraints::UnprepareTick ( )
finaloverridevirtual

Should undo any allocations in PrepareTick

Implements Chaos::FPBDConstraintContainer.

Friends And Related Symbol Documentation

◆ FPBDJointCombinedConstraints

◆ FPBDJointConstraintHandle


The documentation for this class was generated from the following files: