UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ImplicitObjectIntersection.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
4#include "Chaos/Array.h"
6
7#include <memory>
8
9namespace Chaos
10{
11template<class T, int d>
13{
14 public:
16
18 : FImplicitObject(EImplicitObject::HasBoundingBox)
19 , MObjects(MoveTemp(Objects))
20 , MLocalBoundingBox(MObjects[0]->BoundingBox())
21 {
22 for (int32 i = 1; i < MObjects.Num(); ++i)
23 {
24 MLocalBoundingBox.ShrinkToInclude(MObjects[i]->BoundingBox());
25 }
26 }
27
28 UE_DEPRECATED(5.4, "Use TImplicitObjectIntersection constructor with FImplicitObjectPtr instead")
30 : FImplicitObject(EImplicitObject::HasBoundingBox)
31 , MObjects()
32 , MLocalBoundingBox(MObjects[0]->BoundingBox())
33 {
34 check(false);
35 }
36
39 : FImplicitObject(EImplicitObject::HasBoundingBox)
40 , MObjects(MoveTemp(Other.MObjects))
41 , MLocalBoundingBox(MoveTemp(Other.MLocalBoundingBox))
42 {
43 }
45
46 virtual T PhiWithNormal(const TVector<T, d>& x, TVector<T, d>& Normal) const override
47 {
48 check(MObjects.Num());
49 T Phi = MObjects[0]->PhiWithNormal(x, Normal);
50 for (int32 i = 1; i < MObjects.Num(); ++i)
51 {
53 T NextPhi = MObjects[i]->PhiWithNormal(x, NextNormal);
54 if (NextPhi > Phi)
55 {
56 Phi = NextPhi;
58 }
59 else if (NextPhi == Phi)
60 {
62 }
63 }
64 Normal.Normalize();
65 return Phi;
66 }
67
68 virtual const TAABB<T,d> BoundingBox() const { return MLocalBoundingBox; }
69
70
71 virtual uint32 GetTypeHash() const override
72 {
73 uint32 OutHash = MObjects.Num() > 0 ? MObjects[0]->GetTypeHash() : 0;
74
75 for(const Chaos::FImplicitObjectPtr& Ptr : MObjects)
76 {
77 OutHash = HashCombine(Ptr->GetTypeHash(), OutHash);
78 }
79
80 return OutHash;
81 }
82
83private:
84 virtual Pair<TVector<T, d>, bool> FindClosestIntersectionImp(const TVector<T, d>& StartPoint, const TVector<T, d>& EndPoint, const T Thickness) const
85 {
86 TArray<Pair<T, TVector<T, d>>> Intersections;
87 for (int32 i = 0; i < MObjects.Num(); ++i)
88 {
89 auto NextClosestIntersection = MObjects[i]->FindClosestIntersection(StartPoint, EndPoint, Thickness);
90 if (!NextClosestIntersection.Second)
91 continue;
92 Intersections.Add(MakePair((FReal)(NextClosestIntersection.First - StartPoint).Size(), NextClosestIntersection.First));
93 }
94 Intersections.Sort([](const Pair<T, TVector<T, d>>& Elem1, const Pair<T, TVector<T, d>>& Elem2) { return Elem1.First < Elem2.First; });
95 for (int32 i = 0; i < Intersections.Num(); ++i)
96 {
97 if (SignedDistance(Intersections[i].Second) <= (Thickness + 1e-4))
98 {
99 return MakePair(Intersections[i].Second, true);
100 }
101 }
102 return MakePair(TVector<T, d>(0), false);
103 }
104
105 private:
107 TAABB<T, d> MLocalBoundingBox;
108};
109}
#define check(expr)
Definition AssertionMacros.h:314
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
constexpr uint32 HashCombine(uint32 A, uint32 C)
Definition TypeHash.h:36
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition ImplicitObject.h:111
CHAOS_API FReal SignedDistance(const FVec3 &x) const
Definition ImplicitObject.cpp:105
bool HasBoundingBox() const
Definition ImplicitObject.h:275
Definition AABB.h:37
Definition ImplicitObjectIntersection.h:13
CHAOS_API FReal SignedDistance(const FVec3 &x) const
Definition ImplicitObject.cpp:105
virtual ~TImplicitObjectIntersection()
Definition ImplicitObjectIntersection.h:44
TImplicitObjectIntersection(TArray< Chaos::FImplicitObjectPtr > &&Objects)
Definition ImplicitObjectIntersection.h:17
virtual T PhiWithNormal(const TVector< T, d > &x, TVector< T, d > &Normal) const override
Definition ImplicitObjectIntersection.h:46
TImplicitObjectIntersection(TImplicitObjectIntersection< T, d > &&Other)
Definition ImplicitObjectIntersection.h:38
virtual uint32 GetTypeHash() const override
Definition ImplicitObjectIntersection.h:71
virtual const TAABB< T, d > BoundingBox() const
Definition ImplicitObjectIntersection.h:68
TImplicitObjectIntersection(const TImplicitObjectIntersection< T, d > &Other)=delete
Definition Vector.h:41
Definition Array.h:670
UE_REWRITE SizeType Num() const
Definition Array.h:1144
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696
UE_NODEBUG void Sort()
Definition Array.h:3418
Definition UniquePtr.h:107
Definition SkeletalMeshComponent.h:307
FRealDouble FReal
Definition Real.h:22
Pair< T1, T2 > MakePair(const T1 &First, const T2 &Second)
Definition Pair.h:45
Definition Pair.h:8