CoordSystem
CoordSystem
#Overview
name: CoordSystem
The value of this variable can be defined or overridden in .ini config files. 1
.ini config file referencing this setting variable.
It is referenced in 35
C++ source files.
#Summary
#Usage in the C++ source code
The purpose of CoordSystem is to represent the coordinate system used for transformations and manipulations in the Unreal Engine editor and tools. It is primarily used in the context of gizmos, which are visual tools for manipulating objects in 3D space.
CoordSystem is an enumeration that typically includes values such as COORD_World (for world-space coordinates) and COORD_Local (for local-space coordinates). It is used across various subsystems and modules in Unreal Engine, particularly in:
- Editor modules: Such as LevelEditor, UnrealEd, and Persona.
- Viewport interaction systems: Including ViewportInteraction and EditorViewport.
- Gizmo and transformation tools: Like CombinedTransformGizmo and IntervalGizmo.
- Animation and skeletal mesh editing tools: As seen in the SkeletonSelectionEditMode.
The value of CoordSystem is typically set through user interaction in the editor, such as toggling between world and local space in the viewport. It can be accessed and modified through the EditorModeManager (FEditorModeTools class).
CoordSystem often interacts with other variables related to transformation and manipulation, such as WidgetMode (which determines the type of transformation: translate, rotate, or scale) and CurrentAxis (which specifies which axis is being manipulated).
Developers should be aware that the coordinate system affects how transformations are applied to objects. Operations in world space will be relative to the global coordinate system, while operations in local space will be relative to the object’s own coordinate system.
Best practices when using CoordSystem include:
- Always check the current coordinate system before applying transformations.
- Provide users with clear visual feedback about the current coordinate system.
- Ensure that all relevant components and subsystems are updated when the coordinate system changes.
- Consider the implications of coordinate system changes on snapping, grid alignment, and other precision-focused features.
- When implementing new tools or gizmos, make sure they respect and properly handle different coordinate systems.
#Setting Variables
#References In INI files
Location: <Workspace>/Engine/Config/BaseEditorPerProjectUserSettings.ini:497, section: [FEditorModeTools]
- INI Section:
FEditorModeTools
- Raw value:
0
- Is Array:
False
#References in C++ code
#Callsites
This variable is referenced in the following C++ source code:
#Loc: <Workspace>/Engine/Plugins/Animation/ControlRig/Source/ControlRigEditor/Private/EditMode/ControlRigEditMode.cpp:421
Scope (from outer to inner):
file
function void FControlRigEditMode::Enter
Source code excerpt:
{
CoordSystemPerWidgetMode.SetNum(UE::Widget::WM_Max);
ECoordSystem CoordSystem = ModeManager->GetCoordSystem();
for (int32 i = 0; i < UE::Widget::WM_Max; ++i)
{
CoordSystemPerWidgetMode[i] = CoordSystem;
}
}
ModeManager->OnWidgetModeChanged().AddSP(this, &FControlRigEditMode::OnWidgetModeChanged);
ModeManager->OnCoordSystemChanged().AddSP(this, &FControlRigEditMode::OnCoordSystemChanged);
}
#Loc: <Workspace>/Engine/Plugins/Animation/ControlRig/Source/ControlRigEditor/Private/EditMode/ControlRigEditMode.cpp:2052
Scope (from outer to inner):
file
function bool FControlRigEditMode::InputDelta
Source code excerpt:
const UE::Widget::EWidgetMode WidgetMode = InViewportClient->GetWidgetMode();
const EAxisList::Type CurrentAxis = InViewportClient->GetCurrentWidgetAxis();
const ECoordSystem CoordSystem = InViewportClient->GetWidgetCoordSystemSpace();
const bool bDoRotation = !Rot.IsZero() && (WidgetMode == UE::Widget::WM_Rotate || WidgetMode == UE::Widget::WM_TranslateRotateZ);
const bool bDoTranslation = !Drag.IsZero() && (WidgetMode == UE::Widget::WM_Translate || WidgetMode == UE::Widget::WM_TranslateRotateZ);
const bool bDoScale = !Scale.IsZero() && WidgetMode == UE::Widget::WM_Scale;
#Loc: <Workspace>/Engine/Plugins/Animation/ControlRig/Source/ControlRigEditor/Private/EditMode/ControlRigEditMode.cpp:2090
Scope (from outer to inner):
file
function bool FControlRigEditMode::InputDelta
Source code excerpt:
{
const UControlRigEditModeSettings* Settings = GetDefault<UControlRigEditModeSettings>();
bool bDoLocal = (CoordSystem == ECoordSystem::COORD_Local && Settings && Settings->bLocalTransformsInEachLocalSpace);
bool bUseLocal = false;
bool bCalcLocal = bDoLocal;
bool bFirstTime = true;
FTransform InOutLocal = FTransform::Identity;
bool const bJustStartedManipulation = !bManipulatorMadeChange;
#Loc: <Workspace>/Engine/Plugins/Animation/ControlRig/Source/ControlRigEditor/Private/EditMode/ControlRigEditMode.cpp:4480
Scope (from outer to inner):
file
function void FControlRigEditMode::OnCoordSystemChanged
Source code excerpt:
FEditorModeTools* ModeManager = GetModeManager();
int32 WidgetMode = (int32)ModeManager->GetWidgetMode();
ECoordSystem CoordSystem = ModeManager->GetCoordSystem();
if (WidgetMode >= 0 && WidgetMode < CoordSystemPerWidgetMode.Num())
{
CoordSystemPerWidgetMode[WidgetMode] = CoordSystem;
}
}
bool FControlRigEditMode::CanChangeControlShapeTransform()
{
if (AreEditingControlRigDirectly())
#Loc: <Workspace>/Engine/Plugins/Enterprise/DatasmithFBXImporter/Source/DatasmithFBXTranslator/Private/DatasmithFBXFileImporter.cpp:296
Scope (from outer to inner):
file
function void FDatasmithFBXFileImporter::ConvertCoordinateSystem
Source code excerpt:
// you want +X facing in engine. Only thing that doesn't work is hand flipping because Max/Maya is RHS but UE is LHS
// On the positive note, we now have import transform set up you can do to rotate mesh if you don't like default setting.
FbxAxisSystem::ECoordSystem CoordSystem = FbxAxisSystem::eRightHanded;
FbxAxisSystem::EUpVector UpVector = FbxAxisSystem::eZAxis;
FbxAxisSystem::EFrontVector FrontVector = (FbxAxisSystem::EFrontVector) - FbxAxisSystem::eParityOdd;
FbxAxisSystem UnrealImportAxis(UpVector, FrontVector, CoordSystem);
FbxAxisSystem SourceSetup = InScene->GetGlobalSettings().GetAxisSystem();
#Loc: <Workspace>/Engine/Plugins/Experimental/XRCreativeFramework/Source/XRCreative/Private/ITF/XRCreativeITFComponent.cpp:935
Scope (from outer to inner):
file
function void UXRCreativeITFComponent::SetCurrentCoordinateSystem
Source code excerpt:
void UXRCreativeITFComponent::SetCurrentCoordinateSystem(EToolContextCoordinateSystem CoordSystem)
{
if(IsValid(GetSelectionSet()))
{
CurrentCoordinateSystem = CoordSystem;
TransformInteraction->ForceUpdateGizmoState();
}
}
#Loc: <Workspace>/Engine/Plugins/Experimental/XRCreativeFramework/Source/XRCreative/Public/XRCreativeITFComponent.h:83
Scope (from outer to inner):
file
class class UXRCreativeITFComponent : public UActorComponent
Source code excerpt:
UFUNCTION(BlueprintCallable, Category="XR Creative|Tools")
void SetCurrentCoordinateSystem(EToolContextCoordinateSystem CoordSystem);
UFUNCTION(BlueprintCallable, Category="XR Creative|Tools")
EToolContextTransformGizmoMode GetCurrentTransformGizmoMode() const { return CurrentTransformGizmoMode; }
UFUNCTION(BlueprintCallable, Category="XR Creative|Tools")
#Loc: <Workspace>/Engine/Plugins/Interchange/Runtime/Source/Parsers/Fbx/Private/FbxConvert.cpp:52
Scope (from outer to inner):
file
namespace UE
namespace Interchange
namespace Private
function void FFbxConvert::ConvertScene
Source code excerpt:
FbxAxisSystem::EUpVector UpVector = FbxAxisSystem::EUpVector::eZAxis;
FbxAxisSystem::EFrontVector FrontVector = (FbxAxisSystem::EFrontVector)(bForceFrontXAxis ? FbxAxisSystem::eParityEven : -FbxAxisSystem::eParityOdd);
FbxAxisSystem::ECoordSystem CoordSystem = FbxAxisSystem::ECoordSystem::eRightHanded;
FbxAxisSystem UnrealImportAxis(UpVector, FrontVector, CoordSystem);
if (FileAxisSystem != UnrealImportAxis)
{
FbxRootNodeUtility::RemoveAllFbxRoots(SDKScene);
UnrealImportAxis.ConvertScene(SDKScene);
#Loc: <Workspace>/Engine/Plugins/Runtime/MeshModelingToolset/Source/ModelingComponents/Private/Transforms/MultiTransformer.cpp:45
Scope (from outer to inner):
file
function void UMultiTransformer::SetOverrideGizmoCoordinateSystem
Source code excerpt:
void UMultiTransformer::SetOverrideGizmoCoordinateSystem(EToolContextCoordinateSystem CoordSystem)
{
if (GizmoCoordSystem != CoordSystem || bForceGizmoCoordSystem == false)
{
bForceGizmoCoordSystem = true;
GizmoCoordSystem = CoordSystem;
if (TransformGizmo != nullptr)
{
UpdateShowGizmoState(false);
UpdateShowGizmoState(true);
}
}
#Loc: <Workspace>/Engine/Plugins/Runtime/MeshModelingToolset/Source/ModelingComponents/Public/Transforms/MultiTransformer.h:54
Scope (from outer to inner):
file
class class UMultiTransformer : public UObject
Source code excerpt:
virtual void SetGizmoVisibility(bool bVisible);
virtual void SetOverrideGizmoCoordinateSystem(EToolContextCoordinateSystem CoordSystem);
virtual void SetEnabledGizmoSubElements(ETransformGizmoSubElements EnabledSubElements);
virtual void SetGizmoRepositionable(bool bOn);
virtual EToolContextCoordinateSystem GetGizmoCoordinateSystem();
#Loc: <Workspace>/Engine/Plugins/Runtime/ScriptableToolsFramework/Source/ScriptableToolsFramework/Private/ScriptableInteractiveTool.cpp:900
Scope (from outer to inner):
file
function void UScriptableInteractiveTool::CreateTRSGizmo
Source code excerpt:
}
NewGizmo->bUseContextCoordinateSystem = (GizmoOptions.CoordSystem == EScriptableToolGizmoCoordinateSystem::FromViewportSettings);
switch (GizmoOptions.CoordSystem)
{
case EScriptableToolGizmoCoordinateSystem::Local:
NewGizmo->CurrentCoordinateSystem = EToolContextCoordinateSystem::Local;
break;
case EScriptableToolGizmoCoordinateSystem::World:
NewGizmo->CurrentCoordinateSystem = EToolContextCoordinateSystem::World;
#Loc: <Workspace>/Engine/Plugins/Runtime/ScriptableToolsFramework/Source/ScriptableToolsFramework/Public/ScriptableInteractiveTool.h:148
Scope: file
Source code excerpt:
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Gizmo)
EScriptableToolGizmoCoordinateSystem CoordSystem = EScriptableToolGizmoCoordinateSystem::Local;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Gizmo)
bool bSnapTranslation = true;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Gizmo)
bool bSnapRotation = true;
#Loc: <Workspace>/Engine/Source/Editor/LevelEditor/Public/LevelEditorActions.h:1273
Scope (from outer to inner):
file
class class FLevelEditorActionCallbacks
Source code excerpt:
static bool CanSetWidgetMode( UE::Widget::EWidgetMode WidgetMode );
static bool IsTranslateRotateModeVisible();
static void SetCoordinateSystem( ECoordSystem CoordSystem );
static bool IsCoordinateSystemActive( ECoordSystem CoordSystem );
/**
* Return a world
*/
static class UWorld* GetWorld();
public:
#Loc: <Workspace>/Engine/Source/Editor/Persona/Private/SkeletonSelectionEditMode.cpp:258
Scope (from outer to inner):
file
function bool FSkeletonSelectionEditMode::InputDelta
Source code excerpt:
const EAxisList::Type CurrentAxis = InViewportClient->GetCurrentWidgetAxis();
const UE::Widget::EWidgetMode WidgetMode = InViewportClient->GetWidgetMode();
const ECoordSystem CoordSystem = InViewportClient->GetWidgetCoordSystemSpace();
bool bHandled = false;
UDebugSkelMeshComponent* PreviewMeshComponent = GetAnimPreviewScene().GetPreviewMeshComponent();
if ( bManipulating && CurrentAxis != EAxisList::None )
#Loc: <Workspace>/Engine/Source/Editor/Persona/Private/SkeletonSelectionEditMode.cpp:347
Scope (from outer to inner):
file
function bool FSkeletonSelectionEditMode::InputDelta
Source code excerpt:
FVector4 BoneSpaceScaleOffset;
if (CoordSystem == COORD_World)
{
BoneSpaceScaleOffset = BaseTM.TransformVector(InScale);
}
else
{
BoneSpaceScaleOffset = InScale;
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/EditorModeManager.cpp:71
Scope (from outer to inner):
file
function FEditorModeTools::FEditorModeTools
Source code excerpt:
, bSelectionHasSceneComponent(false)
, WidgetScale(1.0f)
, CoordSystem(COORD_World)
, bIsTracking(false)
{
DefaultModeIDs.Add( FBuiltinEditorModes::EM_Default );
InteractiveToolsContext = NewObject<UModeManagerInteractiveToolsContext>(GetTransientPackage(), UModeManagerInteractiveToolsContext::StaticClass(), NAME_None, RF_Transient);
InteractiveToolsContext->InitializeContextWithEditorModeManager(this);
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/EditorModeManager.cpp:131
Scope (from outer to inner):
file
function void FEditorModeTools::LoadConfig
Source code excerpt:
static constexpr bool bGetRawValue = true;
int32 CoordSystemAsInt = (int32)GetCoordSystem(bGetRawValue);
GConfig->GetInt(TEXT("FEditorModeTools"),TEXT("CoordSystem"), CoordSystemAsInt,
GEditorPerProjectIni);
if (static_cast<ECoordSystem>(CoordSystemAsInt) == COORD_Parent)
{
// parent mode is only supported with new trs gizmos for now
const bool bUseNewGizmo = UEditorInteractiveGizmoManager::UsesNewTRSGizmos();
if (!bUseNewGizmo)
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/EditorModeManager.cpp:154
Scope (from outer to inner):
file
function void FEditorModeTools::SaveConfig
Source code excerpt:
static constexpr bool bGetRawValue = true;
GConfig->SetInt(TEXT("FEditorModeTools"), TEXT("CoordSystem"), (int32)GetCoordSystem(bGetRawValue), GEditorPerProjectIni);
SaveWidgetSettings();
}
TSharedPtr<class IToolkitHost> FEditorModeTools::GetToolkitHost() const
{
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/EditorModeManager.cpp:689
Scope (from outer to inner):
file
function ECoordSystem FEditorModeTools::GetCoordSystem
Source code excerpt:
}
return CoordSystem;
}
void FEditorModeTools::SetCoordSystem(ECoordSystem NewCoordSystem)
{
CoordSystem = NewCoordSystem;
BroadcastCoordSystemChanged(NewCoordSystem);
}
void FEditorModeTools::SetDefaultMode( const FEditorModeID DefaultModeID )
{
DefaultModeIDs.Reset();
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxMainImport.cpp:1515
Scope (from outer to inner):
file
namespace UnFbx
function void FFbxImporter::ConvertScene
Source code excerpt:
// only thing that doesn't work is hand flipping because Max/Maya is RHS but UE is LHS
// On the positive note, we now have import transform set up you can do to rotate mesh if you don't like default setting
FbxAxisSystem::ECoordSystem CoordSystem = FbxAxisSystem::eRightHanded;
FbxAxisSystem::EUpVector UpVector = FbxAxisSystem::eZAxis;
FbxAxisSystem::EFrontVector FrontVector = (FbxAxisSystem::EFrontVector) - FbxAxisSystem::eParityOdd;
if (GetImportOptions()->bForceFrontXAxis)
{
FrontVector = FbxAxisSystem::eParityEven;
}
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/SEditorViewport.cpp:720
Scope (from outer to inner):
file
function bool SEditorViewport::IsCoordSystemActive
Source code excerpt:
}
bool SEditorViewport::IsCoordSystemActive(ECoordSystem CoordSystem) const
{
return Client->GetWidgetCoordSystemSpace() == CoordSystem;
}
void SEditorViewport::OnCycleWidgetMode()
{
UE::Widget::EWidgetMode WidgetMode = Client->GetWidgetMode();
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Public/EditorModeManager.h:396
Scope: file
Source code excerpt:
/**
* Returns the current CoordSystem
*
* @param bGetRawValue true when you want the actual value of CoordSystem, not the value modified by the state.
*/
UNREALED_API ECoordSystem GetCoordSystem(bool bGetRawValue = false) const;
/** Sets the current CoordSystem */
UNREALED_API void SetCoordSystem(ECoordSystem NewCoordSystem);
/** Sets the hide viewport UI state */
void SetHideViewportUI( bool bInHideViewportUI ) { bHideViewportUI = bInHideViewportUI; }
/** Is the viewport UI hidden? */
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Public/EditorModeManager.h:615
Scope (from outer to inner):
file
class class FEditorModeTools : public FGCObject, public FEditorUndoClient, public TSharedFromThis<FEditorModeTools>
Source code excerpt:
/** The coordinate system the widget is operating within. */
ECoordSystem CoordSystem;
/** Multicast delegate that is broadcast when a mode is entered or exited */
FEditorModeIDChangedEvent EditorModeIDChangedEvent;
/** Multicast delegate that is broadcast when a widget mode is changed */
FWidgetModeChangedEvent WidgetModeChangedEvent;
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Public/SEditorViewport.h:72
Scope (from outer to inner):
file
class class SEditorViewport : public SCompoundWidget
Source code excerpt:
* @return true if the specified coordinate system the active one active
*/
UNREALED_API virtual bool IsCoordSystemActive( ECoordSystem CoordSystem ) const;
/**
* Cycles between world and local coordinate systems
*/
UNREALED_API virtual void OnCycleCoordinateSystem();
#Loc: <Workspace>/Engine/Source/Editor/ViewportInteraction/Private/Gizmo/VIPivotTransformGizmo.cpp:349
Scope (from outer to inner):
file
function void UPivotRotationGizmoHandleGroup::UpdateGizmoHandleGroup
Source code excerpt:
bool bShowFullRotationDragHandle = false;
UViewportWorldInteraction* WorldInteraction = OwningTransformGizmoActor->GetOwnerWorldInteraction();
const ECoordSystem CoordSystem = WorldInteraction->GetTransformGizmoCoordinateSpace();
const bool bIsTypeSupported = (OwningTransformGizmoActor->GetGizmoType() == EGizmoHandleTypes::All && GetShowOnUniversalGizmo()) || GetHandleType() == OwningTransformGizmoActor->GetGizmoType();
const bool bSupportsCurrentCoordinateSpace = SupportsWorldCoordinateSpace() || CoordSystem != COORD_World;
const bool bShowAnyRotationHandle = (bIsTypeSupported && bSupportsCurrentCoordinateSpace && bAllHandlesVisible);
for (int32 HandleIndex = 0; HandleIndex < Handles.Num(); ++HandleIndex)
{
FGizmoHandle& Handle = Handles[HandleIndex];
UStaticMeshComponent* GizmoHandleMeshComponent = Handle.HandleMesh;
#Loc: <Workspace>/Engine/Source/Editor/ViewportInteraction/Private/ViewportInteractionDragOperations.cpp:71
Scope (from outer to inner):
file
function void URotateOnAngleDragOperation::ExecuteDrag
Source code excerpt:
// Get the laser pointer intersection on the plane of the handle
const FPlane RotationPlane = FPlane(GizmoStartTransform.GetLocation(), DraggingRotationHandleDirection.GetValue());
const ECoordSystem CoordSystem = DraggingData.WorldInteraction->GetTransformGizmoCoordinateSpace();
const FVector LaserImpactOnRotationPlane = FMath::LinePlaneIntersection(DraggingData.LaserPointerStart, DraggingData.LaserPointerStart + DraggingData.LaserPointerDirection, RotationPlane);
{
FTransform GizmoTransformNoRotation = FTransform(FRotator::ZeroRotator, GizmoStartTransform.GetLocation());
if (CoordSystem == COORD_Local)
{
GizmoTransformNoRotation.SetRotation(GizmoStartTransform.GetRotation());
}
LocalIntersectPointOnRotationGizmo = GizmoTransformNoRotation.InverseTransformPositionNoScale(LaserImpactOnRotationPlane);
}
#Loc: <Workspace>/Engine/Source/Editor/ViewportInteraction/Private/ViewportInteractionDragOperations.cpp:90
Scope (from outer to inner):
file
function void URotateOnAngleDragOperation::ExecuteDrag
Source code excerpt:
const FVector GizmoSpaceLaserImpactOnRotationPlane = WorldToGizmo.TransformPosition(LaserImpactOnRotationPlane);
FVector RotatedIntersectLocationOnPlane;
if (CoordSystem == COORD_Local)
{
RotatedIntersectLocationOnPlane = GizmoSpaceFacingAxisVector.Rotation().UnrotateVector(GizmoSpaceLaserImpactOnRotationPlane);
}
else
{
RotatedIntersectLocationOnPlane = GizmoStartTransform.TransformVector(GizmoSpaceFacingAxisVector).Rotation().UnrotateVector(GizmoSpaceLaserImpactOnRotationPlane);
#Loc: <Workspace>/Engine/Source/Editor/ViewportInteraction/Private/ViewportWorldInteraction.cpp:1613
Scope (from outer to inner):
file
function BEGIN_FUNCTION_BUILD_OPTIMIZATION void UViewportWorldInteraction::UpdateDragging
Source code excerpt:
bool bShouldApplyVelocitiesFromDrag = false;
const ECoordSystem CoordSystem = GetTransformGizmoCoordinateSpace();
// Always snap objects relative to where they were when we first grabbed them. We never want objects to immediately
// teleport to the closest snap, but instead snaps should always be relative to the gizmo center
// NOTE: While placing objects, we always snap in world space, since the initial position isn't really at all useful
const bool bLocalSpaceSnapping =
CoordSystem == COORD_Local &&
DraggingMode != EViewportInteractionDraggingMode::TransformablesAtLaserImpact;
const FVector SnapGridBase = ( DraggingMode == EViewportInteractionDraggingMode::TransformablesAtLaserImpact || bLocalSpaceSnapping ) ? FVector::ZeroVector : GizmoStartTransform.GetLocation();
// Okay, time to move stuff! We'll do this part differently depending on whether we're dragging actual actors around
// or we're moving the camera (aka. dragging the world)
if (DragOperation != nullptr && DraggingMode == EViewportInteractionDraggingMode::TransformablesWithGizmo)
#Loc: <Workspace>/Engine/Source/Runtime/InteractiveToolsFramework/Private/BaseGizmos/CombinedTransformGizmo.cpp:459
Scope (from outer to inner):
file
function void UCombinedTransformGizmo::Setup
lambda-function
Source code excerpt:
};
UpdateCoordSystemFunction = [](UPrimitiveComponent* Component, EToolContextCoordinateSystem CoordSystem)
{
if (Cast<UGizmoBaseComponent>(Component) != nullptr)
{
Cast<UGizmoBaseComponent>(Component)->UpdateWorldLocalState(CoordSystem == EToolContextCoordinateSystem::World);
}
};
GizmoActor = GizmoActorBuilder->CreateNewGizmoActor(World);
}
#Loc: <Workspace>/Engine/Source/Runtime/InteractiveToolsFramework/Private/BaseGizmos/CombinedTransformGizmo.cpp:1113
Scope (from outer to inner):
file
function bool UCombinedTransformGizmo::PositionSnapFunction
Source code excerpt:
// we can only snap positions in world coordinate system
EToolContextCoordinateSystem CoordSystem = GetGizmoManager()->GetContextQueriesAPI()->GetCurrentCoordinateSystem();
if (CoordSystem != EToolContextCoordinateSystem::World)
{
return false;
}
// need a snapping manager
if ( USceneSnappingManager* SnapManager = USceneSnappingManager::Find(GetGizmoManager()) )
#Loc: <Workspace>/Engine/Source/Runtime/InteractiveToolsFramework/Private/BaseGizmos/CombinedTransformGizmo.cpp:1148
Scope (from outer to inner):
file
function bool UCombinedTransformGizmo::PositionAxisDeltaSnapFunction
Source code excerpt:
if (!bSnapToWorldGrid) return false;
EToolContextCoordinateSystem CoordSystem = GetGizmoManager()->GetContextQueriesAPI()->GetCurrentCoordinateSystem();
bool bUseRelativeSnapping = RelativeTranslationSnapping.IsEnabled() || (CoordSystem != EToolContextCoordinateSystem::World);
if (!bUseRelativeSnapping)
{
return false;
}
if ( USceneSnappingManager* SnapManager = USceneSnappingManager::Find(GetGizmoManager()) )
#Loc: <Workspace>/Engine/Source/Runtime/InteractiveToolsFramework/Private/BaseGizmos/CombinedTransformGizmo.cpp:1199
Scope (from outer to inner):
file
function FQuat UCombinedTransformGizmo::RotationSnapFunction
Source code excerpt:
// can only snap absolute rotations in World coordinates
EToolContextCoordinateSystem CoordSystem = GetGizmoManager()->GetContextQueriesAPI()->GetCurrentCoordinateSystem();
if (CoordSystem != EToolContextCoordinateSystem::World)
{
return SnappedDeltaRotation;
}
// need a snapping manager
if ( USceneSnappingManager* SnapManager = USceneSnappingManager::Find(GetGizmoManager()) )
#Loc: <Workspace>/Engine/Source/Runtime/InteractiveToolsFramework/Private/BaseGizmos/IntervalGizmo.cpp:238
Scope (from outer to inner):
file
function void UIntervalGizmo::Setup
lambda-function
Source code excerpt:
};
UpdateCoordSystemFunction = [](UPrimitiveComponent* Component, EToolContextCoordinateSystem CoordSystem)
{
if (Cast<UGizmoBaseComponent>(Component) != nullptr)
{
Cast<UGizmoBaseComponent>(Component)->UpdateWorldLocalState(CoordSystem == EToolContextCoordinateSystem::World);
}
};
GizmoActor = GizmoActorBuilder->CreateNewGizmoActor(World);
}
#Loc: <Workspace>/Engine/Source/Runtime/InteractiveToolsFramework/Private/BaseGizmos/IntervalGizmo.cpp:265
Scope (from outer to inner):
file
function void UIntervalGizmo::Tick
Source code excerpt:
void UIntervalGizmo::Tick(float DeltaTime)
{
EToolContextCoordinateSystem CoordSystem = GetGizmoManager()->GetContextQueriesAPI()->GetCurrentCoordinateSystem();
check(CoordSystem == EToolContextCoordinateSystem::World || CoordSystem == EToolContextCoordinateSystem::Local)
bool bUseLocalAxes =
(GetGizmoManager()->GetContextQueriesAPI()->GetCurrentCoordinateSystem() == EToolContextCoordinateSystem::Local);
// Update gizmo location.
{
USceneComponent* GizmoComponent = GizmoActor->GetRootComponent();
#Loc: <Workspace>/Engine/Source/Runtime/InteractiveToolsFramework/Private/BaseGizmos/IntervalGizmo.cpp:299
Scope (from outer to inner):
file
function void UIntervalGizmo::Tick
Source code excerpt:
for (UPrimitiveComponent* Component : ActiveComponents)
{
UpdateCoordSystemFunction(Component, CoordSystem);
}
}
}
void UIntervalGizmo::SetActiveTarget(UTransformProxy* TransformTargetIn, UGizmoLocalFloatParameterSource* UpInterval , UGizmoLocalFloatParameterSource* DownInterval, UGizmoLocalFloatParameterSource* ForwardInterval, IToolContextTransactionProvider* TransactionProvider)
{