UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
VisualLoggerTypes.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
4#include "CoreMinimal.h"
5#include "EngineDefines.h"
7
8class AActor;
9class UCanvas;
10struct FLogEntryItem;
11
12#define DEFINE_ENUM_TO_STRING(EnumType, EnumPackage) FString EnumToString(const EnumType Value) \
13{ \
14 static const UEnum* TypeEnum = FindObject<UEnum>(nullptr, TEXT(EnumPackage) TEXT(".") TEXT(#EnumType)); \
15 return TypeEnum->GetNameStringByIndex(static_cast<int32>(Value)); \
16}
17#define DECLARE_ENUM_TO_STRING(EnumType) FString EnumToString(const EnumType Value)
18
19namespace UE::VisualLogger
20{
22}
23
25{
26 Invalid = -1,
27 DontCreate = 0,
28 Create = 1,
29};
30
31// flags describing VisualLogger device's features
33{
34 enum Type
35 {
39 };
40}
41
42//types of shape elements
44{
45 Invalid = 0,
46 SinglePoint, // individual points, rendered as plain spheres
47 Sphere,
49 Segment, // pairs of points
50 Path, // sequence of point
51 Box,
52 WireBox,
53 Cone,
57 Capsule,
59 Polygon,
60 Mesh,
61 NavAreaMesh, // convex based mesh with min and max Z values
62 Arrow,
63 Circle,
66 // note that in order to remain backward compatibility in terms of log
67 // serialization new enum values need to be added at the end
68};
69
70#if ENABLE_VISUAL_LOG
72{
73 const FString Name;
74 const FString FriendlyDesc;
75 const ELogVerbosity::Type Verbosity;
76
77 FVisualLogEventBase(const FString& InName, const FString& InFriendlyDesc, ELogVerbosity::Type InVerbosity)
78 : Name(InName), FriendlyDesc(InFriendlyDesc), Verbosity(InVerbosity)
79 {
80 }
81};
82
83struct FVisualLogEvent
84{
85 FString Name;
86 FString UserFriendlyDesc;
89 int32 Counter = 1;
90 int64 UserData = 0;
91 FName TagName;
92
93 FVisualLogEvent() = default;
95 FVisualLogEvent& operator=(const FVisualLogEventBase& Event);
96
97 friend inline bool operator==(const FVisualLogEvent& Left, const FVisualLogEvent& Right)
98 {
99 return Left.Name == Right.Name;
100 }
101};
102
103struct FVisualLogLine
104{
105 FString Line;
108 int32 UniqueId = INDEX_NONE;
109 int64 UserData = 0;
110 FName TagName;
112 bool bMonospace = false;
113 FVisualLogLine() = default;
115 FVisualLogLine(const FVisualLogLine& Other) = default;
118 FVisualLogLine(const FName& InCategory, ELogVerbosity::Type InVerbosity, const FString& InLine, const FColor& InColor, bool bInMonospace);
119};
120
122{
125 int32 UniqueId = INDEX_NONE;
127
128 FVisualLogStatusCategory() = default;
129 explicit FVisualLogStatusCategory(const FString& InCategory/* = TEXT("")*/)
131 {
132 }
133
134 void Add(const FString& Key, const FString& Value);
135 ENGINE_API bool GetDesc(int32 Index, FString& Key, FString& Value) const;
136 void AddChild(const FVisualLogStatusCategory& Child);
137};
138
140{
144 Verbosity(Other.Verbosity),
145 Points(MoveTemp(Other.Points)),
147 UniqueId(Other.UniqueId),
148 Type(Other.Type),
149 Thickness(Other.Thickness)
150 {
151 }
152
155 FVisualLogShapeElement& operator=(const FVisualLogShapeElement& Other) = default;
157
159 FVisualLogShapeElement(const FString& InDescription, const FColor& InColor, uint16 InThickness, const FName& InCategory);
160
161 FString Description;
164 TArray<FVector> Points;
166 int32 UniqueId = INDEX_NONE;
168 uint8 Color = 0xff;
169 union
170 {
171 uint16 Thickness = 0;
172 UE_DEPRECATED(5.6, "Use Thickness instead")
174 uint16 Radius;
175 uint16 Mag;
176 };
177
178 void SetColor(const FColor& InColor);
179 EVisualLoggerShapeElement GetType() const;
180 void SetType(EVisualLoggerShapeElement InType);
181 FColor GetFColor() const;
182};
183
185{
188 FName GraphName;
189 FName DataName;
190 FVector2D SampleValue;
191 int32 UniqueId = INDEX_NONE;
192};
193
195{
196 FName TagName;
200 int32 UniqueId = INDEX_NONE;
201};
202#endif //ENABLE_VISUAL_LOG
203
204struct FVisualLogEntry final
205{
206#if ENABLE_VISUAL_LOG
208 double TimeStamp = -1.0;
210 double WorldTimeStamp = -1.0;
211
212 FVector Location = FVector::ZeroVector;
213 uint8 bPassedClassAllowList : 1 = false;
214 uint8 bPassedObjectAllowList : 1 = false;
215 uint8 bIsAllowedToLog : 1 = false;
216 uint8 bIsLocationValid : 1 = false;
217 uint8 bIsInitialized : 1 = false;
218
225
226 FVisualLogEntry() = default;
227
228 bool ShouldLog(const ECreateIfNeeded ShouldCreate) const
229 {
230 // We serialize and reinitialize entries only when allowed to log and parameter
231 // indicates that new entry can be created.
232 return bIsAllowedToLog && ShouldCreate == ECreateIfNeeded::Create;
233 }
234
235 bool ShouldFlush(double InTimeStamp) const
236 {
237 //Same LogOwner can be used for logs at different time in the frame so need to flush entry right away
238 return bIsInitialized && InTimeStamp > TimeStamp;
239 }
240
241 ENGINE_API void InitializeEntry( const double InTimeStamp );
242 ENGINE_API void Reset();
243 ENGINE_API void SetPassedObjectAllowList(const bool bPassed);
245
246 ENGINE_API void AddText(const FString& TextLine, const FName& CategoryName, ELogVerbosity::Type Verbosity);
247 // path
248 ENGINE_API void AddPath(const TArray<FVector>& Points, const FName& CategoryName, ELogVerbosity::Type Verbosity, const FColor& Color = FColor::White, const FString& Description = TEXT(""), uint16 Thickness = 0);
249 // location
250 ENGINE_API void AddLocation(const FVector& Point, const FName& CategoryName, ELogVerbosity::Type Verbosity, const FColor& Color = FColor::White, const FString& Description = TEXT(""), uint16 Thickness = 0); // location
251 // sphere
252 ENGINE_API void AddSphere(const FVector& Center, float Radius, const FName& CategoryName, ELogVerbosity::Type Verbosity, const FColor& Color = FColor::White, const FString& Description = TEXT(""), bool bInUseWires = false);
253 // segment
254 ENGINE_API void AddSegment(const FVector& Start, const FVector& End, const FName& CategoryName, ELogVerbosity::Type Verbosity, const FColor& Color = FColor::White, const FString& Description = TEXT(""), uint16 Thickness = 0);
255 // box
256 ENGINE_API void AddBox(const FBox& Box, const FMatrix& Matrix, const FName& CategoryName, ELogVerbosity::Type Verbosity, const FColor& Color = FColor::White, const FString& Description = TEXT(""), uint16 Thickness = 0, bool bInUseWires = false);
257 // cone
258 ENGINE_API void AddCone(const FVector& Origin, const FVector& Direction, float Length, float AngleWidth, float AngleHeight, const FName& CategoryName, ELogVerbosity::Type Verbosity, const FColor& Color = FColor::White, const FString& Description = TEXT(""), uint16 Thickness = 0, bool bInUseWires = false);
259 // cylinder
260 ENGINE_API void AddCylinder(const FVector& Start, const FVector& End, float Radius, const FName& CategoryName, ELogVerbosity::Type Verbosity, const FColor& Color = FColor::White, const FString& Description = TEXT(""), uint16 Thickness = 0, bool bInUseWires = false);
261 // capsule
262 ENGINE_API void AddCapsule(const FVector& Base, float HalfHeight, float Radius, const FQuat & Rotation, const FName& CategoryName, ELogVerbosity::Type Verbosity, const FColor& Color = FColor::White, const FString& Description = TEXT(""), bool bInUseWires = false);
263 // custom element
264 ENGINE_API void AddElement(const FVisualLogShapeElement& Element);
265 // NavArea or vertically pulled convex shape
266 ENGINE_API void AddPulledConvex(const TArray<FVector>& ConvexPoints, FVector::FReal MinZ, FVector::FReal MaxZ, const FName& CategoryName, ELogVerbosity::Type Verbosity, const FColor& Color = FColor::White, const FString& Description = TEXT(""));
267 // 3d Mesh
268 ENGINE_API void AddMesh(const TArray<FVector>& Vertices, const TArray<int32>& Indices, const FName& CategoryName, ELogVerbosity::Type Verbosity, const FColor& Color = FColor::White, const FString& Description = TEXT(""));
269 // 2d convex
270 ENGINE_API void AddConvexElement(const TArray<FVector>& Points, const FName& CategoryName, ELogVerbosity::Type Verbosity, const FColor& Color = FColor::White, const FString& Description = TEXT(""));
271 // histogram sample
272 ENGINE_API void AddHistogramData(const FVector2D& DataSample, const FName& CategoryName, ELogVerbosity::Type Verbosity, const FName& GraphName, const FName& DataName);
273 // arrow
274 ENGINE_API void AddArrow(const FVector& Start, const FVector& End, const FName& CategoryName, ELogVerbosity::Type Verbosity, const FColor& Color = FColor::White, const FString& Description = TEXT(""), const uint16 Mag = 0);
275 // boxes
276 ENGINE_API void AddBoxes(const TArray<FBox>& Boxes, const FName& CategoryName, ELogVerbosity::Type Verbosity, const FColor& Color = FColor::White);
277 // circle
278 ENGINE_API void AddCircle(const FVector& Center, const FVector& UpAxis, const float Radius, const FName& CategoryName, ELogVerbosity::Type Verbosity, const FColor& Color, const FString& Description = TEXT(""), uint16 Thickness = 0, bool bInUseWires = false);
279 // coordinate system
280 ENGINE_API void AddCoordinateSystem(const FVector& AxisLoc, const FRotator& AxisRot, const float Scale, const FName& CategoryName, ELogVerbosity::Type Verbosity, const FColor& Color, const FString& Description = TEXT(""), uint16 Thickness = 0);
281
282 // Custom data block
283 ENGINE_API FVisualLogDataBlock& AddDataBlock(const FString& TagName, const TArray<uint8>& BlobDataArray, const FName& CategoryName, ELogVerbosity::Type Verbosity);
284 // Event
285 ENGINE_API int32 AddEvent(const FVisualLogEventBase& Event);
286 // find index of status category
287 int32 FindStatusIndex(const FString& CategoryName);
288
289 // Moves all content to provided entry and reseting our content.
290 ENGINE_API void MoveTo(FVisualLogEntry& Other);
291
292#endif // ENABLE_VISUAL_LOG
293};
294
295#if ENABLE_VISUAL_LOG
296
301{
302public:
304 {
307 : OwnerName(InOwnerName)
310 , Entry(InLogEntry)
311 {}
312 UE_DEPRECATED(5.6, "Use the other constructor")
315 {}
316
317 FName OwnerName;
320 FVisualLogEntry Entry;
321 };
322
323 virtual ~FVisualLogDevice() { }
324 UE_DEPRECATED(5.6, "Serialize now takes a display name in parameter, please use/implement the new variant")
325 virtual void Serialize(const UObject* LogOwner, FName OwnerName, FName InOwnerClassName, const FVisualLogEntry& LogEntry) { Serialize(LogOwner, OwnerName, OwnerName, InOwnerClassName, LogEntry); }
326 virtual void Serialize(const UObject* LogOwner, const FName& InOwnerName, const FName& InOwnerDisplayName, const FName& InOwnerClassName, const FVisualLogEntry& InLogEntry) = 0;
327 virtual void Cleanup(bool bReleaseMemory = false) { /* Empty */ }
328 virtual void StartRecordingToFile(double TimeStamp) { /* Empty */ }
329 virtual void StopRecordingToFile(double TimeStamp) { /* Empty */ }
330 virtual void DiscardRecordingToFile() { /* Empty */ }
331 virtual void SetFileName(const FString& InFileName) { /* Empty */ }
333 virtual bool HasFlags(int32 InFlags) const { return false; }
334 FGuid GetSessionGUID() const { return SessionGUID; }
335 uint32 GetShortSessionID() const { return SessionGUID[0]; }
336protected:
337 FGuid SessionGUID;
338};
339
341{
343
344 FName CategoryName;
345 ELogVerbosity::Type Verbosity;
346
348 {
349 return A.CategoryName == B.CategoryName
350 && A.Verbosity == B.Verbosity;
351 }
352};
353
355{
356 static ENGINE_API FString GenerateTemporaryFilename(const FString& FileExt);
357 static ENGINE_API FString GenerateFilename(const FString& TempFileName, const FString& Prefix, double StartRecordingTime, double EndTimeStamp);
362};
363
365{
366 virtual const FName& GetRowClassName(FName RowName) const = 0;
367 virtual int32 GetSelectedItemIndex(FName RowName) const = 0;
369 virtual const FVisualLogDevice::FVisualLogEntryItem& GetSelectedItem(FName RowName) const = 0;
370
371 virtual const TArray<FName>& GetSelectedRows() const = 0;
372 virtual bool IsRowVisible(FName RowName) const = 0;
373 virtual bool IsItemVisible(FName RowName, int32 ItemIndex) const = 0;
374 virtual UWorld* GetWorld() const = 0;
375 virtual AActor* GetHelperActor(UWorld* InWorld = nullptr) const = 0;
376
377 virtual bool MatchCategoryFilters(const FString& String, ELogVerbosity::Type Verbosity = ELogVerbosity::All) = 0;
378};
379
381{
382public:
384
385 virtual void ResetData(IVisualLoggerEditorInterface* EdInterface) = 0;
386 virtual void DrawData(IVisualLoggerEditorInterface* EdInterface, UCanvas* Canvas) = 0;
387
391};
392
393ENGINE_API FArchive& operator<<(FArchive& Ar, FVisualLogDevice::FVisualLogEntryItem& FrameCacheItem);
401
402inline
403FVisualLogEvent::FVisualLogEvent(const FVisualLogEventBase& Event)
404: Name(Event.Name)
406, Verbosity(Event.Verbosity)
407{
408}
409
410inline
411FVisualLogEvent& FVisualLogEvent::operator= (const FVisualLogEventBase& Event)
412{
413 Name = Event.Name;
414 UserFriendlyDesc = Event.FriendlyDesc;
415 Verbosity = Event.Verbosity;
416 return *this;
417}
418
419inline
420FVisualLogLine::FVisualLogLine(const FName& InCategory, ELogVerbosity::Type InVerbosity, const FString& InLine)
421: Line(InLine)
423, Verbosity(InVerbosity)
424{
425
426}
427
428inline
429FVisualLogLine::FVisualLogLine(const FName& InCategory, ELogVerbosity::Type InVerbosity, const FString& InLine, int64 InUserData)
430: Line(InLine)
432, Verbosity(InVerbosity)
434{
435
436}
437
438inline
439FVisualLogLine::FVisualLogLine(const FName& InCategory, ELogVerbosity::Type InVerbosity, const FString& InLine, const FColor& InColor, bool bInMonospace)
440 : Line(InLine)
442 , Verbosity(InVerbosity)
443 , Color(InColor)
445{
446
447}
448
449inline
450void FVisualLogStatusCategory::Add(const FString& Key, const FString& Value)
451{
452 Data.Add(FString(Key).AppendChar(TEXT('|')) + Value);
453}
454
455inline
456void FVisualLogStatusCategory::AddChild(const FVisualLogStatusCategory& Child)
457{
458 Children.Add(Child);
459}
460
461inline
462FVisualLogShapeElement::FVisualLogShapeElement(const FString& InDescription, const FColor& InColor, uint16 InThickness, const FName& InCategory)
465, Thickness(InThickness)
466{
467 SetColor(InColor);
468}
469
470inline
471void FVisualLogShapeElement::SetColor(const FColor& InColor)
472{
473 Color = (uint8)(((InColor.DWColor() >> 30) << 6) | (((InColor.DWColor() & 0x00ff0000) >> 22) << 4) | (((InColor.DWColor() & 0x0000ff00) >> 14) << 2) | ((InColor.DWColor() & 0x000000ff) >> 6));
474}
475
476inline
477EVisualLoggerShapeElement FVisualLogShapeElement::GetType() const
478{
479 return Type;
480}
481
482inline
483void FVisualLogShapeElement::SetType(EVisualLoggerShapeElement InType)
484{
485 Type = InType;
486}
487
488inline
489FColor FVisualLogShapeElement::GetFColor() const
490{
491 FColor RetColor(((Color & 0xc0) << 24) | ((Color & 0x30) << 18) | ((Color & 0x0c) << 12) | ((Color & 0x03) << 6));
492 RetColor.A = (RetColor.A * 255) / 192; // convert alpha to 0-255 range
493 return RetColor;
494}
495
496
497inline
498int32 FVisualLogEntry::FindStatusIndex(const FString& CategoryName)
499{
501 {
502 if (Status[TestCategoryIndex].Category == CategoryName)
503 {
504 return TestCategoryIndex;
505 }
506 }
507
508 return INDEX_NONE;
509}
510
511#endif // ENABLE_VISUAL_LOG
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
FPlatformTypes::int8 int8
An 8-bit signed integer.
Definition Platform.h:1121
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
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
FArchive & operator<<(FArchive &Ar, FEnvQueryDebugProfileData::FStep &Data)
Definition EnvQueryTypes.cpp:489
#define PRAGMA_ENABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:12
#define PRAGMA_DISABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:8
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
EVisualLoggerShapeElement
Definition VisualLoggerTypes.h:44
ECreateIfNeeded
Definition VisualLoggerTypes.h:25
uint8_t uint8
Definition binka_ue_file_header.h:8
uint16_t uint16
Definition binka_ue_file_header.h:7
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Actor.h:257
Definition Archive.h:1208
Definition NameTypes.h:617
CORE_API FString ToString() const
Definition UnrealNames.cpp:3537
Definition Array.h:670
Definition EnumAsByte.h:22
Definition UnrealString.h.inl:34
Definition SharedPointer.h:692
Definition Canvas.h:159
Definition Object.h:95
Definition World.h:918
GeometryCollection::Facades::FMuscleActivationData Data
Definition MuscleActivationConstraints.h:15
Category
Definition DiffResults.h:63
Type
Definition LogVerbosity.h:17
@ NoLogging
Definition LogVerbosity.h:19
@ SetColor
Definition LogVerbosity.h:59
@ All
Definition LogVerbosity.h:56
@ Description
Definition PathFollowingComponent.h:177
Type
Definition PawnAction_Move.h:11
Definition VisualLoggerTypes.h:33
Type
Definition VisualLoggerTypes.h:35
@ NoFlags
Definition VisualLoggerTypes.h:36
@ CanSaveToFile
Definition VisualLoggerTypes.h:37
@ StoreLogsLocally
Definition VisualLoggerTypes.h:38
bool operator==(const FCachedAssetKey &A, const FCachedAssetKey &B)
Definition AssetDataMap.h:501
Definition VisualLoggerTypes.cpp:16
const FName NAME_UnnamedCategory
Definition VisualLoggerTypes.cpp:17
U16 Index
Definition radfft.cpp:71
Definition Color.h:486
static CORE_API const FColor White
Definition Color.h:749
uint32 & DWColor(void)
Definition Color.h:495
Definition Guid.h:109
Definition VisualLoggerTypes.h:205
static CORE_API const TMatrix Identity
Definition Matrix.h:52
static CORE_API const TVector< double > ZeroVector
Definition Vector.h:79
double FReal
Definition Vector.h:55