UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
CombinedTransformGizmo.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "InteractiveGizmo.h"
12
13#include "CombinedTransformGizmo.generated.h"
14
24namespace UE::GizmoUtil
25{
26 struct FTransformSubGizmoCommonParams;
27 struct FTransformSubGizmoSharedState;
28}
33
47UCLASS(Transient, NotPlaceable, Hidden, NotBlueprintable, NotBlueprintType, MinimalAPI)
49{
51public:
52
54
55public:
56 //
57 // Translation Components
58 //
59
61 UPROPERTY()
62 TObjectPtr<UPrimitiveComponent> TranslateX;
63
65 UPROPERTY()
66 TObjectPtr<UPrimitiveComponent> TranslateY;
67
69 UPROPERTY()
70 TObjectPtr<UPrimitiveComponent> TranslateZ;
71
72
74 UPROPERTY()
75 TObjectPtr<UPrimitiveComponent> TranslateYZ;
76
78 UPROPERTY()
79 TObjectPtr<UPrimitiveComponent> TranslateXZ;
80
82 UPROPERTY()
83 TObjectPtr<UPrimitiveComponent> TranslateXY;
84
85 //
86 // Rotation Components
87 //
88
90 UPROPERTY()
91 TObjectPtr<UPrimitiveComponent> RotateX;
92
94 UPROPERTY()
95 TObjectPtr<UPrimitiveComponent> RotateY;
96
98 UPROPERTY()
99 TObjectPtr<UPrimitiveComponent> RotateZ;
100
102 UPROPERTY()
103 TObjectPtr<UPrimitiveComponent> RotationSphere;
104
105 UPROPERTY()
106 TObjectPtr<UPrimitiveComponent> FreeRotateHandle;
107
108 UPROPERTY()
109 TObjectPtr<UPrimitiveComponent> FreeTranslateHandle;
110
111 //
112 // Scaling Components
113 //
114
116 UPROPERTY()
117 TObjectPtr<UPrimitiveComponent> UniformScale;
118
119
121 UPROPERTY()
122 TObjectPtr<UPrimitiveComponent> AxisScaleX;
123
125 UPROPERTY()
126 TObjectPtr<UPrimitiveComponent> AxisScaleY;
127
129 UPROPERTY()
130 TObjectPtr<UPrimitiveComponent> AxisScaleZ;
131
132
134 UPROPERTY()
135 TObjectPtr<UPrimitiveComponent> PlaneScaleYZ;
136
138 UPROPERTY()
139 TObjectPtr<UPrimitiveComponent> PlaneScaleXZ;
140
142 UPROPERTY()
143 TObjectPtr<UPrimitiveComponent> PlaneScaleXY;
144
145
146
147public:
161 bool ReplaceSubGizmoComponent(ETransformGizmoSubElements Element, UPrimitiveComponent* NewComponent,
162 const FTransform& SubGizmoToGizmo, UPrimitiveComponent** ReplacedComponentOut = nullptr);
163
169 UWorld* World, UGizmoViewContext* GizmoViewContext
170 );
171
177 UWorld* World, UGizmoViewContext* GizmoViewContext,
179 );
180
181private:
182 TArray<TWeakPtr<UE::GizmoRenderingUtil::FSubGizmoTransformAdjuster>> AdjustersThatMirrorOnlyInCombinedMode;
184
185 // These store versions of the axis scale components that can be used when not using a combined gizmo,
186 // if they differ.
187 UPROPERTY()
188 TObjectPtr<UPrimitiveComponent> FullAxisScaleX;
189 UPROPERTY()
190 TObjectPtr<UPrimitiveComponent> FullAxisScaleY;
191 UPROPERTY()
192 TObjectPtr<UPrimitiveComponent> FullAxisScaleZ;
193};
194
195
196
197
198
241
242
243
244
245
246
247UCLASS(MinimalAPI)
291
292
318
319
335UCLASS(MinimalAPI)
337{
339
340public:
341
342 INTERACTIVETOOLSFRAMEWORK_API virtual void SetWorld(UWorld* World);
344 INTERACTIVETOOLSFRAMEWORK_API virtual void SetSubGizmoBuilderIdentifiers(FString AxisPositionBuilderIdentifier, FString PlanePositionBuilderIdentifier, FString AxisAngleBuilderIdentifier);
345 INTERACTIVETOOLSFRAMEWORK_API virtual void SetUpdateHoverFunction(TFunction<void(UPrimitiveComponent*, bool)> HoverFunction);
346 INTERACTIVETOOLSFRAMEWORK_API virtual void SetUpdateCoordSystemFunction(TFunction<void(UPrimitiveComponent*, EToolContextCoordinateSystem)> CoordSysFunction);
347
360 INTERACTIVETOOLSFRAMEWORK_API bool SetSubGizmoComponent(ETransformGizmoSubElements Element, UPrimitiveComponent* Component,
362
371 INTERACTIVETOOLSFRAMEWORK_API virtual void SetWorldAlignmentFunctions(
372 TUniqueFunction<bool()>&& ShouldAlignDestination,
373 TUniqueFunction<bool(const FRay&, FVector&)>&& DestinationAlignmentRayCaster
374 );
375
382 INTERACTIVETOOLSFRAMEWORK_API void SetCustomTranslationDeltaFunctions(
383 TFunction<bool(double AxisDelta, double& SnappedDelta)> XAxis,
384 TFunction<bool(double AxisDelta, double& SnappedDelta)> YAxis,
385 TFunction<bool(double AxisDelta, double& SnappedDelta)> ZAxis);
386 INTERACTIVETOOLSFRAMEWORK_API void SetCustomRotationDeltaFunctions(
387 TFunction<bool(double AxisDelta, double& SnappedDelta)> XAxis,
388 TFunction<bool(double AxisDelta, double& SnappedDelta)> YAxis,
389 TFunction<bool(double AxisDelta, double& SnappedDelta)> ZAxis);
390 INTERACTIVETOOLSFRAMEWORK_API void SetCustomScaleDeltaFunctions(
391 TFunction<bool(double AxisDelta, double& SnappedDelta)> XAxis,
392 TFunction<bool(double AxisDelta, double& SnappedDelta)> YAxis,
393 TFunction<bool(double AxisDelta, double& SnappedDelta)> ZAxis);
394
401 INTERACTIVETOOLSFRAMEWORK_API virtual void SetIsNonUniformScaleAllowedFunction(
402 TUniqueFunction<bool()>&& IsNonUniformScaleAllowed
403 );
404
409 virtual bool IsNonUniformScaleAllowed() const { return IsNonUniformScaleAllowedFunc(); }
410
415 INTERACTIVETOOLSFRAMEWORK_API virtual void SetDisallowNegativeScaling(bool bDisallow);
416 //~ TODO: Should the above affect uniform scaling too?
417
418 // UInteractiveGizmo overrides
419 INTERACTIVETOOLSFRAMEWORK_API virtual void Setup() override;
420 INTERACTIVETOOLSFRAMEWORK_API virtual void Shutdown() override;
421 INTERACTIVETOOLSFRAMEWORK_API virtual void Tick(float DeltaTime) override;
422
428 INTERACTIVETOOLSFRAMEWORK_API virtual void SetActiveTarget(UTransformProxy* Target, IToolContextTransactionProvider* TransactionProvider = nullptr);
429
433 INTERACTIVETOOLSFRAMEWORK_API virtual void ClearActiveTarget();
434
436 UPROPERTY()
438
442 ACombinedTransformGizmoActor* GetGizmoActor() const { return GizmoActor.Get(); }
443
447 INTERACTIVETOOLSFRAMEWORK_API FTransform GetGizmoTransform() const;
448
455 INTERACTIVETOOLSFRAMEWORK_API void ReinitializeGizmoTransform(const FTransform& NewTransform, bool bKeepGizmoUnscaled = true);
456
462 INTERACTIVETOOLSFRAMEWORK_API virtual void SetNewGizmoTransform(const FTransform& NewTransform, bool bKeepGizmoUnscaled = true);
463
468 INTERACTIVETOOLSFRAMEWORK_API virtual void BeginTransformEditSequence();
469
473 INTERACTIVETOOLSFRAMEWORK_API virtual void EndTransformEditSequence();
474
478 INTERACTIVETOOLSFRAMEWORK_API void UpdateTransformDuringEditSequence(const FTransform& NewTransform, bool bKeepGizmoUnscaled = true);
479
484 INTERACTIVETOOLSFRAMEWORK_API virtual void SetNewChildScale(const FVector& NewChildScale);
485
489 INTERACTIVETOOLSFRAMEWORK_API virtual void SetVisibility(bool bVisible);
490
494 virtual bool IsVisible()
495 {
496 return IsValid(GizmoActor) && !GizmoActor->IsHidden();
497 }
498
503 UPROPERTY()
504 bool bSnapToWorldGrid = true;
505
510
514 UPROPERTY()
515 bool bGridSizeIsExplicit = false;
516 UPROPERTY()
517 FVector ExplicitGridSize;
518
522 UPROPERTY()
523 bool bRotationGridSizeIsExplicit = false;
524 UPROPERTY()
525 FRotator ExplicitRotationGridSize;
526
530 UPROPERTY()
531 bool bSnapToWorldRotGrid = true;
532
536 UPROPERTY()
537 bool bSnapToScaleGrid = true;
538
539
543 UPROPERTY()
544 bool bUseContextCoordinateSystem = true;
545
550 UPROPERTY()
552
553
554
555
559 UPROPERTY()
560 bool bUseContextGizmoMode = true;
561
567 UPROPERTY()
569
575
576
588 INTERACTIVETOOLSFRAMEWORK_API void SetDisplaySpaceTransform(TOptional<FTransform> TransformIn);
589 const TOptional<FTransform>& GetDisplaySpaceTransform() { return DisplaySpaceTransform; }
590
596
603
610
614
615protected:
617
621
622 // This function is called on each active GizmoActor Component to update it's hover state.
623 // If the Component is not a UGizmoBaseCmponent, the client needs to provide a different implementation
624 // of this function via the ToolBuilder
625 TFunction<void(UPrimitiveComponent*, bool)> UpdateHoverFunction;
626
627 // This function is called on each active GizmoActor Component to update it's coordinate system (eg world/local).
628 // If the Component is not a UGizmoBaseCmponent, the client needs to provide a different implementation
629 // of this function via the ToolBuilder
631
633 UPROPERTY()
634 TArray<TObjectPtr<UPrimitiveComponent>> ActiveComponents;
635
637 UPROPERTY()
639
654private:
655 TWeakObjectPtr<UInteractiveGizmo> AxisScaleXGizmo;
656 TWeakObjectPtr<UInteractiveGizmo> AxisScaleYGizmo;
657 TWeakObjectPtr<UInteractiveGizmo> AxisScaleZGizmo;
658
659 TFunction<bool(double AxisDelta, double& SnappedDelta)> CustomTranslationDeltaConstraintFunctions[3];
660 TFunction<bool(double AxisDelta, double& SnappedDelta)> CustomRotationDeltaConstraintFunctions[3];
661 TFunction<bool(double AxisDelta, double& SnappedDelta)> CustomScaleDeltaConstraintFunctions[3];
662
663protected:
666
673 UPROPERTY()
675
676 //
677 // Axis Sources
678 //
679
680
682 UPROPERTY()
684
685 // internal function that updates CameraAxisSource by getting current view state from GizmoManager
686 INTERACTIVETOOLSFRAMEWORK_API void UpdateCameraAxisSource();
687
688
690 UPROPERTY()
692
694 UPROPERTY()
696
698 UPROPERTY()
700
701 //
702 // Scaling support.
703 // UE Components only support scaling in local coordinates, so we have to create separate sources for that.
704 //
705
707 UPROPERTY()
709
711 UPROPERTY()
713
715 UPROPERTY()
717
718
719 //
720 // Other Gizmo Components
721 //
722
723
729 UPROPERTY()
731
736 TUniqueFunction<bool()> ShouldAlignDestination = []() { return false; };
737 TUniqueFunction<bool(const FRay&, FVector&)> DestinationAlignmentRayCaster = [](const FRay&, FVector&) {return false; };
738
739 TUniqueFunction<bool()> IsNonUniformScaleAllowedFunc = [this]() { return CurrentCoordinateSystem == EToolContextCoordinateSystem::Local; };
740
741 bool bDisallowNegativeScaling = false;
742
743 // See comment for SetDisplaySpaceTransform;
745
746protected:
747
750
752 INTERACTIVETOOLSFRAMEWORK_API virtual UInteractiveGizmo* AddAxisTranslationGizmo(
754
756 INTERACTIVETOOLSFRAMEWORK_API virtual UInteractiveGizmo* AddPlaneTranslationGizmo(
758
760 INTERACTIVETOOLSFRAMEWORK_API virtual UInteractiveGizmo* AddAxisRotationGizmo(
762
764 INTERACTIVETOOLSFRAMEWORK_API virtual UInteractiveGizmo* AddAxisScaleGizmo(
766
768 INTERACTIVETOOLSFRAMEWORK_API virtual UInteractiveGizmo* AddPlaneScaleGizmo(
770
772 INTERACTIVETOOLSFRAMEWORK_API virtual UInteractiveGizmo* AddUniformScaleGizmo(
774
775 INTERACTIVETOOLSFRAMEWORK_API virtual UInteractiveGizmo* AddFreeTranslationGizmo(
777
778 INTERACTIVETOOLSFRAMEWORK_API virtual UInteractiveGizmo* AddFreeRotationGizmo(
780
781 // Axis and Plane TransformSources use these function to execute snapping queries
782 INTERACTIVETOOLSFRAMEWORK_API bool PositionSnapFunction(const FVector& WorldPosition, FVector& SnappedPositionOut) const;
783 INTERACTIVETOOLSFRAMEWORK_API bool PositionAxisDeltaSnapFunction(double AxisDelta, double& SnappedDeltaOut, int AxisIndex) const;
784 INTERACTIVETOOLSFRAMEWORK_API FQuat RotationSnapFunction(const FQuat& DeltaRotation) const;
785 INTERACTIVETOOLSFRAMEWORK_API bool RotationAxisAngleSnapFunction(double AxisAngleDelta, double& SnappedAxisAngleDeltaOut, int AxisIndex) const;
786
787private:
788 // Used for scale delta snapping. Calls out to the non-axis endpoint by default
789 bool ScaleAxisDeltaSnapFunction(double ScaleAxisDelta, double& SnappedAxisScaleDeltaOut, int AxisIndex) const;
790protected:
791 // currently not implemented because WorldGridSnapping currently has no affect on scale/scale-snapping
793 // Used for uniform scale delta snapping
794 INTERACTIVETOOLSFRAMEWORK_API bool ScaleAxisDeltaSnapFunction(double ScaleAxisDelta, double & SnappedAxisScaleDeltaOut) const;
795
796 UE_DEPRECATED(5.5, "Use FTransformSubGizmoCommonParams overload instead.")
799 UPrimitiveComponent* AxisComponent, USceneComponent* RootComponent,
800 IGizmoAxisSource* AxisSource,
801 IGizmoTransformSource* TransformSource,
802 IGizmoStateTarget* StateTarget,
803 int AxisIndex);
804 UE_DEPRECATED(5.5, "Use FTransformSubGizmoCommonParams overload instead.")
807 UPrimitiveComponent* AxisComponent, USceneComponent* RootComponent,
808 IGizmoAxisSource* AxisSource,
809 IGizmoTransformSource* TransformSource,
810 IGizmoStateTarget* StateTarget,
811 int XAxisIndex, int YAxisIndex);
812 UE_DEPRECATED(5.5, "Use FTransformSubGizmoCommonParams overload instead.")
815 UPrimitiveComponent* AxisComponent, USceneComponent* RootComponent,
816 IGizmoAxisSource* AxisSource,
817 IGizmoTransformSource* TransformSource,
818 IGizmoStateTarget* StateTarget);
819 UE_DEPRECATED(5.5, "Use FTransformSubGizmoCommonParams overload instead.")
822 UPrimitiveComponent* AxisComponent, USceneComponent* RootComponent,
824 IGizmoTransformSource* TransformSource,
825 IGizmoStateTarget* StateTarget);
826 UE_DEPRECATED(5.5, "Use FTransformSubGizmoCommonParams overload instead.")
829 UPrimitiveComponent* AxisComponent, USceneComponent* RootComponent,
831 IGizmoTransformSource* TransformSource,
832 IGizmoStateTarget* StateTarget);
833 UE_DEPRECATED(5.5, "Use FTransformSubGizmoCommonParams overload instead.")
836 UPrimitiveComponent* ScaleComponent, USceneComponent* RootComponent,
838 IGizmoTransformSource* TransformSource,
839 IGizmoStateTarget* StateTarget);
840
841 // Useful for reinitializing components after SetActiveTarget, or for use by derived classes.
843private:
844 // Here to support subgizmo reinitialization after SetActiveTarget has been called. Private
845 // instead of protected for now in case we change the approach here.
846 IToolContextTransactionProvider* TransactionProviderAtLastSetActiveTarget = nullptr;
847
849 void ApplyGizmoActiveMode();
850};
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
return true
Definition ExternalRpcRegistry.cpp:601
ETransformGizmoSubElements
Definition InteractiveGizmo.h:105
const bool
Definition NetworkReplayStreaming.h:178
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define UCLASS(...)
Definition ObjectMacros.h:776
EToolContextTransformGizmoMode
Definition ToolContextInterfaces.h:147
EToolContextCoordinateSystem
Definition ToolContextInterfaces.h:130
Definition CombinedTransformGizmo.h:49
Definition GizmoActor.h:24
Definition CombinedTransformGizmo.h:211
FCombinedTransformGizmoActorFactory(UGizmoViewContext *GizmoViewContextIn)
Definition CombinedTransformGizmo.h:213
Definition UnrealType.h:3087
Definition GizmoInterfaces.h:64
Definition GizmoInterfaces.h:272
Definition GizmoInterfaces.h:37
Definition InteractiveToolChange.h:39
Definition Array.h:670
Definition AndroidPlatformMisc.h:14
Definition SharedPointer.h:692
Definition FunctionFwd.h:19
Definition UniquePtr.h:107
Definition SharedPointer.h:1295
Definition CombinedTransformGizmo.h:249
TSharedPtr< FCombinedTransformGizmoActorFactory > GizmoActorBuilder
Definition CombinedTransformGizmo.h:266
TFunction< void(UPrimitiveComponent *, EToolContextCoordinateSystem)> UpdateCoordSystemFunction
Definition CombinedTransformGizmo.h:286
FString AxisAngleBuilderIdentifier
Definition CombinedTransformGizmo.h:260
FString PlanePositionBuilderIdentifier
Definition CombinedTransformGizmo.h:259
TFunction< void(UPrimitiveComponent *, bool)> UpdateHoverFunction
Definition CombinedTransformGizmo.h:276
FString AxisPositionBuilderIdentifier
Definition CombinedTransformGizmo.h:258
Definition CombinedTransformGizmo.h:337
INTERACTIVETOOLSFRAMEWORK_API bool ScaleSnapFunction(double DeltaScale) const
TOptional< FTransform > DisplaySpaceTransform
Definition CombinedTransformGizmo.h:744
TFunction< void(UPrimitiveComponent *, EToolContextCoordinateSystem)> UpdateCoordSystemFunction
Definition CombinedTransformGizmo.h:630
TArray< FSubGizmoInfo > RotationSubGizmos
Definition CombinedTransformGizmo.h:651
TFunction< void(UPrimitiveComponent *, bool)> UpdateHoverFunction
Definition CombinedTransformGizmo.h:625
UWorld * World
Definition CombinedTransformGizmo.h:665
FString AxisAngleBuilderIdentifier
Definition CombinedTransformGizmo.h:620
TArray< FSubGizmoInfo > UniformScaleSubGizmos
Definition CombinedTransformGizmo.h:652
TArray< FSubGizmoInfo > NonUniformScaleSubGizmos
Definition CombinedTransformGizmo.h:653
DECLARE_MULTICAST_DELEGATE_TwoParams(FOnDisplaySpaceTransformChanged, UCombinedTransformGizmo *, TOptional< FTransform >)
virtual bool IsNonUniformScaleAllowed() const
Definition CombinedTransformGizmo.h:409
TArray< FSubGizmoInfo > TranslationSubGizmos
Definition CombinedTransformGizmo.h:650
DECLARE_MULTICAST_DELEGATE_TwoParams(FOnClearActiveTarget, UCombinedTransformGizmo *, UTransformProxy *)
DECLARE_MULTICAST_DELEGATE_TwoParams(FOnVisibilityChanged, UCombinedTransformGizmo *, bool)
FString AxisPositionBuilderIdentifier
Definition CombinedTransformGizmo.h:618
TSharedPtr< FCombinedTransformGizmoActorFactory > GizmoActorBuilder
Definition CombinedTransformGizmo.h:616
FOnVisibilityChanged OnVisibilityChanged
Definition CombinedTransformGizmo.h:613
virtual bool IsVisible()
Definition CombinedTransformGizmo.h:494
DECLARE_MULTICAST_DELEGATE_TwoParams(FOnSetActiveTarget, UCombinedTransformGizmo *, UTransformProxy *)
FOnClearActiveTarget OnAboutToClearActiveTarget
Definition CombinedTransformGizmo.h:609
FOnDisplaySpaceTransformChanged OnDisplaySpaceTransformChanged
Definition CombinedTransformGizmo.h:595
FOnSetActiveTarget OnSetActiveTarget
Definition CombinedTransformGizmo.h:602
FString PlanePositionBuilderIdentifier
Definition CombinedTransformGizmo.h:619
Definition ViewBasedTransformAdjusters.h:94
Definition AxisSources.h:144
Definition AxisSources.h:56
Definition StateTargets.h:168
Definition GizmoViewContext.h:20
Definition InteractiveGizmoBuilder.h:19
Definition InteractiveGizmoManager.h:40
Definition InteractiveGizmo.h:29
Definition TransformProxy.h:40
Definition World.h:918
Definition GizmoRenderingUtil.h:143
Definition CombinedTransformGizmo.h:30
Definition FreeRotationSubGizmo.h:18
Definition AdvancedWidgetsModule.cpp:13
@ false
Definition radaudio_common.h:23
Definition ToolContextInterfaces.h:50
Definition CombinedTransformGizmo.h:300
bool bInheritFromContext
Definition CombinedTransformGizmo.h:303
FToolContextOptionalToggle(bool bEnabled, bool bSetInheritFromContext)
Definition CombinedTransformGizmo.h:306
void UpdateContextValue(bool bNewValue)
Definition CombinedTransformGizmo.h:312
bool bEnabledInContext
Definition CombinedTransformGizmo.h:302
FToolContextOptionalToggle()
Definition CombinedTransformGizmo.h:305
bool InheritFromContext() const
Definition CombinedTransformGizmo.h:313
bool bEnabledDirectly
Definition CombinedTransformGizmo.h:301
bool IsEnabled() const
Definition CombinedTransformGizmo.h:316
Definition ObjectPtr.h:488
Definition Optional.h:131
Definition WeakObjectPtrTemplates.h:25
Definition CombinedTransformGizmo.h:645
TWeakObjectPtr< UPrimitiveComponent > Component
Definition CombinedTransformGizmo.h:647
TWeakObjectPtr< UInteractiveGizmo > Gizmo
Definition CombinedTransformGizmo.h:648
Definition TransformSubGizmoUtil.h:37
Definition TransformSubGizmoUtil.h:99