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

#include <PBDRigidClustering.h>

Public Types

typedef FPBDRigidsEvolutionGBF FRigidEvolution
 
typedef FPBDRigidParticleHandleFRigidHandle
 
typedef TArray< FRigidHandleFRigidHandleArray
 
typedef FPBDRigidClusteredParticleHandleFClusterHandle
 
typedef TMap< FClusterHandle, FRigidHandleArrayFClusterMap
 
typedef TFunction< void(FRigidClustering &, FRigidHandle)> FVisitorFunction
 

Public Member Functions

CHAOS_API FRigidClustering (FRigidEvolution &InEvolution, FPBDRigidClusteredParticles &InParticles, const TArray< ISimCallbackObject * > *InStrainModifiers)
 
CHAOS_API ~FRigidClustering ()
 
CHAOS_API Chaos::FPBDRigidClusteredParticleHandleCreateClusterParticle (const int32 ClusterGroupIndex, TArray< Chaos::FPBDRigidParticleHandle * > &&Children, const FClusterCreationParameters &Parameters=FClusterCreationParameters(), const Chaos::FImplicitObjectPtr &ProxyGeometry=nullptr, const FRigidTransform3 *ForceMassOrientation=nullptr, const FUniqueIdx *ExistingIndex=nullptr)
 
Chaos::FPBDRigidClusteredParticleHandleCreateClusterParticle (const int32 ClusterGroupIndex, TArray< Chaos::FPBDRigidParticleHandle * > &&Children, const FClusterCreationParameters &Parameters=FClusterCreationParameters(), TSharedPtr< Chaos::FImplicitObject, ESPMode::ThreadSafe > ProxyGeometry=nullptr, const FRigidTransform3 *ForceMassOrientation=nullptr, const FUniqueIdx *ExistingIndex=nullptr)
 
CHAOS_API Chaos::FPBDRigidClusteredParticleHandleCreateClusterParticleFromClusterChildren (TArray< FPBDRigidParticleHandle * > &&Children, FPBDRigidClusteredParticleHandle *Parent, const FRigidTransform3 &ClusterWorldTM, const FClusterCreationParameters &Parameters)
 
CHAOS_API void AddParticlesToCluster (FPBDRigidClusteredParticleHandle *Cluster, const TArray< FPBDRigidParticleHandle * > &InChildren, const TMap< FPBDRigidParticleHandle *, FPBDRigidParticleHandle * > &ChildToParentMap)
 
CHAOS_API void RemoveParticlesFromCluster (FPBDRigidClusteredParticleHandle *Cluster, const TArray< FPBDRigidParticleHandle * > &InChildren)
 
CHAOS_API void UnionClusterGroups ()
 
CHAOS_API TSet< FPBDRigidParticleHandle * > DeactivateClusterParticle (FPBDRigidClusteredParticleHandle *ClusteredParticle)
 
CHAOS_API TSet< FPBDRigidParticleHandle * > ReleaseClusterParticles (FPBDRigidClusteredParticleHandle *ClusteredParticle, bool bForceRelease=false)
 
CHAOS_API TSet< FPBDRigidParticleHandle * > ReleaseClusterParticlesNoInternalCluster (FPBDRigidClusteredParticleHandle *ClusteredParticle, bool bForceRelease=false)
 
CHAOS_API TSet< FPBDRigidParticleHandle * > ReleaseClusterParticles (TArray< FPBDRigidParticleHandle * > ChildrenParticles, bool bTriggerBreakEvents=false)
 
CHAOS_API void ForceReleaseChildParticleAndParents (FPBDRigidClusteredParticleHandle *ChildClusteredParticle, bool bTriggerBreakEvents)
 
CHAOS_API FPBDRigidClusteredParticleHandleDestroyClusterParticle (FPBDRigidClusteredParticleHandle *ClusteredParticle, const FClusterDestoryParameters &Parameters=FClusterDestoryParameters())
 
CHAOS_API bool BreakCluster (FPBDRigidClusteredParticleHandle *ClusteredParticle)
 
CHAOS_API bool BreakClustersByProxy (const IPhysicsProxyBase *Proxy)
 
CHAOS_API void AdvanceClustering (const FReal dt, FPBDCollisionConstraints &CollisionRule)
 
CHAOS_API void BreakingModel ()
 
CHAOS_API void BreakingModel (TArray< FPBDRigidClusteredParticleHandle * > &InParticles)
 
CHAOS_API bool BreakingModel (TArrayView< FPBDRigidClusteredParticleHandle * > InParticles)
 
CHAOS_API void Visitor (FClusterHandle Cluster, FVisitorFunction Function)
 
CHAOS_API FPBDRigidParticleHandleGetActiveClusterIndex (FPBDRigidParticleHandle *Child)
 
TArrayCollectionArray< ClusterId > & GetClusterIdsArray ()
 
const TArrayCollectionArray< ClusterId > & GetClusterIdsArray () const
 
const TArrayCollectionArray< FRigidClusteredFlags > & GetRigidClusteredFlagsArray () const
 
