120 template<
typename SolverParticlesOrRange>
132 return DynamicSubMesh;
137 return KinematicColliderSubMesh;
142 return FullMeshToSubMeshIndices[
FullMeshIndex].SubMeshType == ESubMeshType::Dynamic;
147 return FullMeshToSubMeshIndices[
FullMeshIndex].SubMeshType == ESubMeshType::Kinematic;
174 enum struct ESubMeshType :
int32
180 struct FFullToSubMeshIndex
182 int32 SubMeshIndex : 30;
183 ESubMeshType SubMeshType : 2;
197 const int32 InOffset,
213 , bCollidableSubMeshDirty(
true)
232 const
int32 InOffset,
240 const int32 InOffset,
252 , bOnlyCollideWithKinematics(
false)
253 , bSelfCollideAgainstAllKinematicVertices(
false)
254 , bCollidableSubMeshDirty(
true)
276 if (bUseSelfIntersections)
297 bGlobalIntersectionAnalysis = bContourMinimization =
false;
298 NumContourMinimizationPostSteps = 0;
304 if (
bNewValue != bOnlyCollideWithKinematics)
307 bCollidableSubMeshDirty =
true;
314 if (
bNewValue != bSelfCollideAgainstAllKinematicVertices)
316 bSelfCollideAgainstAllKinematicVertices =
bNewValue;
317 bCollidableSubMeshDirty =
true;
325 bCollidableSubMeshDirty =
true;
329 if (!DisabledFaces.IsEmpty())
331 DisabledFaces.Reset();
332 bCollidableSubMeshDirty =
true;
341 bCollidableSubMeshDirty =
true;
345 if (!EnabledKinematicFaces.IsEmpty())
347 EnabledKinematicFaces.Reset();
348 bCollidableSubMeshDirty =
true;
360 template<
typename SolverParticlesOrRange>
366 template<
typename SolverParticlesOrRange>
369 template<
typename SolverParticlesOrRange>
375 template<
typename SolverParticlesOrRange>
378 template<
typename SolverParticlesOrRange>
386 return NumContourMinimizationPostSteps;
392 UE_DEPRECATED(5.4,
"Use GetDynamicSpatialHash or GetKinematicColliderSpatialHash")
414 bool bUseSelfIntersections;
415 bool bGlobalIntersectionAnalysis;
416 bool bContourMinimization;
417 int32 NumContourMinimizationPostSteps = 0;
418 bool bUseGlobalPostStepContours =
true;
419 bool bOnlyCollideWithKinematics;
420 bool bSelfCollideAgainstAllKinematicVertices;
424 bool bCollidableSubMeshDirty =
true;
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define check(expr)
Definition AssertionMacros.h:314
#define UE_CHAOS_DECLARE_INDEXLESS_PROPERTYCOLLECTION_NAME(PropertyName, Type)
Definition CollectionPropertyFacade.h:853
#define UE_CHAOS_DECLARE_INDEXED_PROPERTYCOLLECTION_NAME(PropertyName, Type)
Definition CollectionPropertyFacade.h:893
#define UE_CHAOS_DECLARE_PROPERTYCOLLECTION_NAME(PropertyName, Type)
Definition CollectionPropertyFacade.h:969
@ ForceInit
Definition CoreMiscDefines.h:155
#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
return true
Definition ExternalRpcRegistry.cpp:601
void Init()
Definition LockFreeList.h:4
Definition TriangleMesh.h:24
Definition CollectionPropertyFacade.h:49
Definition PBDFlatWeightMap.h:98
Definition PBDTriangleMeshCollisions.h:114
FTriangleSubMesh(const FTriangleMesh &InFullMesh)
Definition PBDTriangleMeshCollisions.h:116
int32 GetSubMeshElementIndex(int32 FullMeshIndex) const
Definition PBDTriangleMeshCollisions.h:150
bool IsElementDynamic(int32 FullMeshIndex) const
Definition PBDTriangleMeshCollisions.h:140
const TArray< int32 > & GetDynamicVertices() const
Definition PBDTriangleMeshCollisions.h:166
bool IsElementKinematicCollider(int32 FullMeshIndex) const
Definition PBDTriangleMeshCollisions.h:145
const FTriangleMesh & GetKinematicColliderSubMesh() const
Definition PBDTriangleMeshCollisions.h:135
int32 GetFullMeshElementIndexFromDynamicElement(int32 DynamicMeshIndex) const
Definition PBDTriangleMeshCollisions.h:156
int32 GetFullMeshElementIndexFromKinematicElement(int32 KinematicMeshIndex) const
Definition PBDTriangleMeshCollisions.h:161
const FTriangleMesh & GetFullMesh() const
Definition PBDTriangleMeshCollisions.h:125
void InitAllDynamic()
Definition PBDTriangleMeshCollisions.cpp:1362
const FTriangleMesh & GetDynamicSubMesh() const
Definition PBDTriangleMeshCollisions.h:130
Definition PBDTriangleMeshCollisions.h:18
UE_CHAOS_DECLARE_INDEXLESS_PROPERTYCOLLECTION_NAME(UseSelfIntersections, bool)
FPBDTriangleMeshCollisions(const int32 InOffset, const int32 InNumParticles, const TMap< FString, const TSet< int32 > * > &FaceSets, const FTriangleMesh &InTriangleMesh, const FCollectionPropertyConstFacade &PropertyCollection)
Definition PBDTriangleMeshCollisions.h:196
const FTriangleMesh::TSpatialHashType< FSolverReal > & GetKinematicColliderSpatialHash() const
Definition PBDTriangleMeshCollisions.h:395
const FTriangleSubMesh & GetCollidableSubMesh() const
Definition PBDTriangleMeshCollisions.h:391
const TArray< FContourMinimizationIntersection > & GetContourMinimizationIntersections() const
Definition PBDTriangleMeshCollisions.h:396
void InitFlesh(const SolverParticlesOrRange &Particles, const FSolverReal MinProximityQueryRadius=(FSolverReal) 0., const bool bUseFullMesh=false)
Definition PBDTriangleMeshCollisions.h:370
void Init(const SolverParticlesOrRange &Particles, const FSolverReal MinProximityQueryRadius=(FSolverReal) 0.)
Definition PBDTriangleMeshCollisions.h:361
const TArray< FGIAColor > & GetTriangleGIAColors() const
Definition PBDTriangleMeshCollisions.h:398
CHAOS_API void Init(const SolverParticlesOrRange &Particles, const FPBDFlatWeightMap &ThicknessMap)
const FTriangleMesh::TSpatialHashType< FSolverReal > & GetSpatialHash() const
Definition PBDTriangleMeshCollisions.h:393
const TArray< FContourType > & GetIntersectionContourTypes() const
Definition PBDTriangleMeshCollisions.h:400
int32 GetNumContourMinimizationPostSteps() const
Definition PBDTriangleMeshCollisions.h:384
const TArray< TArray< FBarycentricPoint > > & GetIntersectionContourPoints() const
Definition PBDTriangleMeshCollisions.h:399
void SetContourMinimization(bool bInContourMinimization)
Definition PBDTriangleMeshCollisions.h:382
static bool IsEnabled(const FCollectionPropertyConstFacade &PropertyCollection)
Definition PBDTriangleMeshCollisions.h:191
CHAOS_API void InitFlesh(const SolverParticlesOrRange &Particles, const FPBDFlatWeightMap &ThicknessMap, const bool bUseFullMesh=false)
FContourType
Definition PBDTriangleMeshCollisions.h:103
CHAOS_API void PostStepInit(const SolverParticlesOrRange &Particles)
const TConstArrayView< FGIAColor > GetVertexGIAColors() const
Definition PBDTriangleMeshCollisions.h:397
void SetGlobalIntersectionAnalysis(bool bInGlobalIntersectionAnalysis)
Definition PBDTriangleMeshCollisions.h:381
virtual ~FPBDTriangleMeshCollisions()=default
const TArray< FContourMinimizationIntersection > & GetPostStepContourMinimizationIntersections() const
Definition PBDTriangleMeshCollisions.h:404
bool GetCollidableSubMeshDirty() const
Definition PBDTriangleMeshCollisions.h:389
FPBDTriangleMeshCollisions(const int32 InOffset, const int32 InNumParticles, const FTriangleMesh &InTriangleMesh, bool bInGlobalIntersectionAnalysis, bool bInContourMinimization)
Definition PBDTriangleMeshCollisions.h:239
const TArray< TArray< FBarycentricPoint > > & GetPostStepIntersectionContourPoints() const
Definition PBDTriangleMeshCollisions.h:405
const FTriangleMesh::TSpatialHashType< FSolverReal > & GetDynamicSpatialHash() const
Definition PBDTriangleMeshCollisions.h:394
void SetProperties(const FCollectionPropertyConstFacade &PropertyCollection, const TMap< FString, const TSet< int32 > * > &FaceSets)
Definition PBDTriangleMeshCollisions.h:268
Definition HierarchicalSpatialHash.h:214
Definition UnrealString.h.inl:34
Definition CollectionEmbeddedSpringConstraintFacade.cpp:6
TVector< FSolverReal, 2 > FSolverVec2
Definition PBDSoftsEvolutionFwd.h:32
FRealSingle FSolverReal
Definition PBDSoftsEvolutionFwd.h:31
@ Kinematic
Definition ChaosDeformableConstraintsProxy.h:13
@ Dynamic
Definition SpatialAccelerationCollection.h:22
@ false
Definition radaudio_common.h:23
Definition PBDTriangleMeshCollisions.h:97
TVec3< int32 > Vertices
Definition PBDTriangleMeshCollisions.h:99
FSolverVec2 Bary
Definition PBDTriangleMeshCollisions.h:98
Definition PBDTriangleMeshCollisions.h:21
TVec3< int32 > FaceVertices
Definition PBDTriangleMeshCollisions.h:23
FSolverVec3 GlobalGradientVector
Definition PBDTriangleMeshCollisions.h:25
FSolverVec3 LocalGradientVector
Definition PBDTriangleMeshCollisions.h:24
TVec2< int32 > EdgeVertices
Definition PBDTriangleMeshCollisions.h:22
Definition PBDTriangleMeshCollisions.h:35
static constexpr int32 LoopBits
Definition PBDTriangleMeshCollisions.h:40
void SetLoop()
Definition PBDTriangleMeshCollisions.h:69
bool IsLoop() const
Definition PBDTriangleMeshCollisions.h:64
static bool ShouldFlipNormal(const FGIAColor &Color0, const FGIAColor &Color1)
Definition PBDTriangleMeshCollisions.h:87
void SetBoundary()
Definition PBDTriangleMeshCollisions.h:74
static constexpr int32 NonLoopMask
Definition PBDTriangleMeshCollisions.h:41
int32 ContourIndexBits
Definition PBDTriangleMeshCollisions.h:36
static constexpr int32 LoopContourIndex
Definition PBDTriangleMeshCollisions.h:39
static constexpr int32 BoundaryContourIndex
Definition PBDTriangleMeshCollisions.h:42
bool HasContourColorSet(int32 ContourIndex) const
Definition PBDTriangleMeshCollisions.h:58
bool IsBoundary() const
Definition PBDTriangleMeshCollisions.h:79
int32 ColorBits
Definition PBDTriangleMeshCollisions.h:37
void SetContourColor(int32 ContourIndex, bool bIsColorB)
Definition PBDTriangleMeshCollisions.h:44
Definition PBDTriangleMeshCollisions.cpp:1273