UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
Model.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/EntityGeom.h"
8#include "CoreTypes.h"
9
10namespace UE::CADKernel
11{
12
13class FBody;
14class FDatabase;
15class FGroup;
16class FTopologicalEdge;
17class FTopologicalEntity;
18class FTopologicalFace;
19class FTopologicalVertex;
20
22{
23 friend FEntity;
24
25protected:
26
28
30 {
31 Bodies.Reserve(100);
32 }
33
34public:
35
36 virtual ~FModel() override
37 {
38 FModel::Empty();
39 }
40
41 virtual void Serialize(FCADKernelArchive& Ar) override
42 {
43 FTopologicalShapeEntity::Serialize(Ar);
44 SerializeIdents(Ar, (TArray<TSharedPtr<FEntity>>&) Bodies);
45
46 if (Ar.IsLoading())
47 {
48 //ensureCADKernel(Archive.ArchiveModel == nullptr);
49 if (Ar.ArchiveModel == nullptr)
50 {
51 Ar.ArchiveModel = this;
52 }
53 }
54 }
55
56 virtual void SpawnIdent(FDatabase& Database) override
57 {
58 if (!FEntity::SetId(Database))
59 {
60 return;
61 }
62
63 SpawnIdentOnEntities(Bodies, Database);
64 }
65
66 virtual void ResetMarkersRecursively() const override
67 {
68 ResetMarkers();
69 ResetMarkersRecursivelyOnEntities(Bodies);
70 }
71
72#ifdef CADKERNEL_DEV
73 virtual FInfoEntity& GetInfo(FInfoEntity&) const override;
74#endif
75
76 virtual EEntity GetEntityType() const override
77 {
78 return EEntity::Model;
79 }
80
82
87
89 {
90 Bodies.Add(InBody);
91 }
92
93 virtual void Empty() override
94 {
95 Bodies.Empty();
96 FTopologicalShapeEntity::Empty();
97 }
98
99 virtual void Remove(const FTopologicalShapeEntity* InBody) override
100 {
101 if (!InBody)
102 {
103 return;
104 }
105
106 int32 Index = Bodies.IndexOfByPredicate([&](const TSharedPtr<FBody>& Body) { return (InBody == (FTopologicalShapeEntity*) Body.Get()); });
107 if (Index != INDEX_NONE)
108 {
109 Bodies.RemoveAt(Index);
110 }
111 }
112
113 void RemoveEmptyBodies();
114
115 void PrintBodyAndShellCount();
116
118
123 {
124 Bodies.Append(OtherModel->Bodies);
125 }
126
130 void Copy(const FModel& OtherModel)
131 {
132 Bodies.Append(OtherModel.Bodies);
133 }
134
140 {
142 OtherModel.Bodies.Empty();
143 }
144
146 {
147 return Bodies.Num();
148 }
149
151 {
152 return Bodies.Num();
153 }
154
155 bool IsEmpty() const
156 {
157 return Bodies.IsEmpty();
158 }
159
160 virtual void GetFaces(TArray<FTopologicalFace*>& OutFaces) override;
161
162 virtual int32 FaceCount() const override;
163
165 {
166 return Bodies;
167 }
168
169 virtual void PropagateBodyOrientation() override;
170
171 virtual void CompleteMetaData() override;
172
173 // Topo functions
174
178 void CheckTopology();
179
180#ifdef CADKERNEL_DEV
181 virtual void FillTopologyReport(FTopologyReport& Report) const override;
182#endif
183
184 void Orient();
185};
186
187} // namespace UE::CADKernel
@ INDEX_NONE
Definition CoreMiscDefines.h:150
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
void RemoveAt(SizeType Index, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2083
UE_REWRITE bool IsEmpty() const
Definition Array.h:1133
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696
void Append(const TArray< OtherElementType, OtherAllocatorType > &Source)
Definition Array.h:2412
SizeType IndexOfByPredicate(Predicate Pred) const
Definition Array.h:1423
void Empty(SizeType Slack=0)
Definition Array.h:2273
UE_FORCEINLINE_HINT void Reserve(SizeType Number)
Definition Array.h:3016
Definition SharedPointer.h:692
Definition SharedPointer.h:153
Definition CADKernelArchive.h:19
bool IsLoading() const
Definition CADKernelArchive.h:108
FModel * ArchiveModel
Definition CADKernelArchive.h:26
Definition Database.h:17
Definition CADEntity.h:56
Definition Model.h:22
bool IsEmpty() const
Definition Model.h:155
TArray< TSharedPtr< FBody > > Bodies
Definition Model.h:27
virtual void SpawnIdent(FDatabase &Database) override
Definition Model.h:56
int32 EntityCount() const
Definition Model.h:145
void Copy(const FModel &OtherModel)
Definition Model.h:130
const TArray< TSharedPtr< FBody > > & GetBodies() const
Definition Model.h:164
void Add(const TSharedPtr< FBody > &InBody)
Definition Model.h:88
void Append(TArray< TSharedPtr< FBody > > &InNewBody)
Definition Model.h:83
virtual void Remove(const FTopologicalShapeEntity *InBody) override
Definition Model.h:99
virtual void ResetMarkersRecursively() const override
Definition Model.h:66
virtual EEntity GetEntityType() const override
Definition Model.h:76
void Copy(const TSharedPtr< FModel > &OtherModel)
Definition Model.h:122
virtual ~FModel() override
Definition Model.h:36
int32 BodyCount() const
Definition Model.h:150
void Merge(FModel &OtherModel)
Definition Model.h:139
FModel()
Definition Model.h:29
virtual void Empty() override
Definition Model.h:93
virtual void Serialize(FCADKernelArchive &Ar) override
Definition Model.h:41
Definition TopologicalShapeEntity.h:14
Definition CADEntity.cpp:23
EEntity
Definition CADEntity.h:18
U16 Index
Definition radfft.cpp:71