const TArrayCollectionArray< FRigidTransform3 > & GetChildToParentMap () const
 
TArrayCollectionArray< FRealSingle > & GetStrainArray ()
 
const TArrayCollectionArray< FRealSingle > & GetStrainArray () const
 
FClusterMapGetChildrenMap ()
 
const FClusterMapGetChildrenMap () const
 
TArrayCollectionArray< int32 > & GetClusterGroupIndexArray ()
 
CHAOS_API void ResetAllEvents ()
 
const TArray< FBreakingData > & GetAllClusterBreakings () const
 
void SetGenerateClusterBreaking (bool DoGenerate)
 
bool GetDoGenerateBreakingData () const
 
void ResetAllClusterBreakings ()
 
const TArray< FCrumblingData > & GetAllClusterCrumblings () const
 
void ResetAllClusterCrumblings ()
 
const TArrayCollectionArray< TArray< TConnectivityEdge< FReal > > > & GetConnectivityEdges () const
 
CHAOS_API FPBDRigidParticleHandleFindClosestChild (const FPBDRigidClusteredParticleHandle *ClusteredParticle, const FVec3 &WorldLocation) const
 
CHAOS_API TArray< FPBDRigidParticleHandle * > FindChildrenWithinRadius (const FPBDRigidClusteredParticleHandle *ClusteredParticle, const FVec3 &WorldLocation, FReal Radius, bool bAlwaysReturnClosest) const
 
void SetClusterConnectionFactor (FReal ClusterConnectionFactorIn)
 
void SetClusterUnionConnectionType (FClusterCreationParameters::EConnectionMethod ClusterConnectionType)
 
FClusterCreationParameters::EConnectionMethod GetClusterUnionConnectionType () const
 
void ApplySettings (const FChaosSolverConfiguration &Settings)
 
CHAOS_API void GenerateConnectionGraph (const TArray< FPBDRigidParticleHandle * > &Particles, const FClusterCreationParameters &Parameters=FClusterCreationParameters(), const TSet< FPBDRigidParticleHandle * > *FromParticles=nullptr, const TSet< FPBDRigidParticleHandle * > *ToParticles=nullptr)
 
CHAOS_API void GenerateConnectionGraph (Chaos::FPBDRigidClusteredParticleHandle *Parent, const FClusterCreationParameters &Parameters=FClusterCreationParameters())
 
CHAOS_API void ClearConnectionGraph (FPBDRigidClusteredParticleHandle *Parent)
 
const TSet< Chaos::FPBDRigidClusteredParticleHandle * > & GetTopLevelClusterParents () const
 
TSet< Chaos::FPBDRigidClusteredParticleHandle * > & GetTopLevelClusterParents ()
 
FRigidEvolutionGetEvolution ()
 
const FRigidEvolutionGetEvolution () const
 
CHAOS_API void SetInternalStrain (FPBDRigidClusteredParticleHandle *Particle, FRealSingle Strain)
 
CHAOS_API void SetExternalStrain (FPBDRigidClusteredParticleHandle *Particle, FRealSingle Strain)
 
CHAOS_API void BuildConvexOptimizer (FPBDRigidClusteredParticleHandle *Particle)
 
FClusterUnionManagerGetClusterUnionManager ()
 
const FClusterUnionManagerGetClusterUnionManager () const
 
const TSet< Chaos::FPBDRigidClusteredParticleHandle * > & GetTopLevelClusterParentsStrained () const
 
CHAOS_API void RemoveNodeConnections (FPBDRigidParticleHandle *Child)
 
CHAOS_API void RemoveNodeConnections (FPBDRigidClusteredParticleHandle *Child)
 
template<typename TFilter >
void RemoveFilteredNodeConnections (FPBDRigidClusteredParticleHandle *ClusteredChild, TFilter &&Filter)
 
template<typename ParticleHandleTypeA , typename ParticleHandleTypeB >
void CreateNodeConnection (ParticleHandleTypeA *A, ParticleHandleTypeB *B)
 
CHAOS_API void CreateNodeConnection (FPBDRigidClusteredParticleHandle *A, FPBDRigidClusteredParticleHandle *B)
 
CHAOS_API void CleanupInternalClustersForProxies (TArrayView< IPhysicsProxyBase * > Proxies)
 
CHAOS_API TSet< FPBDRigidParticleHandle * > HandleConnectivityOnReleaseClusterParticle (FPBDRigidClusteredParticleHandle *ClusteredParticle, bool bCreateNewClusters)
 
CHAOS_API void DisableCluster (FPBDRigidClusteredParticleHandle *ClusteredParticle)
 
bool ShouldThrottleParticleRelease () const
 
void ThrottleReleasedParticlesIfNecessary (TSet< FPBDRigidParticleHandle * > &Particles)
 
void ThrottleReleasedParticlesIfNecessary (TArray< FPBDRigidParticleHandle * > &Particles)
 
void DisableParticle (FPBDRigidParticleHandle *ParticleToDisable, bool bRemoveFromChildrenMap=true)
 
