UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
DynamicVerticesOctree3.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
7#include "MeshQueries.h"
10
11namespace UE
12{
13namespace Geometry
14{
15
29template<typename SourceType>
31{
32 // potential optimizations:
33 // - keep track of how many vertices are descendents of each cell? root cells?
34
35
36
37public:
39 const SourceType* VertexSource;
40
43
44 double HitSphereRadius = 1.0f;
45
49 void Initialize(const SourceType* VertexSourceIn, bool bDynamicExpand)
50 {
51 this->VertexSource = VertexSourceIn;
52
53 HitSphereRadius = VertexSourceIn->GetBounds().Diagonal().Length() * 0.001;
54
55 int MaxVertexID = VertexSource->MaxVertexID();
56 for ( int VertexID = 0; VertexID < MaxVertexID; VertexID++ )
57 {
58 if (VertexSource->IsVertex(VertexID))
59 {
61 {
62 ModifiedBounds.Contain(VertexSource->GetVertex(VertexID));
63 const SourceType* VtxSource = VertexSource;
65 VertexID,
66 [VtxSource](int k) { return VtxSource->GetVertex(k); });
67 }
68 else
69 {
70 InsertVertex(VertexID);
71 }
72 }
73 }
74 }
75
83
87 void InsertVertex(int32 VertexID)
88 {
89 FVector3d Point = VertexSource->GetVertex(VertexID);
92 }
93
97 void InsertVertices(const TArray<int>& Vertices)
98 {
99 int N = Vertices.Num();
100 for (int i = 0; i < N; ++i)
101 {
102 FVector3d Point = VertexSource->GetVertex(Vertices[i]);
105 }
106 }
107
111 void InsertVertices(const TSet<int>& Vertices)
112 {
113 for (int VertexID : Vertices)
114 {
115 FVector3d Point = VertexSource->GetVertex(VertexID);
118 }
119 }
120
121
125 bool RemovePoint(int32 VertexID)
126 {
127 FVector3d Point = VertexSource->GetVertex(VertexID);
130 }
131
135 void RemoveVertices(const TArray<int>& Vertices)
136 {
137 int N = Vertices.Num();
138 for ( int i = 0; i < N; ++i )
139 {
140 FVector3d Point = VertexSource->GetVertex(Vertices[i]);
143 }
144 }
145
149 void RemoveVertices(const TSet<int>& Vertices)
150 {
151 for (int VertexID : Vertices)
152 {
153 FVector3d Point = VertexSource->GetVertex(VertexID);
156 }
157 }
158
159
163 void ReinsertVertices(const TSet<int>& Vertices)
164 {
165 for (int VertexID : Vertices)
166 {
167 FVector3d Point = VertexSource->GetVertex(VertexID);
170 }
171 }
172
173
177 void NotifyPendingModification(int VertexID)
178 {
179 FVector3d Point = VertexSource->GetVertex(VertexID);
181 }
182
187 {
188 for (int VertexID : Vertices)
189 {
190 FVector3d Point = VertexSource->GetVertex(VertexID);
192 }
193 }
194
195
209
210
216 bool bVerbose = false,
217 bool bFailOnMissingPoints = false) const
218 {
220 [&](int vid) { return VertexSource->IsVertex(vid); },
221 [this](int vid) { return VertexSource->GetVertex(vid); },
223 }
224
225
226};
227
228
229
230} // end namespace UE::Geometry
231} // end namespace UE
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
Definition Array.h:670
UE_REWRITE SizeType Num() const
Definition Array.h:1144
Definition SparseDynamicPointOctree3.h:107
void InsertPoint(int32 PointID, const FVector3d &Position)
Definition SparseDynamicPointOctree3.h:466
void CheckValidity(TFunctionRef< bool(int)> IsValidPointIDFunc, TFunctionRef< FVector3d(int)> GetPointFunc, EValidityCheckFailMode FailMode=EValidityCheckFailMode::Check, bool bVerbose=false, bool bFailOnMissingPoints=false) const
Definition SparseDynamicPointOctree3.h:1151
void ReinsertPoint(int32 PointID, const FVector3d &NewPosition)
Definition SparseDynamicPointOctree3.h:871
bool RemovePoint(int32 PointID)
Definition SparseDynamicPointOctree3.h:837
int32 FindNearestHitPoint(const FRay3d &Ray, TFunctionRef< double(int, const FRay3d &)> HitPointDistFunc, double MaxDistance=TNumericLimits< double >::Max()) const
Definition SparseDynamicPointOctree3.h:913
void InsertPoint_DynamicExpand(int32 PointID, TFunctionRef< FVector3d(int)> GetPositionFunc)
Definition SparseDynamicPointOctree3.h:770
Definition DynamicVerticesOctree3.h:31
void InsertVertices(const TSet< int > &Vertices)
Definition DynamicVerticesOctree3.h:111
double HitSphereRadius
Definition DynamicVerticesOctree3.h:44
const SourceType * VertexSource
Definition DynamicVerticesOctree3.h:39
void Initialize(const SourceType *VertexSourceIn, bool bDynamicExpand)
Definition DynamicVerticesOctree3.h:49
void CheckValidity(EValidityCheckFailMode FailMode=EValidityCheckFailMode::Check, bool bVerbose=false, bool bFailOnMissingPoints=false) const
Definition DynamicVerticesOctree3.h:214
void InsertVertices(const TArray< int > &Vertices)
Definition DynamicVerticesOctree3.h:97
void InsertVertex(int32 VertexID)
Definition DynamicVerticesOctree3.h:87
FAxisAlignedBox3d ModifiedBounds
Definition DynamicVerticesOctree3.h:42
void RemoveVertices(const TArray< int > &Vertices)
Definition DynamicVerticesOctree3.h:135
void NotifyPendingModification(int VertexID)
Definition DynamicVerticesOctree3.h:177
bool RemovePoint(int32 VertexID)
Definition DynamicVerticesOctree3.h:125
void ResetModifiedBounds()
Definition DynamicVerticesOctree3.h:79
void ReinsertVertices(const TSet< int > &Vertices)
Definition DynamicVerticesOctree3.h:163
int32 FindNearestHitVertex(const FRay3d &Ray, double MaxDistance=TNumericLimits< double >::Max()) const
Definition DynamicVerticesOctree3.h:199
void NotifyPendingModification(const TSet< int > &Vertices)
Definition DynamicVerticesOctree3.h:186
void RemoveVertices(const TSet< int > &Vertices)
Definition DynamicVerticesOctree3.h:149
bool RaySphereIntersection(const TVector< RealType > &RayOrigin, const TVector< RealType > &RayDirection, const TVector< RealType > &SphereCenter, RealType SphereRadius, FLinearIntersection &Result)
Definition IntersectionUtil.h:232
EValidityCheckFailMode
Definition GeometryTypes.h:72
Definition AdvancedWidgetsModule.cpp:13
Definition NumericLimits.h:41
Definition IntersectionUtil.h:18
bool intersects
Definition IntersectionUtil.h:19
FInterval1d parameter
Definition IntersectionUtil.h:21
static TAxisAlignedBox3< double > Empty()
Definition BoxTypes.h:382
void Contain(const TVector< RealType > &V)
Definition BoxTypes.h:438
RealType Min
Definition BoxTypes.h:20
TVector< T > Origin
Definition Ray.h:24
TVector< T > Direction
Definition Ray.h:27