15#define MIN_NUM_OBJECTS 5
23 for (
int i = 0; i < 3; ++i)
34 const bool bIsCCD =
InParticles.ControlFlags(BodyIndex).GetCCDEnabled();
36 if (!bIsCCD && (BoundsVelocityInflation ==
FReal(0)))
47 BoundsVelocityInflation = FMath::Max(
FReal(1), BoundsVelocityInflation);
58template <
typename THandle>
61 const typename THandle::FDynamicParticleHandleType* RigidParticle = ParticleHandle.CastToRigidParticle();
62 const typename THandle::FKinematicParticleHandleType*
KinematicParticle = ParticleHandle.CastToKinematicParticle();
63 const bool bIsBounded = ParticleHandle.HasBounds();
64 const bool bIsCCD = (RigidParticle !=
nullptr) && RigidParticle->CCDEnabled();
66 if (!bIsCCD && (BoundsVelocityInflation ==
FReal(0)))
79 BoundsVelocityInflation = FMath::Max(
FReal(1), BoundsVelocityInflation);
96template<
class OBJECT_ARRAY>
99 return Objects[i]->HasBoundingBox();
102template<
class T,
int d>
108template<
class T,
int d>
114template<
class T,
int d>
124template<
typename Generic>
127 return Item.HasBoundingBox();
130template<
typename T,
int d,
bool bPersistent>
133 return Handle.HasBounds();
136template<
typename T,
int d,
bool bPersistent>
139 return Handle.HasBounds();
142template<
class OBJECT_ARRAY,
class T,
int d>
148template<
class T,
int d>
154template<
class T,
int d>
160template<
class T,
int d>
166template<
class T,
int d>
173template<
class T,
int d>
182template<
class T,
int d>
210template<
typename THandle,
typename T,
int d,
bool bPersistent>
219 const auto& LocalBoundingBox =
Handle.Geometry()->BoundingBox();
220 return LocalBoundingBox.TransformedBox(LocalToWorld);
230 return LocalBoundingBox.TransformedBox(LocalToWorld);
233template<
typename T,
int d,
bool bPersistent>
236 return Handle.WorldSpaceInflatedBounds();
239template<
typename T,
int d,
bool bPersistent>
242 return Handle.WorldSpaceInflatedBounds();
245template<
typename T,
typename GenericEntry>
252template<
typename OBJECT_ARRAY,
typename T,
int d>
256 for (
int32 i = 1; i < AllObjects.
Num(); ++i)
279template<
typename T,
int d>
285 for (
int32 i = 0; i < d; ++i)
293 for (
int32 i = 0; i < d; ++i)
295 Counts[i].Key +=
Point[i] > 0 ? 0 : 1;
296 Counts[i].Value +=
Point[i] > 0 ? 1 : 0;
302 for (
int32 i = 1; i < AllObjects.
Num(); ++i)
328template<
class OBJECT_ARRAY,
class T,
int d>
334template<
class T,
int d>
340 for (
int32 i : AllObjects)
347template<
class T,
int d>
353 for (
int32 i : AllObjects)
360template<
class T,
int d>
365 for (
int32 i = 0; i < AllObjects.
Num(); ++i)
367 const int32 BodyIndex = AllObjects[i];
383template<
typename ParticleView,
typename T,
int d>
394 if (
const auto PBDRigid = Particle.AsDynamic())
403template<
typename ParticleView,
typename T,
int d>
416template<
class OBJECT_ARRAY>
419 return Objects.Num();
422template<
class T,
int d>
425 return Objects.
Size();
428template<
class T,
int d>
434template<
class T,
int d>
440template<
class OBJECT_ARRAY>
446template<
class T,
int d>
452template<
class T,
int d>
#define check(expr)
Definition AssertionMacros.h:314
#define ensure( InExpression)
Definition AssertionMacros.h:464
#define MIN_NUM_OBJECTS
Definition BoundingVolumeUtilities.h:15
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
uint32 Size
Definition VulkanMemory.cpp:4034
bool HasBoundingBox() const
Definition ImplicitObject.h:275
virtual CHAOS_API const FAABB3 BoundingBox() const
Definition ImplicitObject.cpp:118
FORCEINLINE const TAABB< T, d > & BoundingBox() const
Definition AABB.h:156
FORCEINLINE void GrowToInclude(const TVector< T, d > &V)
Definition AABB.h:393
CHAOSCORE_API TAABB< T, d > TransformedAABB(const FTransform &) const
Definition AABB.cpp:385
uint32 Size() const
Definition ArrayCollection.h:66
Definition ParticleHandle.h:436
Definition GeometryParticles.h:152
Definition ParticleHandle.h:987
Definition PBDRigidParticles.h:22
FORCEINLINE const TVector< T, d > & GetP(const int32 index) const
Definition PBDRigidParticles.h:66
FORCEINLINE const TRotation< T, d > GetQ(const int32 index) const
Definition PBDRigidParticles.h:73
Definition Particles.h:32
const TVector< T, d > & GetX(const int32 Index) const
Definition Particles.h:156
FORCEINLINE const bool Disabled(const int32 Index) const
Definition RigidParticles.h:230
FORCEINLINE const TUniquePtr< TBVHParticles< T, d > > & CollisionParticles(const int32 Index) const
Definition RigidParticles.h:218
FORCEINLINE const TRotation< T, d > GetR(const int32 Index) const
Definition SimpleGeometryParticles.h:54
FORCEINLINE const FImplicitObjectPtr & GetGeometry(const int32 Index) const
Definition SimpleGeometryParticles.h:61
UE_REWRITE SizeType Num() const
Definition Array.h:1144
Definition UnrealString.h.inl:34
Definition SkeletalMeshComponent.h:307
const TAABB< T, d > GetWorldSpaceBoundingBox(const OBJECT_ARRAY &Objects, const int32 i, const TMap< int32, TAABB< T, d > > &WorldSpaceBoxes)
Definition BoundingVolumeUtilities.h:143
void ParticlesParallelFor(const TView &Particles, const ContextCreatorType &ContextCreator, const Lambda &Func, bool bForceSingleThreaded=false)
Definition ParticleIterator.h:99
TAABB< T, d > ComputeWorldSpaceBoundingBoxForHandle(const THandle &Handle)
Definition BoundingVolumeUtilities.h:211
TAABB< T, d > ComputeWorldSpaceBoundingBox(const TParticles< T, d > &Objects, const int32 i, bool bUseVelocity=false, T Dt=0)
Definition BoundingVolumeUtilities.h:167
FRealDouble FReal
Definition Real.h:22
int32 GetObjectCount(const OBJECT_ARRAY &Objects)
Definition BoundingVolumeUtilities.h:417
bool HasBoundingBox(const OBJECT_ARRAY &Objects, const int32 i)
Definition BoundingVolumeUtilities.h:97
TVector< FReal, 3 > FVec3
Definition Core.h:17
bool IsDisabled(const OBJECT_ARRAY &Objects, const uint32 Index)
Definition BoundingVolumeUtilities.h:441
@ Generic
Definition ParticlePairMidPhase.h:33
void ComputeAllWorldSpaceBoundingBoxes(const OBJECT_ARRAY &Objects, const TArray< int32 > &AllObjects, const bool bUseVelocity, const T Dt, TMap< int32, TAABB< T, d > > &WorldSpaceBoxes)
Definition BoundingVolumeUtilities.h:329
FVec3 ComputeBoundsThickness(FVec3 Vel, FReal Dt, FReal MinBoundsThickness, FReal MaxBoundsThickness, FReal BoundsVelocityInflation)
Definition BoundingVolumeUtilities.h:21
FRealSingle Chaos_Bounds_MaxInflationScale
Definition BoundingVolumeHierarchy.cpp:18
const TAABB< T, d > ComputeGlobalBoxAndSplitAxis(const OBJECT_ARRAY &Objects, const TArray< int32 > &AllObjects, const TMap< int32, TAABB< T, d > > &WorldSpaceBoxes, bool bAllowMultipleSplitting, int32 &OutAxis)
Definition BoundingVolumeUtilities.h:253
U16 Index
Definition radfft.cpp:71
Definition BoundingVolumeUtilities.h:377
auto Requires() -> decltype(T::THandleType)
static constexpr UE_FORCEINLINE_HINT T Clamp(const T X, const T MinValue, const T MaxValue)
Definition UnrealMathUtility.h:592
Definition NumericLimits.h:41