const FChaosSolverDestructionSettingsGetDestructionSettings () const
 

Static Public Member Functions

static CHAOS_API FPBDRigidParticleHandleFindClosestParticle (const TArray< FPBDRigidParticleHandle * > &Particles, const FVec3 &WorldLocation)
 
static CHAOS_API TArray< FPBDRigidParticleHandle * > FindParticlesWithinRadius (const TArray< FPBDRigidParticleHandle * > &Particles, const FVec3 &WorldLocation, FReal Radius, bool bAlwaysReturnClosest)
 
static CHAOS_API bool ShouldUnionsHaveCollisionParticles ()
 

Protected Types

using FParticleIsland = TArray< FPBDRigidParticleHandle * >
 

Protected Member Functions

CHAOS_API void ComputeStrainFromCollision (const FPBDCollisionConstraints &CollisionRule, const FReal Dt)
 
CHAOS_API void ResetCollisionImpulseArray ()
 
CHAOS_API void ApplyStrainModifiers (const TArray< FPBDRigidClusteredParticleHandle * > &StrainedParticles)
 
CHAOS_API void UpdateConnectivityGraphUsingPointImplicit (const TArray< FPBDRigidParticleHandle * > &Particles, FReal CollisionThicknessPercent, const TSet< FPBDRigidParticleHandle * > *FromParticles=nullptr, const TSet< FPBDRigidParticleHandle * > *ToParticles=nullptr)
 
CHAOS_API void UpdateConnectivityGraphUsingPointImplicit (Chaos::FPBDRigidClusteredParticleHandle *Parent, const FClusterCreationParameters &Parameters=FClusterCreationParameters())
 
CHAOS_API void FixConnectivityGraphUsingDelaunayTriangulation (const TArray< FPBDRigidParticleHandle * > &Particles, const FClusterCreationParameters &Parameters=FClusterCreationParameters(), const TSet< FPBDRigidParticleHandle * > *FromParticles=nullptr, const TSet< FPBDRigidParticleHandle * > *ToParticles=nullptr)
 
CHAOS_API void FixConnectivityGraphUsingDelaunayTriangulation (Chaos::FPBDRigidClusteredParticleHandle *Parent, const FClusterCreationParameters &Parameters=FClusterCreationParameters())
 
CHAOS_API void UpdateConnectivityGraphUsingDelaunayTriangulation (const TArray< FPBDRigidParticleHandle * > &Particles, const FClusterCreationParameters &Parameters=FClusterCreationParameters(), const TSet< FPBDRigidParticleHandle * > *FromParticles=nullptr, const TSet< FPBDRigidParticleHandle * > *ToParticles=nullptr)
 
CHAOS_API void UpdateConnectivityGraphUsingDelaunayTriangulation (const Chaos::FPBDRigidClusteredParticleHandle *Parent, const FClusterCreationParameters &Parameters=FClusterCreationParameters())
 
CHAOS_API void UpdateConnectivityGraphUsingDelaunayTriangulationWithBoundsOverlaps (const TArray< FPBDRigidParticleHandle * > &Particles, const FClusterCreationParameters &Parameters=FClusterCreationParameters(), const TSet< FPBDRigidParticleHandle * > *FromParticles=nullptr, const TSet< FPBDRigidParticleHandle * > *ToParticles=nullptr)
 
CHAOS_API void UpdateConnectivityGraphUsingDelaunayTriangulationWithBoundsOverlaps (const Chaos::FPBDRigidClusteredParticleHandle *Parent, const FClusterCreationParameters &Parameters=FClusterCreationParameters())
 
CHAOS_API void RemoveChildFromParent (FPBDRigidParticleHandle *Child, FPBDRigidClusteredParticleHandle *ClusteredParent)
 
CHAOS_API void RemoveChildFromParentAndChildrenArray (FPBDRigidParticleHandle *Child, FPBDRigidClusteredParticleHandle *ClusteredParent)
 
CHAOS_API void TrackBreakingCollision (FPBDRigidClusteredParticleHandle *ClusteredParticle)
 
CHAOS_API void RestoreBreakingMomentum ()
 
CHAOS_API void RemoveFromMomentumRestoringStructures (const FPBDRigidParticleHandle *ParticleToRemove)
 
CHAOS_API void SendBreakingEvent (FPBDRigidClusteredParticleHandle *ClusteredParticle, bool bFromCrumble)
 
CHAOS_API void SendCrumblingEvent (FPBDRigidClusteredParticleHandle *ClusteredParticle)
 
CHAOS_API TSet< FPBDRigidParticleHandle * > ReleaseClusterParticlesImpl (FPBDRigidClusteredParticleHandle *ClusteredParticle, bool bForceRelease, bool bCreateNewClusters)
 
CHAOS_API TArray< FParticleIslandFindIslandsInChildren (const FPBDRigidClusteredParticleHandle *ClusteredParticle, bool bTraverseInterclusterEdges)
 
CHAOS_API TArray< FPBDRigidParticleHandle * > CreateClustersFromNewIslands (TArray< FParticleIsland > &Islands, FPBDRigidClusteredParticleHandle *ClusteredParent)
 
