UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ElementLinearization.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 "IndexTypes.h"
7#include "VectorTypes.h"
8
9namespace UE
10{
11namespace Geometry
12{
13
14using namespace UE::Math;
15
22{
23public:
25
26 // Lookup ToVtxId(Index) = VtxId;
27 const TArray<int32>& ToId() const { return ToIdMap; }
28
29 // Lookup ToIndex(VtxId) = Index; may return FDynamicMesh3::InvalidID
30 const TArray<int32>& ToIndex() const { return ToIndexMap; }
31
33 int32 NumIds() const { return ToIdMap.Num(); }
34
35 // Following the FDynamicMesh3 convention this is really MaxId + 1
36 int32 MaxId() const { return ToIndexMap.Num(); }
37
39 int32 NumIndices() const { return ToIdMap.Num(); }
40
42 bool IsValidId(int32 Id) const
43 {
44 return Id >= 0 && Id < ToIndexMap.Num() && ToIndexMap[Id] >= 0;
45 }
46
49 {
50 return Index >= 0 && Index < ToIdMap.Num();
51 }
52
55 {
57 return ToIndexMap[Id];
58 }
59
62 {
64 return ToIdMap[Index];
65 }
66
68
69 template<typename IterableType>
70 void Populate(const int32 MaxId, const int32 Count, IterableType Iterable)
71 {
74
75 for (int32 i = 0; i < MaxId; ++i)
76 {
78 }
79
80 // create the mapping
81 {
82 int32 N = 0;
83 for (int32 Id : Iterable)
84 {
85 ToIdMap[N] = Id;
86 ToIndexMap[Id] = N;
87 N++;
88 }
89 }
90 }
91
92protected:
95
96private:
98};
99
100
101
105template<typename RealType>
107{
108protected:
112
113public:
114
121
124
125 void SetZero(int32 NumElements)
126 {
127 XVector.Reset(0);
129 YVector.Reset(0);
131 ZVector.Reset(0);
133 }
134
135 // Test that all the arrays have the same given size.
136 bool bHasSize(int32 Size) const
137 {
138 return (XVector.Num() == Size && YVector.Num() == Size && ZVector.Num() == Size);
139 }
140
141 int32 Num() const
142 {
143 int32 Size = XVector.Num();
144 if (!bHasSize(Size))
145 {
146 Size = -1;
147 }
148 return Size;
149 }
150
151 RealType X(int32 i) const
152 {
153 return XVector[i];
154 }
155
156 RealType Y(int32 i) const
157 {
158 return YVector[i];
159 }
160
161 RealType Z(int32 i) const
162 {
163 return ZVector[i];
164 }
165
166 void SetX(int32 i, const RealType& Value)
167 {
168 XVector[i] = Value;
169 }
170
171 void SetY(int32 i, const RealType& Value)
172 {
173 YVector[i] = Value;
174 }
175
176 void SetZ(int32 i, const RealType& Value)
177 {
178 ZVector[i] = Value;
179 }
180
182 {
183 XVector[i] = Value.X;
184 YVector[i] = Value.Y;
185 ZVector[i] = Value.Z;
186 }
187
189 {
190 return TVector<RealType>(XVector[i], YVector[i], ZVector[i]);
191 }
192
194 {
195 XVector[i] = Value.X;
196 YVector[i] = Value.Y;
197 ZVector[i] = Value.Z;
198 }
199};
200
201
202
203
204
205
209template<typename RealType>
211{
212protected:
215
216public:
217
223
226
227 void SetZero(int32 NumElements)
228 {
229 XVector.Reset(0);
231 YVector.Reset(0);
233 }
234
235 // Test that all the arrays have the same given size.
236 bool bHasSize(int32 Size) const
237 {
238 return (XVector.Num() == Size && YVector.Num() == Size);
239 }
240
241 int32 Num() const
242 {
243 int32 Size = XVector.Num();
244 if (!bHasSize(Size))
245 {
246 Size = -1;
247 }
248 return Size;
249 }
250
251 RealType X(int32 i) const
252 {
253 return XVector[i];
254 }
255
256 RealType Y(int32 i) const
257 {
258 return YVector[i];
259 }
260
261 void SetX(int32 i, const RealType& Value)
262 {
263 XVector[i] = Value;
264 }
265
266 void SetY(int32 i, const RealType& Value)
267 {
268 YVector[i] = Value;
269 }
270
272 {
273 XVector[i] = Value.X;
274 YVector[i] = Value.Y;
275 }
276};
277
278
279} // end namespace UE::Geometry
280} // end namespace UE
#define checkSlow(expr)
Definition AssertionMacros.h:332
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
uint32 Size
Definition VulkanMemory.cpp:4034
Definition Array.h:670
UE_REWRITE SizeType Num() const
Definition Array.h:1144
void SetNumZeroed(SizeType NewNum, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2340
void Reset(SizeType NewSize=0)
Definition Array.h:2246
void SetNum(SizeType NewNum, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2308
void SetNumUninitialized(SizeType NewNum, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2369
void Empty(SizeType Slack=0)
Definition Array.h:2273
Definition ElementLinearization.h:22
int32 NumIds() const
Definition ElementLinearization.h:33
int32 GetIndex(int32 Id) const
Definition ElementLinearization.h:54
int32 NumIndices() const
Definition ElementLinearization.h:39
void Empty()
Definition ElementLinearization.h:67
bool IsValidId(int32 Id) const
Definition ElementLinearization.h:42
TArray< int32 > ToIdMap
Definition ElementLinearization.h:93
const TArray< int32 > & ToIndex() const
Definition ElementLinearization.h:30
bool IsValidIndex(int32 Index) const
Definition ElementLinearization.h:48
void Populate(const int32 MaxId, const int32 Count, IterableType Iterable)
Definition ElementLinearization.h:70
const TArray< int32 > & ToId() const
Definition ElementLinearization.h:27
int32 MaxId() const
Definition ElementLinearization.h:36
TArray< int32 > ToIndexMap
Definition ElementLinearization.h:94
int32 GetId(int32 Index) const
Definition ElementLinearization.h:61
Definition ElementLinearization.h:211
TArray< RealType > XVector
Definition ElementLinearization.h:213
int32 Num() const
Definition ElementLinearization.h:241
RealType Y(int32 i) const
Definition ElementLinearization.h:256
TVector2Arrays(int32 Size)
Definition ElementLinearization.h:218
void SetX(int32 i, const RealType &Value)
Definition ElementLinearization.h:261
RealType X(int32 i) const
Definition ElementLinearization.h:251
void SetZero(int32 NumElements)
Definition ElementLinearization.h:227
TArray< RealType > YVector
Definition ElementLinearization.h:214
TVector2Arrays()
Definition ElementLinearization.h:224
bool bHasSize(int32 Size) const
Definition ElementLinearization.h:236
void SetXY(int32 i, const UE::Math::TVector2< RealType > &Value)
Definition ElementLinearization.h:271
void SetY(int32 i, const RealType &Value)
Definition ElementLinearization.h:266
Definition ElementLinearization.h:107
RealType Y(int32 i) const
Definition ElementLinearization.h:156
TArray< RealType > ZVector
Definition ElementLinearization.h:111
RealType Z(int32 i) const
Definition ElementLinearization.h:161
TVector< RealType > Get(int32 i)
Definition ElementLinearization.h:188
TArray< RealType > XVector
Definition ElementLinearization.h:109
void SetZero(int32 NumElements)
Definition ElementLinearization.h:125
TVector3Arrays()
Definition ElementLinearization.h:122
void Set(int32 i, const TVector< RealType > &Value)
Definition ElementLinearization.h:193
RealType X(int32 i) const
Definition ElementLinearization.h:151
TVector3Arrays(int32 Size)
Definition ElementLinearization.h:115
void SetY(int32 i, const RealType &Value)
Definition ElementLinearization.h:171
void SetZ(int32 i, const RealType &Value)
Definition ElementLinearization.h:176
int32 Num() const
Definition ElementLinearization.h:141
void SetX(int32 i, const RealType &Value)
Definition ElementLinearization.h:166
TArray< RealType > YVector
Definition ElementLinearization.h:110
void SetXYZ(int32 i, const TVector< RealType > &Value)
Definition ElementLinearization.h:181
bool bHasSize(int32 Size) const
Definition ElementLinearization.h:136
constexpr int InvalidID
Definition IndexTypes.h:13
Definition Sphere.cpp:10
Definition AdvancedWidgetsModule.cpp:13
U16 Index
Definition radfft.cpp:71
Definition Vector2D.h:38
Definition Vector.h:51