UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
Database.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
5#include "Core/CADEntity.h"
6#include "Core/Types.h"
7#include "Containers/Queue.h"
8
9namespace UE::CADKernel
10{
11class FCADKernelArchive;
12class FModel;
13class FTopologicalEntity;
14class FTopologicalShapeEntity;
15
17{
18 friend class FCADKernelArchive;
19 friend class FEntity;
20 friend class FSession;
21 template<typename, ESPMode> friend class SharedPointerInternals::TIntrusiveReferenceController;
22
23protected:
24
29
35
40
46
63
68
73
74 mutable bool bForceSpawning = false;
75 bool bIsRecursiveSerialization = false;
77
78public:
79
80 FDatabase();
81
82 FModel& GetModel() { return *GetModelAsShared(); }
83 TSharedPtr<FModel> GetModelAsShared();
84
88 void RemoveEntity(FIdent idEntity);
89 void RemoveEntity(FEntity& Entity);
90
91
96 void SerializeSelection(FCADKernelArchive& Ar, const TArray<FIdent>& SelectionIds);
97
102
103 void Deserialize(FCADKernelArchive& Ar);
104
108 void CleanArchiveEntities();
109
113 void Empty();
114
120 {
121 if (!Entity.IsValid())
122 {
123 return;
124 }
125
126 if (Entity->GetId() > 0)
127 {
128 return;
129 }
130 FIdent Id = CreateId();
131 DatabaseEntities[Id] = Entity;
132 Entity->Id = Id;
133 }
134
142 {
143 FIdent ArchiveId = Entity->GetId();
144 ensureCADKernel(ArchiveEntities.Num() > (int32)ArchiveId);
145 // Add the entity to ArchiveEntities map.
146 ArchiveEntities[ArchiveId] = Entity;
147
148 // Check if the entity is not referenced by other entities if the archive(ArchiveIdToWaitingPointers).
149 // If yes(IdToWaitingPointers[ArchiveId].Num() > 0), set all TSharedPtr with the new entity
150 {
151 TArray<TSharedPtr<FEntity>*>& WaitingList = ArchiveIdToWaitingSharedPointers[ArchiveId];
152 if (WaitingList.Num() > 0)
153 {
154 for (TSharedPtr<FEntity>* SharedPtr : WaitingList)
155 {
156 *SharedPtr = Entity;
157 }
158 WaitingList.Empty();
159 }
160 }
161
162 {
163 TArray<TWeakPtr<FEntity>*>& WaitingList = ArchiveIdToWaitingWeakPointers[ArchiveId];
164 if (WaitingList.Num() > 0)
165 {
166 for (TWeakPtr<FEntity>* WeakPtr : WaitingList)
167 {
168 *WeakPtr = Entity;
169 }
170 WaitingList.Empty();
171 }
172 }
173
174 {
175 TArray<FEntity**>& WaitingList = ArchiveIdToWaitingPointers[ArchiveId];
176 if (WaitingList.Num() > 0)
177 {
178 for (FEntity** Ptr : WaitingList)
179 {
180 *Ptr = &*Entity;
181 }
182 WaitingList.Empty();
183 }
184 }
185
186 // Reset Id to add it in the DatabaseEntities map.
187 Entity->Id = 0;
188 // Add the entity to DatabaseEntities map.
189 AddEntity(Entity);
190 }
191
197 {
198 if (ArchiveId == 0)
199 {
201 return;
202 }
203
204 TSharedPtr<FEntity>& EntityPtr = ArchiveEntities[ArchiveId];
205 if (EntityPtr.IsValid())
206 {
208 }
209 else
210 {
211 ArchiveIdToWaitingSharedPointers[ArchiveId].Add(&Entity);
212 }
213 }
214
220 {
221 if (ArchiveId == 0)
222 {
224 return;
225 }
226
227 TSharedPtr<FEntity>& EntityPtr = ArchiveEntities[ArchiveId];
228 if (EntityPtr.IsValid())
229 {
231 }
232 else
233 {
234 ArchiveIdToWaitingWeakPointers[ArchiveId].Add(&Entity);
235 }
236 }
237
243 {
244 if (ArchiveId == 0)
245 {
246 *Entity = nullptr;
247 return;
248 }
249
250 TSharedPtr<FEntity>& EntityPtr = ArchiveEntities[ArchiveId];
251 if (EntityPtr.IsValid())
252 {
253 *Entity = EntityPtr.Get();
254 }
255 else
256 {
257 ArchiveIdToWaitingPointers[ArchiveId].Add(Entity);
258 }
259 }
260
261 uint32 SpawnEntityIdents(const TArray<TSharedPtr<FEntity>>& SelectedEntities, bool bForceSpawning = false);
262 uint32 SpawnEntityIdents(const TArray<FEntity*>& SelectedEntities, bool bForceSpawning = false);
263 uint32 SpawnEntityIdent(FEntity& SelectedEntity, bool bForceSpawning = false);
264
265protected:
270 {
271 if (bIsRecursiveSerialization && !EntitiesToBeSerialized.Find(EntityId))
272 {
273 EntitiesToBeSerialized.Add(EntityId);
274 NotYetSerialized.Enqueue(EntityId);
275 }
276 }
277
278private:
279 FIdent CreateId();
280
281 // =========================================================================================================================================================================================================
282 // =========================================================================================================================================================================================================
283 // =========================================================================================================================================================================================================
284 //
285 //
286 // NOT YET REVIEWED
287 //
288 //
289 // =========================================================================================================================================================================================================
290 // =========================================================================================================================================================================================================
291 // =========================================================================================================================================================================================================
292
293public:
294
295 TSharedPtr<FEntity> GetEntity(FIdent id) const;
296 void GetEntities(const TArray<FIdent>& ids, TArray<TSharedPtr<FEntity>>& Entities) const;
297 void GetEntities(const TArray<FIdent>& ids, TArray<FEntity*>& Entities) const;
298 void GetTopologicalEntities(const TArray<FIdent>& ids, TArray<FTopologicalEntity*>& Entities) const;
299 void GetTopologicalShapeEntities(const TArray<FIdent>& ids, TArray<FTopologicalShapeEntity*>& Entities) const;
300
301 void GetEntitiesOfType(EEntity Type, TArray<TSharedPtr<FEntity>>& OutEntities) const;
302 void GetEntitiesOfTypes(const TSet<EEntity>& Types, TArray<TSharedPtr<FEntity>>& OutEntities) const;
303
304 void ExpandSelection(TSharedPtr<FEntity> Entities, const TSet<EEntity>& Filter, TSet<TSharedPtr<FEntity>>& OutSelection) const;
305 void ExpandSelection(const TArray<TSharedPtr<FEntity>>& Entities, const TSet<EEntity>& Filter, TSet<TSharedPtr<FEntity>>& OutSelection) const;
306 void ExpandSelection(const TArray<TSharedPtr<FEntity>>& Entities, const TSet<EEntity>& Filter, TArray<TSharedPtr<FEntity>>& OutSelection) const;
307
308 void TopologicalEntitiesSelection(const TArray<TSharedPtr<FEntity>>& Entities, TArray<TSharedPtr<FTopologicalEntity>>& OutTopoEntities, bool bFindSurfaces, bool bFindEdges, bool bFindVertices) const;
309 void CadEntitiesSelection(const TArray<TSharedPtr<FEntity>>& Entities, TArray<TSharedPtr<FEntity>>& OutCadEntities) const;
310 void MeshEntitiesSelection(const TArray<TSharedPtr<FEntity>>& Entities, TArray<TSharedPtr<FEntity>>& OutMeshEntities) const;
311
312 TSharedPtr<FEntity> GetFirstEntityOfType(EEntity Type) const;
313};
314
315} // namespace UE::CADKernel
316
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
#define ensureCADKernel(InExpression)
Definition Types.h:115
uint32 FIdent
Definition Types.h:27
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition SharedPointerInternals.h:400
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
Definition Queue.h:48
bool Enqueue(const FElementType &Item)
Definition Queue.h:123
Definition SharedPointer.h:692
Definition SharedPointer.h:1295
Definition CADKernelArchive.h:19
Definition Database.h:17
void SetReferencedEntityOrAddToWaitingList(FIdent ArchiveId, FEntity **Entity)
Definition Database.h:242
TArray< TArray< TSharedPtr< FEntity > * > > ArchiveIdToWaitingSharedPointers
Definition Database.h:60
void AddEntityFromArchive(TSharedPtr< FEntity >Entity)
Definition Database.h:141
TArray< FIdent > AvailableIdents
Definition Database.h:39
FModel & GetModel()
Definition Database.h:82
TArray< TArray< TWeakPtr< FEntity > * > > ArchiveIdToWaitingWeakPointers
Definition Database.h:61
TSet< FIdent > EntitiesToBeSerialized
Definition Database.h:67
TArray< TArray< FEntity ** > > ArchiveIdToWaitingPointers
Definition Database.h:62
uint32 EntityCount
Definition Database.h:76
void SetReferencedEntityOrAddToWaitingList(FIdent ArchiveId, TWeakPtr< FEntity > &Entity)
Definition Database.h:219
TSharedPtr< FModel > Model
Definition Database.h:28
void SetReferencedEntityOrAddToWaitingList(FIdent ArchiveId, TSharedPtr< FEntity > &Entity)
Definition Database.h:196
void AddEntityToSave(FIdent EntityId)
Definition Database.h:269
TArray< TSharedPtr< FEntity > > ArchiveEntities
Definition Database.h:45
TArray< TSharedPtr< FEntity > > DatabaseEntities
Definition Database.h:34
TQueue< FIdent > NotYetSerialized
Definition Database.h:72
void AddEntity(TSharedPtr< FEntity > Entity)
Definition Database.h:119
Definition CADEntity.h:56
Definition Model.h:22
Definition Session.h:18
Definition CADEntity.cpp:23
EEntity
Definition CADEntity.h:18