UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
TechSoftUniqueObject.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
4#include "TechSoftIncludes.h"
5
6#ifdef WITH_HOOPS
7namespace UE::CADKernel::TechSoft
8{
9 // Single-ownership smart TeshSoft object
10 // Use this when you need to manage TechSoft object's lifetime.
11 //
12 // TechSoft give access to void pointers
13 // According to the context, the class name of the void pointer is known but the class is unknown
14 // i.e. A3DSDKTypes.h defines all type like :
15 // typedef void A3DEntity;
16 // typedef void A3DAsmModelFile; ...
17 //
18 // From a pointer, TechSoft give access to a copy of the associated structure :
19 //
20 // const A3DXXXXX* pPointer;
21 // A3DXXXXXData sData; // the structure
22 // A3D_INITIALIZE_DATA(A3DXXXXXData, sData); // initialization of the structure
23 // A3DXXXXXXGet(pPointer, &sData); // Copy of the data of the pointer in the structure
24 // ...
25 // A3DXXXXXXGet(NULL, &sData); // Free the structure
26 //
27 // A3D_INITIALIZE_DATA, and all A3DXXXXXXGet methods are TechSoft macro
28 //
29
30 template<class ObjectType, class IndexerType>
32 {
33 public:
34
40 , Status(A3DStatus::A3D_SUCCESS)
41 {
43 }
44
49 explicit TUniqueObjectBase(IndexerType DataPtr)
51 {
53 FillFrom(DataPtr);
54 }
55
57 {
58 ResetData();
59 }
60
65 {
66 ResetData();
67
69 {
70 Status = A3DStatus::A3D_ERROR;
71 }
72 else
73 {
74 Status = GetData(EntityPtr);
75 if (Status == A3DStatus::A3D_SUCCESS)
76 {
77 bDataFromTechSoft = true;
78 }
79 }
80 return Status;
81 }
82
83 template<typename... InArgTypes>
84 A3DStatus FillWith(A3DStatus(*Getter)(const A3DEntity*, ObjectType*, InArgTypes&&...), const A3DEntity* EntityPtr, InArgTypes&&... Args)
85 {
86 ResetData();
87
89 {
90 Status = A3DStatus::A3D_ERROR;
91 }
92 else
93 {
94 Status = Getter(EntityPtr, &Data, Forward<InArgTypes>(Args)...);
95 if (Status == A3DStatus::A3D_SUCCESS)
96 {
97 bDataFromTechSoft = true;
98 }
99 }
100
101 return Status;
102 }
103
107 void Reset()
108 {
109 ResetData();
110 }
111
117 A3DStatus GetStatus()
118 {
119 return Status;
120 }
121
125 const bool IsValid() const
126 {
127 return Status == A3DStatus::A3D_SUCCESS;
128 }
129
130 // Non-copyable
131 TUniqueObjectBase(const TUniqueObjectBase&) = delete;
132 TUniqueObjectBase& operator=(const TUniqueObjectBase&) = delete;
133
134 // Conversion methods
135
136 const ObjectType& operator*() const
137 {
138 return Data;
139 }
140
141 ObjectType& operator*()
142 {
143 check(IsValid());
144 return Data;
145 }
146
147 const ObjectType* operator->() const
148 {
149 check(IsValid());
150 return &Data;
151 }
152
153 ObjectType* operator->()
154 {
155 check(IsValid());
156 return &Data;
157 }
158
162 ObjectType* GetPtr()
163 {
164 if (Status != A3DStatus::A3D_SUCCESS)
165 {
166 return nullptr;
167 }
168 return &Data;
169 }
170
171 private:
172 ObjectType Data;
173 bool bDataFromTechSoft = false;
174 A3DStatus Status = A3DStatus::A3D_ERROR;
175
182
184
186
187 void ResetData()
188 {
190 {
192 }
193 else
194 {
196 }
197 Status = A3DStatus::A3D_SUCCESS;
198 bDataFromTechSoft = false;
199 }
200 };
201
202 template<class ObjectType>
204
205 template<class ObjectType>
207
209 {
210 public:
211 static const uint32 Material;
212 static const uint32 Picture;
213 static const uint32 RgbColor;
214 static const uint32 Style;
215 static const uint32 TextureApplication;
216 static const uint32 TextureDefinition;
217 };
218
219}
220#endif
221
#define check(expr)
Definition AssertionMacros.h:314
UE_FORCEINLINE_HINT FLinearColor operator*(float Scalar, const FLinearColor &Color)
Definition Color.h:473
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE_FORCEINLINE_HINT uint32 GetPtr() const
Definition LockFreeList.h:15
auto GetData(const TStringConversion< Converter, DefaultConversionSize > &Conversion) -> decltype(Conversion.Get())
Definition StringConv.h:802
void InitializeData(const TInType &InData, EPixelFormat InFormat, uint8 *OutData, uint32 &OutByteCount)
Definition SystemTextures.cpp:1375
uint32_t uint32
Definition binka_ue_file_header.h:6
GeometryCollection::Facades::FMuscleActivationData Data
Definition MuscleActivationConstraints.h:15
@ false
Definition radaudio_common.h:23