CHAOS_API void UpdateTopLevelParticle (FPBDRigidClusteredParticleHandle *Particle)
 
CHAOS_API void UpdateClusterParticlePropertiesFromChildren (FPBDRigidClusteredParticleHandle *Cluster, const FRigidHandleArray &Children, const TMap< FPBDRigidParticleHandle *, FPBDRigidParticleHandle * > &ChildToParentMap)
 

Member Typedef Documentation

◆ FClusterHandle

◆ FClusterMap

◆ FParticleIsland

◆ FRigidEvolution

◆ FRigidHandle

◆ FRigidHandleArray

◆ FVisitorFunction

Constructor & Destructor Documentation

◆ FRigidClustering()

Chaos::FRigidClustering::FRigidClustering ( FRigidEvolution InEvolution,
FPBDRigidClusteredParticles InParticles,
const TArray< ISimCallbackObject * > *  InStrainModifiers 
)

◆ ~FRigidClustering()

Chaos::FRigidClustering::~FRigidClustering ( )

Member Function Documentation

◆ AddParticlesToCluster()

void Chaos::FRigidClustering::AddParticlesToCluster ( FPBDRigidClusteredParticleHandle Cluster,
const TArray< FPBDRigidParticleHandle * > &  InChildren,
const TMap< FPBDRigidParticleHandle *, FPBDRigidParticleHandle * > &  ChildToParentMap 
)

Manually add a set of particles to a cluster after the cluster has already been created. ChildToParentMap: A map that may contain a pointer to one of the child particles as a key, and a pointer to its old parent particle (prior to be being released for example). If a child particle exists in this map, its parent (or whatever is specified as the value) will be used to determine the correct proxy to add to the parent cluster.

◆ AdvanceClustering()

void Chaos::FRigidClustering::AdvanceClustering ( const FReal  dt,
FPBDCollisionConstraints CollisionRule 
)

◆ ApplySettings()

void Chaos::FRigidClustering::ApplySettings ( const FChaosSolverConfiguration Settings)

◆ ApplyStrainModifiers()

void Chaos::FRigidClustering::ApplyStrainModifiers ( const TArray< FPBDRigidClusteredParticleHandle * > &  StrainedParticles)
protected

◆ BreakCluster()

bool Chaos::FRigidClustering::BreakCluster ( FPBDRigidClusteredParticleHandle ClusteredParticle)

◆ BreakClustersByProxy()

bool Chaos::FRigidClustering::BreakClustersByProxy ( const IPhysicsProxyBase Proxy)

◆ BreakingModel() [1/3]

void Chaos::FRigidClustering::BreakingModel ( )

BreakingModel Implements the promotion breaking model, where strain impulses are summed onto the cluster body, and released if greater than the encoded strain. The remainder strains are propagated back down to the children clusters.

◆ BreakingModel() [2/3]

void Chaos::FRigidClustering::BreakingModel ( TArray< FPBDRigidClusteredParticleHandle * > &  InParticles)

◆ BreakingModel() [3/3]

bool Chaos::FRigidClustering::BreakingModel ( TArrayView< FPBDRigidClusteredParticleHandle * >  InParticles)

◆ BuildConvexOptimizer()

void Chaos::FRigidClustering::BuildConvexOptimizer ( FPBDRigidClusteredParticleHandle Particle)

◆ CleanupInternalClustersForProxies()

void Chaos::FRigidClustering::CleanupInternalClustersForProxies ( TArrayView< IPhysicsProxyBase * >  Proxies)

CleanupInternalClustersForProxies For a given set of physics proxies, cleanup any tracked internal clusters that we've marked as being empty.

◆ ClearConnectionGraph()

void Chaos::FRigidClustering::ClearConnectionGraph ( FPBDRigidClusteredParticleHandle Parent)

◆ ComputeStrainFromCollision()

void Chaos::FRigidClustering::ComputeStrainFromCollision ( const FPBDCollisionConstraints CollisionRule,
const FReal  Dt 
)
protected

◆ CreateClusterParticle() [1/2]

Chaos::FPBDRigidClusteredParticleHandle * Chaos::FRigidClustering::CreateClusterParticle ( const int32  ClusterGroupIndex,
TArray< Chaos::FPBDRigidParticleHandle * > &&  Children,
const FClusterCreationParameters Parameters = FClusterCreationParameters(),
const Chaos::FImplicitObjectPtr ProxyGeometry = nullptr,
const FRigidTransform3 ForceMassOrientation = nullptr,
const FUniqueIdx ExistingIndex = nullptr 
)

Initialize a cluster with the specified children.

ClusterGroupIndex - Index to join cluster into. Children - List of children that should belong to the cluster Parameters - ClusterParticleHandle must be valid, this is the parent cluster body. ProxyGeometry : Collision default for the cluster, automatically generated otherwise. ForceMassOrientation : Inertial alignment into mass space.

◆ CreateClusterParticle() [2/2]

