From b79830f3398fa736826eb4e09d8baee4a7d6f549 Mon Sep 17 00:00:00 2001 From: Benjamin Thomas Blodgett Date: Fri, 27 Mar 2026 00:44:00 -0400 Subject: [PATCH 1/3] Add `DrawCylinder` & `DrawWireCylinder` --- .../EditorScriptingToolsCommon/LevelEditorToolBase.cpp | 10 ++++++++++ .../EditorScriptingToolsCommon/LevelEditorToolBase.h | 6 ++++++ 2 files changed, 16 insertions(+) diff --git a/Source/EditorScriptingTools/Private/EditorScriptingToolsCommon/LevelEditorToolBase.cpp b/Source/EditorScriptingTools/Private/EditorScriptingToolsCommon/LevelEditorToolBase.cpp index 45ec3c5..a0d70bc 100644 --- a/Source/EditorScriptingTools/Private/EditorScriptingToolsCommon/LevelEditorToolBase.cpp +++ b/Source/EditorScriptingTools/Private/EditorScriptingToolsCommon/LevelEditorToolBase.cpp @@ -90,6 +90,16 @@ void ULevelEditorToolBase::DrawSpline(FDummyStruct DrawPrimitivesContext, USplin LevelViewportPrimitiveDrawingUtils::DrawSpline(GetDrawPrimitivesContext(), SplineComponent, LineColor, DepthPriorityGroup); } +void ULevelEditorToolBase::DrawCylinder(FDummyStruct DrawPrimitivesContext, const class UMaterialInterface* Material, const FVector& Center, const FRotator& Rotation, float Radius, float HalfHeight, int32 NumSides, EDepthPriorityGroup DepthPriorityGroup, float DepthBias) +{ + LevelViewportPrimitiveDrawingUtils::DrawCylinder(GetDrawPrimitivesContext(), Center, Rotation, Material, Radius, HalfHeight, NumSides, DepthPriorityGroup, DepthBias); +} + +void ULevelEditorToolBase::DrawWireCylinder(FDummyStruct DrawPrimitivesContext, const FVector& Center, const FRotator& Rotation, float Radius, float HalfHeight, int32 NumSides /*= 16*/, FLinearColor Color /*= FLinearColor::White*/, EDepthPriorityGroup DepthPriorityGroup /*= EDepthPriorityGroup::World*/, float Thickness /*= 0.0f*/, float DepthBias /*= 0.0f*/) +{ + LevelViewportPrimitiveDrawingUtils::DrawWireCylinder(GetDrawPrimitivesContext(), Center, Rotation, Color, Radius, HalfHeight, NumSides, DepthPriorityGroup, Thickness, DepthBias); +} + /** ~Level Viewport Canvas Drawing *********************************************************************************************************************************************/ /********************************************************************************************************************************************************************************/ diff --git a/Source/EditorScriptingTools/Private/EditorScriptingToolsCommon/LevelEditorToolBase.h b/Source/EditorScriptingTools/Private/EditorScriptingToolsCommon/LevelEditorToolBase.h index d5377d7..41e95cf 100644 --- a/Source/EditorScriptingTools/Private/EditorScriptingToolsCommon/LevelEditorToolBase.h +++ b/Source/EditorScriptingTools/Private/EditorScriptingToolsCommon/LevelEditorToolBase.h @@ -70,6 +70,12 @@ class ULevelEditorToolBase : public UObject, public ILevelEditingContext UFUNCTION(BlueprintCallable, Category = "LevelEditingViewport|DrawPrimitives", meta = (HideSelfPin = "true")) void DrawSpline(FDummyStruct DrawPrimitivesContext, USplineComponent* SplineComponent, FLinearColor LineColor = FLinearColor::White, EDepthPriorityGroup DepthPriorityGroup = EDepthPriorityGroup::World); + UFUNCTION(BlueprintCallable, Category = "LevelEditingViewport|DrawPrimitives", meta = (HideSelfPin = "true")) + void DrawCylinder(FDummyStruct DrawPrimitivesContext, const class UMaterialInterface* Material, const FVector& Center, const FRotator& Rotation, float Radius, float HalfHeight, int32 NumSides = 16, EDepthPriorityGroup DepthPriorityGroup = EDepthPriorityGroup::World, float DepthBias = 0.0f); + + UFUNCTION(BlueprintCallable, Category = "LevelEditingViewport|DrawPrimitives", meta = (HideSelfPin = "true")) + void DrawWireCylinder(FDummyStruct DrawPrimitivesContext, const FVector& Center, const FRotator& Rotation, float Radius, float HalfHeight, int32 NumSides = 16, FLinearColor Color = FLinearColor::White, EDepthPriorityGroup DepthPriorityGroup = EDepthPriorityGroup::World, float Thickness = 0.0f, float DepthBias = 0.0f); + //~ Level Viewport Canvas Drawing ********************************************************************************************************************************************/ From 49e2dba8369d45ad72f39ddf1f8a822f946936e1 Mon Sep 17 00:00:00 2001 From: Benjamin Thomas Blodgett Date: Fri, 27 Mar 2026 00:50:33 -0400 Subject: [PATCH 2/3] Fix DrawCylinder's parameter constness to match header --- .../Private/Utils/LevelViewportPrimitiveDrawingUtils.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/EditorScriptingTools/Private/Utils/LevelViewportPrimitiveDrawingUtils.cpp b/Source/EditorScriptingTools/Private/Utils/LevelViewportPrimitiveDrawingUtils.cpp index 974e8e0..702e4f8 100644 --- a/Source/EditorScriptingTools/Private/Utils/LevelViewportPrimitiveDrawingUtils.cpp +++ b/Source/EditorScriptingTools/Private/Utils/LevelViewportPrimitiveDrawingUtils.cpp @@ -97,7 +97,7 @@ namespace LevelViewportPrimitiveDrawingUtils } } - void DrawCylinder(const FDrawPrimitivesContext& Context, const FVector& Center, const FRotator& Rotation, UMaterialInterface* Material, float Radius, float HalfHeight, uint32 NumSides, EDepthPriorityGroup DepthPriorityGroup, float DepthBias) + void DrawCylinder(const FDrawPrimitivesContext& Context, const FVector& Center, const FRotator& Rotation, const UMaterialInterface* Material, float Radius, float HalfHeight, uint32 NumSides, EDepthPriorityGroup DepthPriorityGroup, float DepthBias) { if (FPrimitiveDrawInterface* PDI = Context.PDI) { From 937f4934804790ac24c32446fe241684da4374db Mon Sep 17 00:00:00 2001 From: Benjamin Thomas Blodgett Date: Sun, 29 Mar 2026 23:06:24 -0400 Subject: [PATCH 3/3] Fix `LevelViewportPrimitiveDrawingUtils` `DrawCylinder` implementation. Previous implementation seems to have been WIP. Finished it, and tested it. Engine naming of parameter `Base` refers to the center. --- .../Private/Utils/LevelViewportPrimitiveDrawingUtils.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Source/EditorScriptingTools/Private/Utils/LevelViewportPrimitiveDrawingUtils.cpp b/Source/EditorScriptingTools/Private/Utils/LevelViewportPrimitiveDrawingUtils.cpp index 702e4f8..13fc6d4 100644 --- a/Source/EditorScriptingTools/Private/Utils/LevelViewportPrimitiveDrawingUtils.cpp +++ b/Source/EditorScriptingTools/Private/Utils/LevelViewportPrimitiveDrawingUtils.cpp @@ -101,10 +101,11 @@ namespace LevelViewportPrimitiveDrawingUtils { if (FPrimitiveDrawInterface* PDI = Context.PDI) { + const FMaterialRenderProxy* MaterialRenderProxy = Material != nullptr ? Material->GetRenderProxy() : GEditor->ArrowMaterial->GetRenderProxy(); const FVector X = Rotation.Vector(); const FVector Y = FRotationMatrix(Rotation).GetScaledAxis(EAxis::Y); const FVector Z = FRotationMatrix(Rotation).GetScaledAxis(EAxis::Z); - //::DrawCylinder(PDI, Center, X, Y, Z, Radius, HalfHeight, NumSides, Material, ENUM_TO_UINT8(DepthPriorityGroup)); + ::DrawCylinder(PDI, FMatrix::Identity, Center, X, Y, Z, Radius, HalfHeight, NumSides, MaterialRenderProxy, CAST_TO_UINT8(DepthPriorityGroup)); } }