UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
GeometryCollectionAlgo.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "ManagedArray.h"
8
11
13{
14 struct FFaceEdge
15 {
18
19 friend inline uint32 GetTypeHash(const FFaceEdge& Other)
20 {
21 return HashCombine(::GetTypeHash(Other.VertexIdx1), ::GetTypeHash(Other.VertexIdx2));
22 }
23
24 friend bool operator==(const FFaceEdge& A, const FFaceEdge& B)
25 {
26 return A.VertexIdx1 == B.VertexIdx1 && A.VertexIdx2 == B.VertexIdx2;
27 }
28 };
29
30 /*
31 * Print the parent hierarchy of the collection.
32 */
33 void
36
40 void
43
47 void
50
54 void
57
58
59 /*
60 *
61 */
62 void
65
66
67 /*
68 *
69 */
70 void
73
74
78 void
81
82 /*
83 * Check if the Collection has multiple transform roots.
84 */
85 bool
88
89 /*
90 *
91 */
92 bool
94 HasCycle(const TManagedArray<int32>& Parents, int32 Node);
95
96 /*
97 *
98 */
99 bool
102
103 /*
104 * Parent a single transform
105 */
106 void
107 CHAOS_API
108 ParentTransform(FManagedArrayCollection* ManagedArrayCollection, const int32 TransformIndex, const int32 ChildIndex);
109
110 /*
111 * Parent the list of transforms to the selected index.
112 */
113 void
114 CHAOS_API
115 ParentTransforms(FManagedArrayCollection* ManagedArrayCollection, const int32 TransformIndex, const TArray<int32>& SelectedBones);
116
117
118 /*
119 * Unparent the child index from its parent
120 */
121 void
123 UnparentTransform(FManagedArrayCollection* ManagedArrayCollection, const int32 ChildIndex);
124
125 /*
126 * Find the average position of the transforms.
127 */
128 FVector
131
132
133 /*
134 * Global Matrices of the specified index.
135 */
141
142
143 /*
144 * Global Matrices of the collection based on list of indices
145 */
148
149 /*
150 * Recursively traverse from a root node down
151 */
153
154 /*
155 * Global Matrices of the collection, transforms will be resized to fit
156 */
157 template<typename MatrixType>
159
160 template<typename MatrixType, typename TransformType>
162
163 /*
164 * Gets pairs of elements whose bounding boxes overlap.
165 */
167
168 /*
169 * Prepare for simulation - placeholder function
170 */
171 void
174
175 /*
176 * Moves the geometry to center of mass aligned, with option to re-center bones around origin of actor
177 */
178 void
181
182 void
185
186 void
189
190 void
193
198 void
201
202 void
205
206 void
209
210 void
213
214 void
217
218 void
221
222 void
225
226 void
229
230 void
233
234 void
237
238 void
241
242 /*
243 * Geometry validation - Checks if the geometry group faces ranges fall within the size of the faces group
244 */
245 bool
248
249 /*
250 * Geometry validation - Checks if the geometry group verts ranges fall within the size of the vertices group
251 */
252 bool
255
256 /*
257 * Geometry validation - Checks if the geometry group indices appear out of range
258 */
259 bool
262
263 /*
264 * Geometry validation - Checks if there are any faces that are not referenced by the geometry groups
265 */
266 bool
269
270 /*
271 * Geometry validation - Checks if there are any vertices that are not referenced by the geometry groups
272 */
273 bool
276
277 /*
278 * Performs all of the above geometry validation checks
279 */
280 bool
283
284
285 /*
286 * Computes the order of transform indices so that children in a tree always appear before their parents. Handles forests
287 */
291
292
293 // For internal use only
294 namespace Private
295 {
296 void CHAOS_API GlobalMatrices(const FGeometryDynamicCollection& DynamicCollection, TArray<FTransform>& Transforms);
297 void CHAOS_API GlobalMatrices(const FGeometryDynamicCollection& DynamicCollection, TArray<FTransform3f>& Transforms);
300 }
301
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
uint32 Size
Definition VulkanMemory.cpp:4034
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition GeometryCollection.h:32
Definition GeometryCollectionProxyData.h:90
Definition ArrayView.h:139
Definition Array.h:670
Definition ManagedArray.h:1099
Definition UnrealString.h.inl:34
void GlobalMatrices(const FGeometryDynamicCollection &DynamicCollection, const TArray< int32 > &Indices, TArray< FTransform > &OutGlobalTransforms)
Definition GeometryCollectionAlgo.cpp:539
FTransform GlobalMatrix(const FGeometryDynamicCollection &DynamicCollection, int32 Index)
Definition GeometryCollectionAlgo.cpp:466
Definition GeometryCollectionAlgo.cpp:17
bool HasValidGeometryReferences(const FGeometryCollection *GeometryCollection)
Definition GeometryCollectionAlgo.cpp:1620
void GetOverlappedPairs(FGeometryCollection *GeometryCollection, int Level, TSet< TTuple< int32, int32 > > &OutOverlappedPairs)
Definition GeometryCollectionAlgo.cpp:708
bool HasResidualFaces(const FGeometryCollection *GeometryCollection)
Definition GeometryCollectionAlgo.cpp:1560
bool HasInvalidIndicesFor(const FGeometryCollection *GeometryCollection, int32 GeometryIndex)
Definition GeometryCollectionAlgo.cpp:1518
void DeleteCoincidentVertices(FGeometryCollection *GeometryCollection, float Tolerance)
Definition GeometryCollectionAlgo.cpp:1232
void ComputeStaleVertices(const FGeometryCollection *GeometryCollection, TSet< int32 > &VertexToDeleteSet)
Definition GeometryCollectionAlgo.cpp:1341
void DeleteStaleVertices(FGeometryCollection *GeometryCollection)
Definition GeometryCollectionAlgo.cpp:1385
void ComputeZeroAreaFaces(const FGeometryCollection *GeometryCollection, const float Tolerance, TSet< int32 > &FaceToDeleteSet)
Definition GeometryCollectionAlgo.cpp:1265
void ResizeGeometries(FGeometryCollection *GeometryCollection, const TArray< int32 > &FaceCounts, const TArray< int32 > &VertexCounts, bool bDoValidation)
Definition GeometryCollectionAlgo.cpp:1013
bool HasResidualIndices(const FGeometryCollection *GeometryCollection)
Definition GeometryCollectionAlgo.cpp:1590
void TriangulateBoundaries(FGeometryCollection *GeometryCollection, const TArray< TArray< TArray< int32 > > > &BoundaryVertexIndices, bool bWoundClockwise, float MinTriangleAreaSq)
Definition GeometryCollectionAlgo.cpp:881
void DeleteZeroAreaFaces(FGeometryCollection *GeometryCollection, float Tolerance)
Definition GeometryCollectionAlgo.cpp:1294
void GlobalMatrices(const TManagedArray< FTransform > &RelativeTransforms, const TManagedArray< int32 > &Parents, const TArray< int32 > &Indices, TArray< FTransform > &Transforms)
Definition GeometryCollectionAlgo.cpp:572
void UnparentTransform(FManagedArrayCollection *ManagedArrayCollection, const int32 ChildIndex)
Definition GeometryCollectionAlgo.cpp:208
void BuildIncrementMask(const TArray< int32 > &SortedDeletionList, const int32 &Size, TArray< int32 > &Mask)
Definition GeometryCollectionAlgo.cpp:76
bool HasValidIndicesFor(const FGeometryCollection *GeometryCollection, int32 GeometryIndex)
Definition GeometryCollectionAlgo.cpp:1490
bool HasValidFacesFor(const FGeometryCollection *GeometryCollection, int32 GeometryIndex)
Definition GeometryCollectionAlgo.cpp:1447
void ParentTransforms(FManagedArrayCollection *ManagedArrayCollection, const int32 TransformIndex, const TArray< int32 > &SelectedBones)
Definition GeometryCollectionAlgo.cpp:199
void BuildTransformGroupToGeometryGroupMap(const FGeometryCollection &GeometryCollection, TArray< int32 > &TransformToGeometry)
Definition GeometryCollectionAlgo.cpp:105
void ContiguousArray(TArray< int32 > &Array, int32 Length)
Definition GeometryCollectionAlgo.cpp:67
bool HasMultipleRoots(FGeometryCollection *Collection)
Definition GeometryCollectionAlgo.cpp:169
void ReCenterGeometryAroundCentreOfMass(FGeometryCollection *GeometryCollection, bool CenterAtOrigin)
Definition GeometryCollectionAlgo.cpp:754
FTransform GlobalMatrix(const TManagedArray< FTransform > &RelativeTransforms, const TManagedArray< int32 > &Parents, int32 Index)
Definition GeometryCollectionAlgo.cpp:513
void FindOpenBoundaries(const FGeometryCollection *GeometryCollection, const float CoincidentVertexTolerance, TArray< TArray< TArray< int32 > > > &BoundaryVertexIndices)
Definition GeometryCollectionAlgo.cpp:814
void GlobalMatricesFromRoot(const int32 ParentTransformIndex, const TManagedArray< FTransform > &RelativeTransforms, const TManagedArray< TSet< int32 > > &Children, TArray< FMatrix > &Transforms)
Definition GeometryCollectionAlgo.cpp:582
void AddFaces(FGeometryCollection *GeometryCollection, const TArray< TArray< FIntVector > > &AddFaces)
Definition GeometryCollectionAlgo.cpp:967
void BuildFaceGroupToGeometryGroupMap(const FGeometryCollection &GeometryCollection, const TArray< int32 > &TransformToGeometryMap, TArray< int32 > &FaceToGeometry)
Definition GeometryCollectionAlgo.cpp:118
void DeleteHiddenFaces(FGeometryCollection *GeometryCollection)
Definition GeometryCollectionAlgo.cpp:1329
void BuildLookupMask(const TArray< int32 > &SortedDeletionList, const int32 &Size, TArray< bool > &Mask)
Definition GeometryCollectionAlgo.cpp:92
void ComputeHiddenFaces(const FGeometryCollection *GeometryCollection, TSet< int32 > &FaceToDeleteSet)
Definition GeometryCollectionAlgo.cpp:1306
void PrintStatistics(const FGeometryCollection *GeometryCollection)
Definition GeometryCollectionAlgo.cpp:1425
void ValidateSortedList(const TArray< int32 > &SortedDeletionList, const int32 &ListSize)
Definition GeometryCollectionAlgo.cpp:135
bool HasCycle(const TManagedArray< int32 > &Parents, int32 Node)
Definition GeometryCollectionAlgo.cpp:181
void PrintParentHierarchy(const FGeometryCollection *Collection)
Definition GeometryCollectionAlgo.cpp:48
void ComputeEdgeInFaces(const FGeometryCollection *GeometryCollection, TMap< FFaceEdge, int32 > &FaceEdgeMap)
Definition GeometryCollectionAlgo.cpp:1397
TArray< int32 > ComputeRecursiveOrder(const FManagedArrayCollection &Collection)
Definition GeometryCollectionAlgo.cpp:1638
FVector AveragePosition(FGeometryCollection *Collection, const TArray< int32 > &Indices)
Definition GeometryCollectionAlgo.cpp:152
void ParentTransform(FManagedArrayCollection *ManagedArrayCollection, const int32 TransformIndex, const int32 ChildIndex)
Definition GeometryCollectionAlgo.cpp:190
FTransform3f GlobalMatrix3f(const TManagedArray< FTransform3f > &RelativeTransforms, const TManagedArray< int32 > &Parents, int32 Index)
Definition GeometryCollectionAlgo.cpp:518
void ComputeCoincidentVertices(const FGeometryCollection *GeometryCollection, const float Tolerance, TMap< int32, int32 > &CoincidentVerticesMap, TSet< int32 > &VertexToDeleteSet)
Definition GeometryCollectionAlgo.cpp:1177
void PrepareForSimulation(FGeometryCollection *GeometryCollection, bool CenterAtOrigin)
Definition GeometryCollectionAlgo.cpp:749
Definition CollectionBoundsFacade.cpp:13
Definition OverriddenPropertySet.cpp:45
U16 Index
Definition radfft.cpp:71
Definition ManagedArrayCollection.h:56
Definition GeometryCollectionAlgo.h:15
int32 VertexIdx2
Definition GeometryCollectionAlgo.h:17
friend uint32 GetTypeHash(const FFaceEdge &Other)
Definition GeometryCollectionAlgo.h:19
friend bool operator==(const FFaceEdge &A, const FFaceEdge &B)
Definition GeometryCollectionAlgo.h:24
int32 VertexIdx1
Definition GeometryCollectionAlgo.h:16
Definition Tuple.h:652