Chaos::FPBDRigidClusteredParticleHandle * Chaos::FRigidClustering::CreateClusterParticle ( const int32  ClusterGroupIndex,
TArray< Chaos::FPBDRigidParticleHandle * > &&  Children,
const FClusterCreationParameters Parameters = FClusterCreationParameters(),
TSharedPtr< Chaos::FImplicitObject, ESPMode::ThreadSafe ProxyGeometry = nullptr,
const FRigidTransform3 ForceMassOrientation = nullptr,
const FUniqueIdx ExistingIndex = nullptr 
)
inline

◆ CreateClusterParticleFromClusterChildren()

Chaos::FPBDRigidClusteredParticleHandle * Chaos::FRigidClustering::CreateClusterParticleFromClusterChildren ( TArray< FPBDRigidParticleHandle * > &&  Children,
FPBDRigidClusteredParticleHandle Parent,
const FRigidTransform3 ClusterWorldTM,
const FClusterCreationParameters Parameters 
)

CreateClusterParticleFromClusterChildren Children : Rigid body ID to include in the cluster.

◆ CreateClustersFromNewIslands()

TArray< FPBDRigidParticleHandle * > Chaos::FRigidClustering::CreateClustersFromNewIslands ( TArray< FParticleIsland > &  Islands,
FPBDRigidClusteredParticleHandle ClusteredParent 
)
protected

◆ CreateNodeConnection() [1/2]

void Chaos::FRigidClustering::CreateNodeConnection ( FPBDRigidClusteredParticleHandle A,
FPBDRigidClusteredParticleHandle B 
)

◆ CreateNodeConnection() [2/2]

void Chaos::FRigidClustering::CreateNodeConnection ( ParticleHandleTypeA A,
ParticleHandleTypeB B 
)
inline

◆ DeactivateClusterParticle()

TSet< FPBDRigidParticleHandle * > Chaos::FRigidClustering::DeactivateClusterParticle ( FPBDRigidClusteredParticleHandle ClusteredParticle)

◆ DestroyClusterParticle()

FPBDRigidClusteredParticleHandle * Chaos::FRigidClustering::DestroyClusterParticle ( FPBDRigidClusteredParticleHandle ClusteredParticle,
const FClusterDestoryParameters Parameters = FClusterDestoryParameters() 
)

◆ DisableCluster()

void Chaos::FRigidClustering::DisableCluster ( FPBDRigidClusteredParticleHandle ClusteredParticle)

◆ DisableParticle()

void Chaos::FRigidClustering::DisableParticle ( FPBDRigidParticleHandle ParticleToDisable,
bool  bRemoveFromChildrenMap = true 
)

disable a particle and make sure the related internal structure are up to date

◆ FindChildrenWithinRadius()

TArray< FPBDRigidParticleHandle * > Chaos::FRigidClustering::FindChildrenWithinRadius ( const FPBDRigidClusteredParticleHandle ClusteredParticle,
const FVec3 WorldLocation,
FReal  Radius,
bool  bAlwaysReturnClosest 
) const

◆ FindClosestChild()

FPBDRigidParticleHandle * Chaos::FRigidClustering::FindClosestChild ( const FPBDRigidClusteredParticleHandle ClusteredParticle,
const FVec3 WorldLocation 
) const

◆ FindClosestParticle()

FPBDRigidParticleHandle * Chaos::FRigidClustering::FindClosestParticle ( const TArray< FPBDRigidParticleHandle * > &  Particles,
const FVec3 WorldLocation 
)
static

◆ FindIslandsInChildren()

TArray< FRigidClustering::FParticleIsland > Chaos::FRigidClustering::FindIslandsInChildren ( const FPBDRigidClusteredParticleHandle ClusteredParticle,
bool  bTraverseInterclusterEdges 
)
protected

◆ FindParticlesWithinRadius()

TArray< FPBDRigidParticleHandle * > Chaos::FRigidClustering::FindParticlesWithinRadius ( const TArray< FPBDRigidParticleHandle * > &  Particles,
const FVec3 WorldLocation,
FReal  Radius,
bool  bAlwaysReturnClosest 
)
static

◆ FixConnectivityGraphUsingDelaunayTriangulation() [1/2]

void Chaos::FRigidClustering::FixConnectivityGraphUsingDelaunayTriangulation ( Chaos::FPBDRigidClusteredParticleHandle Parent,
const FClusterCreationParameters Parameters = FClusterCreationParameters() 
)
protected

◆ FixConnectivityGraphUsingDelaunayTriangulation() [2/2]

void Chaos::FRigidClustering::FixConnectivityGraphUsingDelaunayTriangulation ( const TArray< FPBDRigidParticleHandle * > &  Particles,
const FClusterCreationParameters Parameters = FClusterCreationParameters(),
const TSet< FPBDRigidParticleHandle * > *  FromParticles = nullptr,
const TSet< FPBDRigidParticleHandle * > *  ToParticles = nullptr 
)
protected

◆ ForceReleaseChildParticleAndParents()

