UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
WorldPartitionDraw2DContext.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
6class UCanvas;
9
12
25
41
57
59{
60public:
63 void Draw(const FWorldPartitionCanvasItems& Items);
64
65private:
66 UCanvas* Canvas;
67 FBatchedElements* CanvasLineBatchedElements;
68 FBatchedElements* CanvasTriangleBatchedElements;
69};
70
72{
73public:
75 {
76 Lines.Reserve(1024);
77 Boxes.Reserve(1024);
78 MultiLineTexts.Reserve(128);
79 }
80
85
90
95
96 void Reset()
97 {
98 Lines.Reset();
99 Boxes.Reset();
100 MultiLineTexts.Reset();
101 }
102
103 int32 GetLineCount() const { return Lines.Num(); }
104 int32 GetBoxCount() const { return Boxes.Num(); }
105
107
108private:
112
114};
115
117{
118public:
123
125 {
126 CanvasRegion = InCanvasRegion;
127 WorldRegion = InWorldRegion;
128 bDrawGridBounds = false;
129 bDrawGridAxis = false;
130 bIsDetailedMode = false;
131 UsedCanvasBounds = FBox2D(ForceInit);
132 DesiredWorldBounds = FBox2D(ForceInit);
133 CanvasItems.Reset();
134 }
135
136 void SetIsDetailedMode(bool bValue) { bIsDetailedMode = bValue; }
137 bool IsDetailedMode() const { return bIsDetailedMode; }
138
139 void SetDrawGridBounds(bool bValue) { bDrawGridBounds = bValue; }
140 bool GetDrawGridBounds() const { return bDrawGridBounds; }
141
142 void SetDrawGridAxis(bool bValue) { bDrawGridAxis = bValue; }
143 bool GetDrawGridAxis() const { return bDrawGridAxis; }
144
146 const FBox2D& GetUsedCanvasBounds() const { return UsedCanvasBounds; }
147
149 const FBox2D& GetDesiredWorldBounds() const { return DesiredWorldBounds; }
150
151 const FBox2D& GetCanvasRegion() const { check(CanvasRegion.bIsValid); return CanvasRegion; }
152 const FBox2D& GetWorldRegion() const { check(WorldRegion.bIsValid); return WorldRegion; }
153 int32 GetLineCount() const { return CanvasItems.GetLineCount(); }
154 int32 GetBoxCount() const { return CanvasItems.GetBoxCount(); }
155
156 bool PushDrawSegment(const FBox2D& InBounds, const FVector2D& A, const FVector2D& B, const FLinearColor& InColor, float InLineThickness)
157 {
158 TArray<FVector2D> Intersections;
159 if (BoxSegmentIntersect(InBounds, A, B, Intersections))
160 {
161 FWorldPartitionLineCanvasItem Line(Intersections[0], Intersections[1], InColor, InLineThickness);
162 CanvasItems.AddLine(Line);
163 return true;
164 }
165 return false;
166 };
167
168 bool PushDrawBox(const FBox2D& InBounds, const FVector2D& A, const FVector2D& B, const FVector2D& C, const FVector2D& D, const FLinearColor& InColor, float InLineThickness)
169 {
174 return true;
175 };
176
177 bool PushDrawTile(const FBox2D& InBounds, const FVector2D& A, const FVector2D& B, const FVector2D& C, const FVector2D& D, const FLinearColor& InColor)
178 {
179 const FBox2D ClipBox = InBounds.Overlap(FBox2D({ A, B, C, D}));
180 if (ClipBox.bIsValid)
181 {
183 CanvasItems.AddBox(Box);
184 return true;
185 }
186 return false;
187 };
188
194
195 template <class WorldToScreenFunc>
197 {
198 FVector2D A = WorldToScreen(Min);
199 FVector2D B = WorldToScreen(Min + FVector2D(Size.X, 0));
200 FVector2D C = WorldToScreen(Min + Size);
201 FVector2D D = WorldToScreen(Min + FVector2D(0, Size.Y));
203 };
204
205 template <class WorldToScreenFunc>
206 void LocalDrawBox(const FBox2D& GridScreenBounds, const FVector2D& Min, const FVector2D& Size, const FLinearColor& Color, float LineThickness, WorldToScreenFunc WorldToScreen)
207 {
208 FVector2D A = WorldToScreen(Min);
209 FVector2D B = WorldToScreen(Min + FVector2D(Size.X, 0));
210 FVector2D C = WorldToScreen(Min + Size);
211 FVector2D D = WorldToScreen(Min + FVector2D(0, Size.Y));
212 PushDrawBox(GridScreenBounds, A, B, C, D, Color, LineThickness);
213 };
214
215 template <class WorldToScreenFunc>
216 void LocalDrawSegment(const FBox2D& GridScreenBounds, const FVector2D& Start, const FVector2D& End, const FLinearColor& Color, float LineThickness, WorldToScreenFunc WorldToScreen)
217 {
218 FVector2D A = WorldToScreen(Start);
219 FVector2D B = WorldToScreen(End);
220 PushDrawSegment(GridScreenBounds, A, B, Color, LineThickness);
221 };
222
223 const FWorldPartitionCanvasItems& GetCanvasItems() const { return CanvasItems; }
224
225private:
226
227 bool BoxSegmentIntersect(const FBox2D& Box, const FVector2D& a1, const FVector2D& a2, TArray<FVector2D>& Intersections);
228
229 bool bDrawGridBounds;
230 bool bDrawGridAxis;
231 bool bIsDetailedMode;
232 FBox2D CanvasRegion;
233 FBox2D WorldRegion;
234 FBox2D UsedCanvasBounds;
235 FBox2D DesiredWorldBounds;
236 FWorldPartitionCanvasItems CanvasItems;
237};
#define check(expr)
Definition AssertionMacros.h:314
@ ForceInit
Definition CoreMiscDefines.h:155
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
UE::Math::TVector2< double > FVector2D
Definition MathFwd.h:48
UE::Math::TBox2< double > FBox2D
Definition MathFwd.h:56
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint32 Size
Definition VulkanMemory.cpp:4034
Definition BatchedElements.h:102
Definition WorldPartitionDraw2DContext.h:43
FLinearColor Color
Definition WorldPartitionDraw2DContext.h:54
FVector2D Points[4]
Definition WorldPartitionDraw2DContext.h:55
FWorldPartitionCanvasBoxItem(const FVector2D &InPointA, const FVector2D &InPointB, const FVector2D &InPointC, const FVector2D &InPointD, const FLinearColor &InColor=FLinearColor::White)
Definition WorldPartitionDraw2DContext.h:45
Definition WorldPartitionDraw2DContext.h:72
void Draw(FWorldPartitionDraw2DCanvas &InCanvas)
void AddText(FWorldPartitionCanvasMultiLineTextItem &InMultiLineText)
Definition WorldPartitionDraw2DContext.h:91
int32 GetLineCount() const
Definition WorldPartitionDraw2DContext.h:103
void Reset()
Definition WorldPartitionDraw2DContext.h:96
int32 GetBoxCount() const
Definition WorldPartitionDraw2DContext.h:104
void AddLine(FWorldPartitionLineCanvasItem &InLine)
Definition WorldPartitionDraw2DContext.h:81
FWorldPartitionCanvasItems()
Definition WorldPartitionDraw2DContext.h:74
void AddBox(FWorldPartitionCanvasBoxItem &InBox)
Definition WorldPartitionDraw2DContext.h:86
Definition WorldPartitionDraw2DContext.h:14
FWorldPartitionCanvasMultiLineText MultiLineText
Definition WorldPartitionDraw2DContext.h:23
FVector2D Position
Definition WorldPartitionDraw2DContext.h:22
FWorldPartitionCanvasMultiLineTextItem(const FVector2D &InPosition, const FWorldPartitionCanvasMultiLineText &InMultiLineText)
Definition WorldPartitionDraw2DContext.h:16
Definition WorldPartitionDraw2DContext.h:59
void PrepareDraw(int32 InLineCount, int32 InBoxCount)
Definition WorldPartitionDraw2DContext.cpp:20
void Draw(const FWorldPartitionCanvasItems &Items)
Definition WorldPartitionDraw2DContext.cpp:32
Definition WorldPartitionDraw2DContext.h:117
bool GetDrawGridBounds() const
Definition WorldPartitionDraw2DContext.h:140
bool PushDrawBox(const FBox2D &InBounds, const FVector2D &A, const FVector2D &B, const FVector2D &C, const FVector2D &D, const FLinearColor &InColor, float InLineThickness)
Definition WorldPartitionDraw2DContext.h:168
const FBox2D & GetUsedCanvasBounds() const
Definition WorldPartitionDraw2DContext.h:146
void LocalDrawSegment(const FBox2D &GridScreenBounds, const FVector2D &Start, const FVector2D &End, const FLinearColor &Color, float LineThickness, WorldToScreenFunc WorldToScreen)
Definition WorldPartitionDraw2DContext.h:216
bool GetDrawGridAxis() const
Definition WorldPartitionDraw2DContext.h:143
void SetDrawGridAxis(bool bValue)
Definition WorldPartitionDraw2DContext.h:142
int32 GetLineCount() const
Definition WorldPartitionDraw2DContext.h:153
void LocalDrawBox(const FBox2D &GridScreenBounds, const FVector2D &Min, const FVector2D &Size, const FLinearColor &Color, float LineThickness, WorldToScreenFunc WorldToScreen)
Definition WorldPartitionDraw2DContext.h:206
FWorldPartitionDraw2DContext()
Definition WorldPartitionDraw2DContext.h:119
const FBox2D & GetCanvasRegion() const
Definition WorldPartitionDraw2DContext.h:151
const FWorldPartitionCanvasItems & GetCanvasItems() const
Definition WorldPartitionDraw2DContext.h:223
void SetIsDetailedMode(bool bValue)
Definition WorldPartitionDraw2DContext.h:136
void SetDrawGridBounds(bool bValue)
Definition WorldPartitionDraw2DContext.h:139
int32 GetBoxCount() const
Definition WorldPartitionDraw2DContext.h:154
const FBox2D & GetDesiredWorldBounds() const
Definition WorldPartitionDraw2DContext.h:149
bool IsDetailedMode() const
Definition WorldPartitionDraw2DContext.h:137
void SetUsedCanvasBounds(const FBox2D &InUsedCanvasBounds)
Definition WorldPartitionDraw2DContext.h:145
const FBox2D & GetWorldRegion() const
Definition WorldPartitionDraw2DContext.h:152
bool PushDrawText(FWorldPartitionCanvasMultiLineTextItem &InMultiLineText)
Definition WorldPartitionDraw2DContext.h:189
void Initialize(const FBox2D &InCanvasRegion, const FBox2D &InWorldRegion)
Definition WorldPartitionDraw2DContext.h:124
void SetDesiredWorldBounds(const FBox2D &InDesiredWorldBounds)
Definition WorldPartitionDraw2DContext.h:148
bool PushDrawSegment(const FBox2D &InBounds, const FVector2D &A, const FVector2D &B, const FLinearColor &InColor, float InLineThickness)
Definition WorldPartitionDraw2DContext.h:156
bool PushDrawTile(const FBox2D &InBounds, const FVector2D &A, const FVector2D &B, const FVector2D &C, const FVector2D &D, const FLinearColor &InColor)
Definition WorldPartitionDraw2DContext.h:177
void LocalDrawTile(const FBox2D &GridScreenBounds, const FVector2D &Min, const FVector2D &Size, const FLinearColor &Color, WorldToScreenFunc WorldToScreen)
Definition WorldPartitionDraw2DContext.h:196
Definition WorldPartitionDraw2DContext.h:27
FLinearColor Color
Definition WorldPartitionDraw2DContext.h:36
FVector End
Definition WorldPartitionDraw2DContext.h:38
FWorldPartitionLineCanvasItem(const FVector2D &InStart, const FVector2D &InEnd, const FLinearColor &InColor=FLinearColor::White, float InThickness=1)
Definition WorldPartitionDraw2DContext.h:29
float Thickness
Definition WorldPartitionDraw2DContext.h:39
FVector Start
Definition WorldPartitionDraw2DContext.h:37
UE_REWRITE SizeType Num() const
Definition Array.h:1144
void Reset(SizeType NewSize=0)
Definition Array.h:2246
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696
UE_FORCEINLINE_HINT void Reserve(SizeType Number)
Definition Array.h:3016
Definition Canvas.h:159
Definition Color.h:48
static CORE_API const FLinearColor White
Definition Color.h:456
Definition Tuple.h:652
TBox2< T > Overlap(const TBox2< T > &Other) const
Definition Box2D.h:577
bool bIsValid
Definition Box2D.h:42
static UE_FORCEINLINE_HINT TVector2< T > Max(const TVector2< T > &A, const TVector2< T > &B)
Definition Vector2D.h:953