14#ifndef ENABLE_UNINITIALIZED_BOX_DIAGNOSTIC
15#define ENABLE_UNINITIALIZED_BOX_DIAGNOSTIC 0
18#ifndef ENABLE_BOX_DIAGNOSTIC_CHECKS
19#define ENABLE_BOX_DIAGNOSTIC_CHECKS (ENABLE_UNINITIALIZED_BOX_DIAGNOSTIC || ENABLE_NAN_DIAGNOSTIC)
62#if ENABLE_UNINITIALIZED_BOX_DIAGNOSTIC
93#if ENABLE_BOX_DIAGNOSTIC_CHECKS
98#if ENABLE_UNINITIALIZED_BOX_DIAGNOSTIC
123 template<
typename FArg>
130 static_assert(
sizeof(
FArg) <=
sizeof(T),
"Losing precision when constructing a box of floats from vectors of doubles");
165 template<
typename FArg UE_REQUIRES(!std::is_same_v<T, FArg>)>
199 return !(*
this ==
Other);
411 return 0.5f * (
Max -
Min);
514 return ((In.
X >=
Min.X) && (In.
X <=
Max.X) && (In.
Y >=
Min.Y) && (In.
Y <=
Max.Y) && (In.
Z >=
Min.Z) && (In.
Z <=
Max.Z));
560 return ((In.
X >
Min.X) && (In.
X <
Max.X) && (In.
Y >
Min.Y) && (In.
Y <
Max.Y));
576 return ((In.
X >=
Min.X) && (In.
X <=
Max.X) && (In.
Y >=
Min.Y) && (In.
Y <=
Max.Y));
669 return Ar <<
Box.Min <<
Box.Max <<
Box.IsValid;
698 if constexpr (std::is_same_v<T, float>)
702 else if constexpr (std::is_same_v<T, double>)
708 static_assert(
sizeof(T) == 0,
"Unimplemented");
750 Other.DiagnosticCheck();
760 else if (
Other.IsValid)
779 ClosestPoint.
X =
Min.X;
783 ClosestPoint.
X =
Max.X;
789 ClosestPoint.
Y =
Min.Y;
793 ClosestPoint.
Y =
Max.Y;
799 ClosestPoint.
Z =
Min.Z;
803 ClosestPoint.
Z =
Max.Z;
815 Other.DiagnosticCheck();
841 Other.DiagnosticCheck();
860 return FString::Printf(
TEXT(
"IsValid=%s, Min=(%s), Max=(%s)"),
IsValid ?
TEXT(
"true") :
TEXT(
"false"), *
Min.ToString(), *
Max.ToString());
866 return IsValid ? FString::Printf(
TEXT(
"Min=(%s), Max=(%s)"), *
Min.ToString(), *
Max.ToString()) :
TEXT(
"IsValid=false");
946 GetVertices(Vertices);
969 GetVertices(Vertices);
985 if (Intersect(
Other) ==
false)
1010 return !
Box.IsValid ? 0
1028template<
typename FReal>
1040template<
typename FReal>
1052template<
typename FReal>
1065 if(Start.X <
Box.Min.X)
1077 else if(Start.X >
Box.Max.X)
1094 if(Start.Y <
Box.Min.Y)
1106 else if(Start.Y >
Box.Max.Y)
1123 if(Start.Z <
Box.Min.Z)
1135 else if(Start.Z >
Box.Max.Z)
1156 if(MaxTime >= 0.0f && MaxTime <= 1.0f)
1189template<
typename FReal>
1193 FReal DistSquared = 0.f;
1227template<
typename FReal>
#define ensureAlwaysMsgf(InExpression, InFormat,...)
Definition AssertionMacros.h:467
#define check(expr)
Definition AssertionMacros.h:314
ENoInit
Definition CoreMiscDefines.h:158
EForceInit
Definition CoreMiscDefines.h:154
@ ForceInit
Definition CoreMiscDefines.h:155
T ComputeSquaredDistanceFromBoxToPoint(const UE::Math::TVector< T > &Mins, const UE::Math::TVector< T > &Maxs, const UE::Math::TVector< U > &Point)
Definition Vector.h:2630
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define UE_SERIALIZE_VARIANT_FROM_MISMATCHED_TAG(AR_OR_SLOT, ALIAS, TYPE, ALT_TYPE)
Definition LargeWorldCoordinatesSerializer.h:9
#define UE_DECLARE_LWC_TYPE(...)
Definition LargeWorldCoordinates.h:27
#define logOrEnsureNanError(_FormatString_,...)
Definition LogMacros.h:436
FVector MaxVector(const FVector &VectorA, const FVector &VectorB)
Definition PhysicsFieldComponent.cpp:172
FVector MinVector(const FVector &VectorA, const FVector &VectorB)
Definition PhysicsFieldComponent.cpp:167
#define SA_VALUE(Name, Value)
Definition StructuredArchiveNameHelpers.h:77
constexpr uint32 HashCombineFast(uint32 A, uint32 B)
Definition TypeHash.h:74
FORCEINLINE VectorRegister4Float VectorSubtract(const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2)
Definition UnrealMathFPU.h:731
FORCEINLINE VectorRegister4Float VectorSetFloat1(float F)
Definition UnrealMathFPU.h:518
FORCEINLINE VectorRegister4Float VectorMultiply(const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2)
Definition UnrealMathFPU.h:758
VectorRegister4Float VectorLoadAligned(const float *Ptr)
Definition UnrealMathFPU.h:451
FORCEINLINE VectorRegister4Float VectorMultiplyAdd(const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2, const VectorRegister4Float &Vec3)
Definition UnrealMathFPU.h:786
FORCEINLINE VectorRegister4Float VectorAbs(const VectorRegister4Float &Vec)
Definition UnrealMathFPU.h:661
FORCEINLINE VectorRegister4Float VectorAdd(const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2)
Definition UnrealMathFPU.h:704
FORCEINLINE void VectorStoreFloat3(const VectorRegister4Float &Vec, float *Dst)
Definition UnrealMathFPU.h:594
#define VectorReplicate(Vec, ElementIndex)
Definition UnrealMathFPU.h:627
#define UE_KINDA_SMALL_NUMBER
Definition UnrealMathUtility.h:131
FORCEINLINE VectorRegister4Float VectorLoadFloat3_W0(const float *Ptr)
VectorLoadFloat3_W0.
Definition UnrealMathVectorCommon.h.inl:129
#define UE_ARRAY_COUNT(array)
Definition UnrealTemplate.h:212
typename UE::Math::VectorRegisterPrivate::TVectorRegisterTypeHelper< T >::Type TVectorRegisterType
Definition VectorRegister.h:49
uint32 Offset
Definition VulkanMemory.cpp:4033
bool ContainsNaN() const
Definition Vector.h:188
Definition Archive.h:1208
Definition NameTypes.h:617
Definition StructuredArchiveSlots.h:144
Definition StructuredArchiveSlots.h:52
UE_API FStructuredArchiveRecord EnterRecord()
Definition StructuredArchiveSlots.h:252
uint32 GetTypeHash(const TBox< T > &Box)
Definition Box.h:1008
U16 Index
Definition radfft.cpp:71
static bool PointBoxIntersection(const UE::Math::TVector< FReal > &Point, const UE::Math::TBox< FReal > &Box)
Definition Box.h:1030
static bool SphereAABBIntersection(const UE::Math::TVector< FReal > &SphereCenter, const FReal RadiusSquared, const UE::Math::TBox< FReal > &AABB)
Definition Box.h:1190
static constexpr UE_FORCEINLINE_HINT T Square(const T A)
Definition UnrealMathUtility.h:578
static bool LineBoxIntersection(const UE::Math::TBox< FReal > &Box, const UE::Math::TVector< FReal > &Start, const UE::Math::TVector< FReal > &End, const UE::Math::TVector< FReal > &Direction)
Definition Box.h:1042
static constexpr UE_FORCEINLINE_HINT T Max3(const T A, const T B, const T C)
Definition UnrealMathUtility.h:551
Definition IsPODType.h:12
@ Value
Definition IsPODType.h:13
Definition IsUECoreType.h:19
@ Value
Definition IsUECoreType.h:20
bool IsInside(const TVector< T > &In) const
Definition Box.h:495
bool ContainsNaN() const
Definition Box.h:112
TBox(const TSphere< T > &Sphere)
Definition Box.h:176
UE_FORCEINLINE_HINT bool IsInsideOrOn(const TBox< T > &Other) const
Definition Box.h:542
UE_FORCEINLINE_HINT bool operator!=(const TBox< T > &Other) const
Definition Box.h:197
TVector< T > GetCenter() const
Definition Box.h:375
UE_FORCEINLINE_HINT TBox< T > operator+(const TBox< T > &Other) const
Definition Box.h:249
void GetCenterAndExtents(TVector< T > &Center, TVector< T > &Extents) const
Definition Box.h:388
friend FArchive & operator<<(FArchive &Ar, TBox< T > &Box)
Definition Box.h:667
bool IsInsideXY(const TVector< T > &In) const
Definition Box.h:557
UE_FORCEINLINE_HINT TBox< T > ExpandBy(T W) const
Definition Box.h:318
T FReal
Definition Box.h:36
static TBox< T > BuildAABB(const TVector< T > &Origin, const TVector< T > &Extent)
Definition Box.h:651
TBox(const TVector< T > *Points, const int32 Count)
Definition Box.h:149
bool IntersectXY(const TBox< T > &Other) const
Definition Box.h:837
const TVector< T > & operator[](int32 Index) const
Definition Box.h:277
T ComputeSquaredDistanceToBox(const TBox< T > &Box) const
Definition Box.h:305
TBox< T > MoveTo(const TVector< T > &Destination) const
Definition Box.h:363
constexpr TBox()
Definition Box.h:61
friend void operator<<(FStructuredArchive::FSlot Slot, TBox< T > &Box)
Definition Box.h:678
TBox< T > & operator+=(const TVector< T > &Other)
Definition Box.h:718
bool Serialize(FArchive &Ar)
Definition Box.h:684
TBox< T > InverseTransformBy(const TTransform< T > &M) const
Definition Box.h:937
TBox< T > TransformBy(const TMatrix< T > &M) const
Definition Box.h:871
uint8 IsValid
Definition Box.h:45
UE_FORCEINLINE_HINT bool IsInside(const TBox< T > &Other) const
Definition Box.h:527
TBox(const TVector4< T > &InMin, const TVector4< T > &InMax)
Definition Box.h:135
TBox(const TVector< FArg > &InMin, const TVector< FArg > &InMax)
Definition Box.h:124
TBox< T > TransformBy(const TTransform< T > &M) const
Definition Box.h:916
UE_FORCEINLINE_HINT T ComputeSquaredDistanceToPoint(const TVector< T > &Point) const
Definition Box.h:297
void Init()
Definition Box.h:441
void GetVertices(TVector< T >(&Vertices)[8]) const
Definition Box.h:922
UE_FORCEINLINE_HINT TBox< T > ExpandBy(const TVector< T > &V) const
Definition Box.h:329
TVector< T > GetClosestPointTo(const TVector< T > &Point) const
Definition Box.h:769
TVector< T > & operator[](int32 Index)
Definition Box.h:260
TBox< T > ExpandBy(const TVector< T > &Neg, const TVector< T > &Pos) const
Definition Box.h:341
TVector< T > GetExtent() const
Definition Box.h:408
bool Equals(const TBox< T > &Other, T Tolerance=UE_KINDA_SMALL_NUMBER) const
Definition Box.h:211
UE_FORCEINLINE_HINT bool operator==(const TBox< T > &Other) const
Definition Box.h:187
TBox< T > Overlap(const TBox< T > &Other) const
Definition Box.h:983
TBox< T > & operator+=(const TBox< T > &Other)
Definition Box.h:744
constexpr TBox(ENoInit)
Definition Box.h:75
TBox(const TBox< FArg > &From)
Definition Box.h:166
TVector< T > GetSize() const
Definition Box.h:420
bool IsInsideOrOnXY(const TVector< T > &In) const
Definition Box.h:573
FString ToString() const
Definition Box.h:858
bool IsInsideOrOn(const TVector< T > &In) const
Definition Box.h:511
FString ToCompactString() const
Definition Box.h:864
UE_FORCEINLINE_HINT bool IsInsideXY(const TBox< T > &Other) const
Definition Box.h:589
constexpr TBox(EForceInit)
Definition Box.h:80
constexpr TBox(EForceInit, TBoxConstInit)
Definition Box.h:88
UE_FORCEINLINE_HINT TBox< T > operator+(const TVector< T > &Other) const
Definition Box.h:230
bool Serialize(FStructuredArchive::FSlot Slot)
Definition Box.h:690
TVector< T > Min
Definition Box.h:39
UE_FORCEINLINE_HINT void DiagnosticCheck() const
Definition Box.h:109
TVector< T > Max
Definition Box.h:42
TBox(const TArray< TVector< T > > &Points)
Definition Box.h:162
bool SerializeFromMismatchedTag(FName StructTag, FArchive &Ar)
Definition Box.h:696
bool Intersect(const TBox< T > &Other) const
Definition Box.h:811
T GetVolume() const
Definition Box.h:432
TBox< T > TransformProjectBy(const TMatrix< T > &ProjM) const
Definition Box.h:960
UE_FORCEINLINE_HINT TBox< T > ShiftBy(const TVector< T > &Offset) const
Definition Box.h:352
T M[4][4]
Definition Matrix.h:49
T W
Definition Vector4.h:52
T Z
Definition Vector.h:68
T Y
Definition Vector.h:65
static UE_FORCEINLINE_HINT T DotProduct(const TVector< T > &A, const TVector< T > &B)
Definition Vector.h:1559
static TVector< T > Max(const TVector< T > &A, const TVector< T > &B)
Definition Vector.h:2506
T X
Definition Vector.h:62