void Chaos::FRigidClustering::ForceReleaseChildParticleAndParents ( FPBDRigidClusteredParticleHandle ChildClusteredParticle,
bool  bTriggerBreakEvents 
)

Force Release a particle at any level by making sure their parent particles are also release if necessary @Warning this will force all particles including the ones in the parent chain to be made breakable

◆ GenerateConnectionGraph() [1/2]

void Chaos::FRigidClustering::GenerateConnectionGraph ( Chaos::FPBDRigidClusteredParticleHandle Parent,
const FClusterCreationParameters Parameters = FClusterCreationParameters() 
)

◆ GenerateConnectionGraph() [2/2]

void Chaos::FRigidClustering::GenerateConnectionGraph ( const TArray< FPBDRigidParticleHandle * > &  Particles,
const FClusterCreationParameters Parameters = FClusterCreationParameters(),
const TSet< FPBDRigidParticleHandle * > *  FromParticles = nullptr,
const TSet< FPBDRigidParticleHandle * > *  ToParticles = nullptr 
)

◆ GetActiveClusterIndex()

FPBDRigidParticleHandle * Chaos::FRigidClustering::GetActiveClusterIndex ( FPBDRigidParticleHandle Child)

◆ GetAllClusterBreakings()

const TArray< FBreakingData > & Chaos::FRigidClustering::GetAllClusterBreakings ( ) const
inline

◆ GetAllClusterCrumblings()

const TArray< FCrumblingData > & Chaos::FRigidClustering::GetAllClusterCrumblings ( ) const
inline

◆ GetChildrenMap() [1/2]

FClusterMap & Chaos::FRigidClustering::GetChildrenMap ( )
inline

GetParentToChildren The parent to children map stores the currently active cluster ids (Particle Indices) as the keys of the map. The value of the map is a pointer to an array constrained rigid bodies.

◆ GetChildrenMap() [2/2]

const FClusterMap & Chaos::FRigidClustering::GetChildrenMap ( ) const
inline

◆ GetChildToParentMap()

const TArrayCollectionArray< FRigidTransform3 > & Chaos::FRigidClustering::GetChildToParentMap ( ) const
inline

◆ GetClusterGroupIndexArray()

TArrayCollectionArray< int32 > & Chaos::FRigidClustering::GetClusterGroupIndexArray ( )
inline

◆ GetClusterIdsArray() [1/2]

TArrayCollectionArray< ClusterId > & Chaos::FRigidClustering::GetClusterIdsArray ( )
inline

◆ GetClusterIdsArray() [2/2]

const TArrayCollectionArray< ClusterId > & Chaos::FRigidClustering::GetClusterIdsArray ( ) const
inline

◆ GetClusterUnionConnectionType()

FClusterCreationParameters::EConnectionMethod Chaos::FRigidClustering::GetClusterUnionConnectionType ( ) const
inline

◆ GetClusterUnionManager() [1/2]

FClusterUnionManager & Chaos::FRigidClustering::GetClusterUnionManager ( )
inline

◆ GetClusterUnionManager() [2/2]

const FClusterUnionManager & Chaos::FRigidClustering::GetClusterUnionManager ( ) const
inline

◆ GetConnectivityEdges()

const TArrayCollectionArray< TArray< TConnectivityEdge< FReal > > > & Chaos::FRigidClustering::GetConnectivityEdges ( ) const
inline

◆ GetDestructionSettings()

const FChaosSolverDestructionSettings & Chaos::FRigidClustering::GetDestructionSettings ( ) const
inline

◆ GetDoGenerateBreakingData()

bool Chaos::FRigidClustering::GetDoGenerateBreakingData ( ) const
inline

◆ GetEvolution() [1/2]

FRigidEvolution & Chaos::FRigidClustering::GetEvolution ( )
inline

◆ GetEvolution() [2/2]

const FRigidEvolution & Chaos::FRigidClustering::GetEvolution ( ) const
inline

◆ GetRigidClusteredFlagsArray()

const TArrayCollectionArray< FRigidClusteredFlags > & Chaos::FRigidClustering::GetRigidClusteredFlagsArray ( ) const
inline

◆ GetStrainArray() [1/2]

TArrayCollectionArray< FRealSingle > & Chaos::FRigidClustering::GetStrainArray ( )
inline

◆ GetStrainArray() [2/2]

const TArrayCollectionArray< FRealSingle > & Chaos::FRigidClustering::GetStrainArray ( ) const
inline

◆ GetTopLevelClusterParents() [1/2]

TSet< Chaos::FPBDRigidClusteredParticleHandle * > & Chaos::FRigidClustering::GetTopLevelClusterParents ( )
inline

◆ GetTopLevelClusterParents() [2/2]

const TSet< Chaos::FPBDRigidClusteredParticleHandle * > & Chaos::FRigidClustering::GetTopLevelClusterParents ( ) const
inline

◆ GetTopLevelClusterParentsStrained()

const TSet< Chaos::FPBDRigidClusteredParticleHandle * > & Chaos::FRigidClustering::GetTopLevelClusterParentsStrained ( ) const
inline

◆ HandleConnectivityOnReleaseClusterParticle()

TSet< FPBDRigidParticleHandle * > Chaos::FRigidClustering::HandleConnectivityOnReleaseClusterParticle ( FPBDRigidClusteredParticleHandle ClusteredParticle,
bool  bCreateNewClusters 
)

Handles leveraging the connectivity edges on the children of the clustered particle to produce the desired effects.

◆ ReleaseClusterParticles() [1/2]

TSet< FPBDRigidParticleHandle * > Chaos::FRigidClustering::ReleaseClusterParticles ( FPBDRigidClusteredParticleHandle ClusteredParticle,
bool  bForceRelease = false 
)

◆ ReleaseClusterParticles() [2/2]

TSet< FPBDRigidParticleHandle * > Chaos::FRigidClustering::ReleaseClusterParticles ( TArray< FPBDRigidParticleHandle * >  ChildrenParticles,
bool  bTriggerBreakEvents = false 
)

◆ ReleaseClusterParticlesImpl()

TSet< FPBDRigidParticleHandle * > Chaos::FRigidClustering::ReleaseClusterParticlesImpl ( FPBDRigidClusteredParticleHandle ClusteredParticle,
bool  bForceRelease,
bool  bCreateNewClusters 
)
protected

◆ ReleaseClusterParticlesNoInternalCluster()

TSet< FPBDRigidParticleHandle * > Chaos::FRigidClustering::ReleaseClusterParticlesNoInternalCluster ( FPBDRigidClusteredParticleHandle ClusteredParticle,
bool  bForceRelease = false 
)

◆ RemoveChildFromParent()

void Chaos::FRigidClustering::RemoveChildFromParent ( FPBDRigidParticleHandle Child,
FPBDRigidClusteredParticleHandle ClusteredParent 
)
protected

◆ RemoveChildFromParentAndChildrenArray()

void Chaos::FRigidClustering::RemoveChildFromParentAndChildrenArray ( FPBDRigidParticleHandle Child,
FPBDRigidClusteredParticleHandle ClusteredParent 
)
protected

◆ RemoveFilteredNodeConnections()

template<typename TFilter >
void Chaos::FRigidClustering::RemoveFilteredNodeConnections ( FPBDRigidClusteredParticleHandle ClusteredChild,
TFilter &&  Filter 
)
inline

◆ RemoveFromMomentumRestoringStructures()

void Chaos::FRigidClustering::RemoveFromMomentumRestoringStructures ( const FPBDRigidParticleHandle ParticleToRemove)
protected

◆ RemoveNodeConnections() [1/2]

void Chaos::FRigidClustering::RemoveNodeConnections ( FPBDRigidClusteredParticleHandle Child)

◆ RemoveNodeConnections() [2/2]

void Chaos::FRigidClustering::RemoveNodeConnections ( FPBDRigidParticleHandle Child)

◆ RemoveParticlesFromCluster()

void Chaos::FRigidClustering::RemoveParticlesFromCluster ( FPBDRigidClusteredParticleHandle Cluster,
const TArray< FPBDRigidParticleHandle * > &  InChildren 
)

Manually remove a set of particles from the cluster.

◆ ResetAllClusterBreakings()

void Chaos::FRigidClustering::ResetAllClusterBreakings ( )
inline

◆ ResetAllClusterCrumblings()

void Chaos::FRigidClustering::ResetAllClusterCrumblings ( )
inline

◆ ResetAllEvents()

void Chaos::FRigidClustering::ResetAllEvents ( )

◆ ResetCollisionImpulseArray()

void Chaos::FRigidClustering::ResetCollisionImpulseArray ( )
protected

◆ RestoreBreakingMomentum()

void Chaos::FRigidClustering::RestoreBreakingMomentum ( )
protected

◆ SendBreakingEvent()

void Chaos::FRigidClustering::SendBreakingEvent ( FPBDRigidClusteredParticleHandle ClusteredParticle,
bool  bFromCrumble 
)
protected

◆ SendCrumblingEvent()

void Chaos::FRigidClustering::SendCrumblingEvent ( FPBDRigidClusteredParticleHandle ClusteredParticle)
protected

◆ SetClusterConnectionFactor()

void Chaos::FRigidClustering::SetClusterConnectionFactor ( FReal  ClusterConnectionFactorIn)
inline

GenerateConnectionGraph Creates a connection graph for the given index using the creation parameters. This will not clear the existing graph.

◆ SetClusterUnionConnectionType()

void Chaos::FRigidClustering::SetClusterUnionConnectionType ( FClusterCreationParameters::EConnectionMethod  ClusterConnectionType)
inline

◆ SetExternalStrain()

void Chaos::FRigidClustering::SetExternalStrain ( FPBDRigidClusteredParticleHandle Particle,
FRealSingle  Strain 
)

◆ SetGenerateClusterBreaking()

void Chaos::FRigidClustering::SetGenerateClusterBreaking ( bool  DoGenerate)
inline

◆ SetInternalStrain()

void Chaos::FRigidClustering::SetInternalStrain ( FPBDRigidClusteredParticleHandle Particle,
FRealSingle  Strain 
)

◆ ShouldThrottleParticleRelease()

bool Chaos::FRigidClustering::ShouldThrottleParticleRelease ( ) const

◆ ShouldUnionsHaveCollisionParticles()

bool Chaos::FRigidClustering::ShouldUnionsHaveCollisionParticles ( )
static

◆ ThrottleReleasedParticlesIfNecessary() [1/2]

void Chaos::FRigidClustering::ThrottleReleasedParticlesIfNecessary ( TArray< FPBDRigidParticleHandle * > &  Particles)

◆ ThrottleReleasedParticlesIfNecessary() [2/2]

void Chaos::FRigidClustering::ThrottleReleasedParticlesIfNecessary ( TSet< FPBDRigidParticleHandle * > &  Particles)

◆ TrackBreakingCollision()

void Chaos::FRigidClustering::TrackBreakingCollision ( FPBDRigidClusteredParticleHandle ClusteredParticle)
protected

◆ UnionClusterGroups()

void Chaos::FRigidClustering::UnionClusterGroups ( )

UnionClusterGroups Clusters that share a group index should be unioned into a single cluster prior to simulation. The GroupIndex should be set on creation, and never touched by the client again.

◆ UpdateClusterParticlePropertiesFromChildren()

void Chaos::FRigidClustering::UpdateClusterParticlePropertiesFromChildren ( FPBDRigidClusteredParticleHandle Cluster,
const FRigidHandleArray Children,
const TMap< FPBDRigidParticleHandle *, FPBDRigidParticleHandle * > &  ChildToParentMap 
)
protected

This function is a bit more versatile than the name suggests. This function can either be used to update the cluster properties incrementally or entirely rebuild the properties all over again. This all depends on whether the input children is either 1) the new children or 2) all the children as well as what those initial properties are set to.

◆ UpdateConnectivityGraphUsingDelaunayTriangulation() [1/2]

void Chaos::FRigidClustering::UpdateConnectivityGraphUsingDelaunayTriangulation ( const Chaos::FPBDRigidClusteredParticleHandle Parent,
const FClusterCreationParameters Parameters = FClusterCreationParameters() 
)
protected

◆ UpdateConnectivityGraphUsingDelaunayTriangulation() [2/2]

void Chaos::FRigidClustering::UpdateConnectivityGraphUsingDelaunayTriangulation ( const TArray< FPBDRigidParticleHandle * > &  Particles,
const FClusterCreationParameters Parameters = FClusterCreationParameters(),
const TSet< FPBDRigidParticleHandle * > *  FromParticles = nullptr,
const TSet< FPBDRigidParticleHandle * > *  ToParticles = nullptr 
)
protected

◆ UpdateConnectivityGraphUsingDelaunayTriangulationWithBoundsOverlaps() [1/2]

void Chaos::FRigidClustering::UpdateConnectivityGraphUsingDelaunayTriangulationWithBoundsOverlaps ( const Chaos::FPBDRigidClusteredParticleHandle Parent,
const FClusterCreationParameters Parameters = FClusterCreationParameters() 
)
protected

◆ UpdateConnectivityGraphUsingDelaunayTriangulationWithBoundsOverlaps() [2/2]

void Chaos::FRigidClustering::UpdateConnectivityGraphUsingDelaunayTriangulationWithBoundsOverlaps ( const TArray< FPBDRigidParticleHandle * > &  Particles,
const FClusterCreationParameters Parameters = FClusterCreationParameters(),
const TSet< FPBDRigidParticleHandle * > *  FromParticles = nullptr,
const TSet< FPBDRigidParticleHandle * > *  ToParticles = nullptr 
)
protected

◆ UpdateConnectivityGraphUsingPointImplicit() [1/2]

void Chaos::FRigidClustering::UpdateConnectivityGraphUsingPointImplicit ( Chaos::FPBDRigidClusteredParticleHandle Parent,
const FClusterCreationParameters Parameters = FClusterCreationParameters() 
)
protected

◆ UpdateConnectivityGraphUsingPointImplicit() [2/2]

void Chaos::FRigidClustering::UpdateConnectivityGraphUsingPointImplicit ( const TArray< FPBDRigidParticleHandle * > &  Particles,
FReal  CollisionThicknessPercent,
const TSet< FPBDRigidParticleHandle * > *  FromParticles = nullptr,
const TSet< FPBDRigidParticleHandle * > *  ToParticles = nullptr 
)
protected

◆ UpdateTopLevelParticle()

void Chaos::FRigidClustering::UpdateTopLevelParticle ( FPBDRigidClusteredParticleHandle Particle)
protected

◆ Visitor()

void Chaos::FRigidClustering::Visitor ( FClusterHandle  Cluster,
FVisitorFunction  Function 
)

Visitor Walk all the decendents of the current cluster and execute FVisitorFunction. FVisitorFunction = [](FRigidClustering& Clustering, FRigidHandle RigidHandle){}


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