Manipulator Bounds updates (#5959)

* first pass updates to improve manipulators

Signed-off-by: Tom Hulton-Harrop <82228511+hultonha@users.noreply.github.com>

* add setting to enable/disable manipulator axis flipping

Signed-off-by: Tom Hulton-Harrop <82228511+hultonha@users.noreply.github.com>

* update manipulator cvar to use ed_ naming convention

Signed-off-by: Tom Hulton-Harrop <82228511+hultonha@users.noreply.github.com>

* wip updates to add AzToolsFramework values to the SettingsRegistry

Signed-off-by: Tom Hulton-Harrop <82228511+hultonha@users.noreply.github.com>

* expose a number of manipulator settings for configuration

Signed-off-by: Tom Hulton-Harrop <82228511+hultonha@users.noreply.github.com>

* add setting for manipulator base scale to change size of all manipulators together

Signed-off-by: Tom Hulton-Harrop <82228511+hultonha@users.noreply.github.com>

* minor updates before posting PR

Signed-off-by: Tom Hulton-Harrop <82228511+hultonha@users.noreply.github.com>

* add manipulator section for settings registry paths

Signed-off-by: Tom Hulton-Harrop <82228511+hultonha@users.noreply.github.com>

* fix for failing unit test after manipulator changes

Signed-off-by: Tom Hulton-Harrop <82228511+hultonha@users.noreply.github.com>

* fix total scale

Signed-off-by: Tom Hulton-Harrop <82228511+hultonha@users.noreply.github.com>

* fix for polygon prism component shape tests

Signed-off-by: Tom Hulton-Harrop <82228511+hultonha@users.noreply.github.com>
monroegm-disable-blank-issue-2
Tom Hulton-Harrop 4 years ago committed by GitHub
parent 8f4ff91915
commit 8344539ab6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -10,6 +10,8 @@
#include "EditorPreferencesPageViewportManipulator.h" #include "EditorPreferencesPageViewportManipulator.h"
#include <AzToolsFramework/Viewport/ViewportSettings.h>
// Editor // Editor
#include "EditorViewportSettings.h" #include "EditorViewportSettings.h"
#include "Settings.h" #include "Settings.h"
@ -19,7 +21,17 @@ void CEditorPreferencesPage_ViewportManipulator::Reflect(AZ::SerializeContext& s
serialize.Class<Manipulators>() serialize.Class<Manipulators>()
->Version(1) ->Version(1)
->Field("LineBoundWidth", &Manipulators::m_manipulatorLineBoundWidth) ->Field("LineBoundWidth", &Manipulators::m_manipulatorLineBoundWidth)
->Field("CircleBoundWidth", &Manipulators::m_manipulatorCircleBoundWidth); ->Field("CircleBoundWidth", &Manipulators::m_manipulatorCircleBoundWidth)
->Field("LinearManipulatorAxisLength", &Manipulators::m_linearManipulatorAxisLength)
->Field("PlanarManipulatorAxisLength", &Manipulators::m_planarManipulatorAxisLength)
->Field("SurfaceManipulatorRadius", &Manipulators::m_surfaceManipulatorRadius)
->Field("SurfaceManipulatorOpacity", &Manipulators::m_surfaceManipulatorOpacity)
->Field("LinearManipulatorConeLength", &Manipulators::m_linearManipulatorConeLength)
->Field("LinearManipulatorConeRadius", &Manipulators::m_linearManipulatorConeRadius)
->Field("ScaleManipulatorBoxHalfExtent", &Manipulators::m_scaleManipulatorBoxHalfExtent)
->Field("RotationManipulatorRadius", &Manipulators::m_rotationManipulatorRadius)
->Field("ManipulatorViewBaseScale", &Manipulators::m_manipulatorViewBaseScale)
->Field("FlipManipulatorAxesTowardsView", &Manipulators::m_flipManipulatorAxesTowardsView);
serialize.Class<CEditorPreferencesPage_ViewportManipulator>()->Version(2)->Field( serialize.Class<CEditorPreferencesPage_ViewportManipulator>()->Version(2)->Field(
"Manipulators", &CEditorPreferencesPage_ViewportManipulator::m_manipulators); "Manipulators", &CEditorPreferencesPage_ViewportManipulator::m_manipulators);
@ -36,7 +48,55 @@ void CEditorPreferencesPage_ViewportManipulator::Reflect(AZ::SerializeContext& s
AZ::Edit::UIHandlers::SpinBox, &Manipulators::m_manipulatorCircleBoundWidth, "Circle Bound Width", AZ::Edit::UIHandlers::SpinBox, &Manipulators::m_manipulatorCircleBoundWidth, "Circle Bound Width",
"Manipulator Circle Bound Width") "Manipulator Circle Bound Width")
->Attribute(AZ::Edit::Attributes::Min, 0.001f) ->Attribute(AZ::Edit::Attributes::Min, 0.001f)
->Attribute(AZ::Edit::Attributes::Max, 2.0f); ->Attribute(AZ::Edit::Attributes::Max, 2.0f)
->DataElement(
AZ::Edit::UIHandlers::SpinBox, &Manipulators::m_linearManipulatorAxisLength, "Linear Manipulator Axis Length",
"Length of default Linear Manipulator (for Translation and Scale Manipulators)")
->Attribute(AZ::Edit::Attributes::Min, 0.1f)
->Attribute(AZ::Edit::Attributes::Max, 5.0f)
->DataElement(
AZ::Edit::UIHandlers::SpinBox, &Manipulators::m_planarManipulatorAxisLength, "Planar Manipulator Axis Length",
"Length of default Planar Manipulator (for Translation Manipulators)")
->Attribute(AZ::Edit::Attributes::Min, 0.1f)
->Attribute(AZ::Edit::Attributes::Max, 5.0f)
->DataElement(
AZ::Edit::UIHandlers::SpinBox, &Manipulators::m_surfaceManipulatorRadius, "Surface Manipulator Radius",
"Radius of default Surface Manipulator (for Translation Manipulators)")
->Attribute(AZ::Edit::Attributes::Min, 0.05f)
->Attribute(AZ::Edit::Attributes::Max, 1.0f)
->DataElement(
AZ::Edit::UIHandlers::SpinBox, &Manipulators::m_surfaceManipulatorOpacity, "Surface Manipulator Opacity",
"Opacity of default Surface Manipulator (for Translation Manipulators)")
->Attribute(AZ::Edit::Attributes::Min, 0.01f)
->Attribute(AZ::Edit::Attributes::Max, 1.0f)
->DataElement(
AZ::Edit::UIHandlers::SpinBox, &Manipulators::m_linearManipulatorConeLength, "Linear Manipulator Cone Length",
"Length of cone for default Linear Manipulator (for Translation Manipulators)")
->Attribute(AZ::Edit::Attributes::Min, 0.05f)
->Attribute(AZ::Edit::Attributes::Max, 1.0f)
->DataElement(
AZ::Edit::UIHandlers::SpinBox, &Manipulators::m_linearManipulatorConeRadius, "Linear Manipulator Cone Radius",
"Radius of cone for default Linear Manipulator (for Translation Manipulators)")
->Attribute(AZ::Edit::Attributes::Min, 0.05f)
->Attribute(AZ::Edit::Attributes::Max, 0.5f)
->DataElement(
AZ::Edit::UIHandlers::SpinBox, &Manipulators::m_scaleManipulatorBoxHalfExtent, "Scale Manipulator Box Half Extent",
"Half extent of box for default Scale Manipulator")
->Attribute(AZ::Edit::Attributes::Min, 0.05f)
->Attribute(AZ::Edit::Attributes::Max, 1.0f)
->DataElement(
AZ::Edit::UIHandlers::SpinBox, &Manipulators::m_rotationManipulatorRadius, "Rotation Manipulator Radius",
"Radius of default Angular Manipulators (for Rotation Manipulators)")
->Attribute(AZ::Edit::Attributes::Min, 0.5f)
->Attribute(AZ::Edit::Attributes::Max, 5.0f)
->DataElement(
AZ::Edit::UIHandlers::SpinBox, &Manipulators::m_manipulatorViewBaseScale, "Manipulator View Base Scale",
"The base scale to apply to all Manipulator Views (default is 1.0)")
->Attribute(AZ::Edit::Attributes::Min, 0.5f)
->Attribute(AZ::Edit::Attributes::Max, 2.0f)
->DataElement(
AZ::Edit::UIHandlers::CheckBox, &Manipulators::m_flipManipulatorAxesTowardsView, "Flip Manipulator Axes Towards View",
"Determines whether Planar and Linear Manipulators should switch to face the view (camera) in the Editor");
editContext editContext
->Class<CEditorPreferencesPage_ViewportManipulator>("Manipulator Viewport Preferences", "Manipulator Viewport Preferences") ->Class<CEditorPreferencesPage_ViewportManipulator>("Manipulator Viewport Preferences", "Manipulator Viewport Preferences")
@ -82,10 +142,32 @@ void CEditorPreferencesPage_ViewportManipulator::OnApply()
{ {
SandboxEditor::SetManipulatorLineBoundWidth(m_manipulators.m_manipulatorLineBoundWidth); SandboxEditor::SetManipulatorLineBoundWidth(m_manipulators.m_manipulatorLineBoundWidth);
SandboxEditor::SetManipulatorCircleBoundWidth(m_manipulators.m_manipulatorCircleBoundWidth); SandboxEditor::SetManipulatorCircleBoundWidth(m_manipulators.m_manipulatorCircleBoundWidth);
AzToolsFramework::SetLinearManipulatorAxisLength(m_manipulators.m_linearManipulatorAxisLength);
AzToolsFramework::SetPlanarManipulatorAxisLength(m_manipulators.m_planarManipulatorAxisLength);
AzToolsFramework::SetSurfaceManipulatorRadius(m_manipulators.m_surfaceManipulatorRadius);
AzToolsFramework::SetSurfaceManipulatorOpacity(m_manipulators.m_surfaceManipulatorOpacity);
AzToolsFramework::SetLinearManipulatorConeLength(m_manipulators.m_linearManipulatorConeLength);
AzToolsFramework::SetLinearManipulatorConeRadius(m_manipulators.m_linearManipulatorConeRadius);
AzToolsFramework::SetScaleManipulatorBoxHalfExtent(m_manipulators.m_scaleManipulatorBoxHalfExtent);
AzToolsFramework::SetRotationManipulatorRadius(m_manipulators.m_rotationManipulatorRadius);
AzToolsFramework::SetFlipManipulatorAxesTowardsView(m_manipulators.m_flipManipulatorAxesTowardsView);
AzToolsFramework::SetManipulatorViewBaseScale(m_manipulators.m_manipulatorViewBaseScale);
} }
void CEditorPreferencesPage_ViewportManipulator::InitializeSettings() void CEditorPreferencesPage_ViewportManipulator::InitializeSettings()
{ {
m_manipulators.m_manipulatorLineBoundWidth = SandboxEditor::ManipulatorLineBoundWidth(); m_manipulators.m_manipulatorLineBoundWidth = SandboxEditor::ManipulatorLineBoundWidth();
m_manipulators.m_manipulatorCircleBoundWidth = SandboxEditor::ManipulatorCircleBoundWidth(); m_manipulators.m_manipulatorCircleBoundWidth = SandboxEditor::ManipulatorCircleBoundWidth();
m_manipulators.m_linearManipulatorAxisLength = AzToolsFramework::LinearManipulatorAxisLength();
m_manipulators.m_planarManipulatorAxisLength = AzToolsFramework::PlanarManipulatorAxisLength();
m_manipulators.m_surfaceManipulatorRadius = AzToolsFramework::SurfaceManipulatorRadius();
m_manipulators.m_surfaceManipulatorOpacity = AzToolsFramework::SurfaceManipulatorOpacity();
m_manipulators.m_linearManipulatorConeLength = AzToolsFramework::LinearManipulatorConeLength();
m_manipulators.m_linearManipulatorConeRadius = AzToolsFramework::LinearManipulatorConeRadius();
m_manipulators.m_scaleManipulatorBoxHalfExtent = AzToolsFramework::ScaleManipulatorBoxHalfExtent();
m_manipulators.m_rotationManipulatorRadius = AzToolsFramework::RotationManipulatorRadius();
m_manipulators.m_flipManipulatorAxesTowardsView = AzToolsFramework::FlipManipulatorAxesTowardsView();
m_manipulators.m_manipulatorViewBaseScale = AzToolsFramework::ManipulatorViewBaseScale();
} }

@ -41,6 +41,16 @@ private:
float m_manipulatorLineBoundWidth = 0.0f; float m_manipulatorLineBoundWidth = 0.0f;
float m_manipulatorCircleBoundWidth = 0.0f; float m_manipulatorCircleBoundWidth = 0.0f;
float m_linearManipulatorAxisLength = 0.0f;
float m_planarManipulatorAxisLength = 0.0f;
float m_surfaceManipulatorRadius = 0.0f;
float m_surfaceManipulatorOpacity = 0.0f;
float m_linearManipulatorConeLength = 0.0f;
float m_linearManipulatorConeRadius = 0.0f;
float m_scaleManipulatorBoxHalfExtent = 0.0f;
float m_rotationManipulatorRadius = 0.0f;
float m_manipulatorViewBaseScale = 0.0f;
bool m_flipManipulatorAxesTowardsView = false;
}; };
Manipulators m_manipulators; Manipulators m_manipulators;

@ -12,6 +12,7 @@
#include <AzCore/Settings/SettingsRegistry.h> #include <AzCore/Settings/SettingsRegistry.h>
#include <AzCore/Settings/SettingsRegistryMergeUtils.h> #include <AzCore/Settings/SettingsRegistryMergeUtils.h>
#include <AzCore/std/string/string_view.h> #include <AzCore/std/string/string_view.h>
#include <AzToolsFramework/Viewport/ViewportSettings.h>
namespace SandboxEditor namespace SandboxEditor
{ {
@ -57,31 +58,6 @@ namespace SandboxEditor
constexpr AZStd::string_view CameraDefaultStartingPositionY = "/Amazon/Preferences/Editor/Camera/DefaultStartingPosition/y"; constexpr AZStd::string_view CameraDefaultStartingPositionY = "/Amazon/Preferences/Editor/Camera/DefaultStartingPosition/y";
constexpr AZStd::string_view CameraDefaultStartingPositionZ = "/Amazon/Preferences/Editor/Camera/DefaultStartingPosition/z"; constexpr AZStd::string_view CameraDefaultStartingPositionZ = "/Amazon/Preferences/Editor/Camera/DefaultStartingPosition/z";
template<typename T>
void SetRegistry(const AZStd::string_view setting, T&& value)
{
if (auto* registry = AZ::SettingsRegistry::Get())
{
registry->Set(setting, AZStd::forward<T>(value));
}
}
template<typename T>
AZStd::remove_cvref_t<T> GetRegistry(const AZStd::string_view setting, T&& defaultValue)
{
AZStd::remove_cvref_t<T> value = AZStd::forward<T>(defaultValue);
if (const auto* registry = AZ::SettingsRegistry::Get())
{
T potentialValue;
if (registry->Get(potentialValue, setting))
{
value = AZStd::move(potentialValue);
}
}
return value;
}
struct EditorViewportSettingsCallbacksImpl : public EditorViewportSettingsCallbacks struct EditorViewportSettingsCallbacksImpl : public EditorViewportSettingsCallbacks
{ {
EditorViewportSettingsCallbacksImpl() EditorViewportSettingsCallbacksImpl()
@ -118,399 +94,409 @@ namespace SandboxEditor
AZ::Vector3 CameraDefaultEditorPosition() AZ::Vector3 CameraDefaultEditorPosition()
{ {
return AZ::Vector3( return AZ::Vector3(
aznumeric_cast<float>(GetRegistry(CameraDefaultStartingPositionX, 0.0)), aznumeric_cast<float>(AzToolsFramework::GetRegistry(CameraDefaultStartingPositionX, 0.0)),
aznumeric_cast<float>(GetRegistry(CameraDefaultStartingPositionY, -10.0)), aznumeric_cast<float>(AzToolsFramework::GetRegistry(CameraDefaultStartingPositionY, -10.0)),
aznumeric_cast<float>(GetRegistry(CameraDefaultStartingPositionZ, 4.0))); aznumeric_cast<float>(AzToolsFramework::GetRegistry(CameraDefaultStartingPositionZ, 4.0)));
} }
void SetCameraDefaultEditorPosition(const AZ::Vector3& defaultCameraPosition) void SetCameraDefaultEditorPosition(const AZ::Vector3& defaultCameraPosition)
{ {
SetRegistry(CameraDefaultStartingPositionX, defaultCameraPosition.GetX()); AzToolsFramework::SetRegistry(CameraDefaultStartingPositionX, defaultCameraPosition.GetX());
SetRegistry(CameraDefaultStartingPositionY, defaultCameraPosition.GetY()); AzToolsFramework::SetRegistry(CameraDefaultStartingPositionY, defaultCameraPosition.GetY());
SetRegistry(CameraDefaultStartingPositionZ, defaultCameraPosition.GetZ()); AzToolsFramework::SetRegistry(CameraDefaultStartingPositionZ, defaultCameraPosition.GetZ());
} }
AZ::u64 MaxItemsShownInAssetBrowserSearch() AZ::u64 MaxItemsShownInAssetBrowserSearch()
{ {
return GetRegistry(AssetBrowserMaxItemsShownInSearchSetting, aznumeric_cast<AZ::u64>(50)); return AzToolsFramework::GetRegistry(AssetBrowserMaxItemsShownInSearchSetting, aznumeric_cast<AZ::u64>(50));
} }
void SetMaxItemsShownInAssetBrowserSearch(const AZ::u64 numberOfItemsShown) void SetMaxItemsShownInAssetBrowserSearch(const AZ::u64 numberOfItemsShown)
{ {
SetRegistry(AssetBrowserMaxItemsShownInSearchSetting, numberOfItemsShown); AzToolsFramework::SetRegistry(AssetBrowserMaxItemsShownInSearchSetting, numberOfItemsShown);
} }
bool GridSnappingEnabled() bool GridSnappingEnabled()
{ {
return GetRegistry(GridSnappingSetting, false); return AzToolsFramework::GetRegistry(GridSnappingSetting, false);
} }
void SetGridSnapping(const bool enabled) void SetGridSnapping(const bool enabled)
{ {
SetRegistry(GridSnappingSetting, enabled); AzToolsFramework::SetRegistry(GridSnappingSetting, enabled);
} }
float GridSnappingSize() float GridSnappingSize()
{ {
return aznumeric_cast<float>(GetRegistry(GridSizeSetting, 0.1)); return aznumeric_cast<float>(AzToolsFramework::GetRegistry(GridSizeSetting, 0.1));
} }
void SetGridSnappingSize(const float size) void SetGridSnappingSize(const float size)
{ {
SetRegistry(GridSizeSetting, size); AzToolsFramework::SetRegistry(GridSizeSetting, size);
} }
bool AngleSnappingEnabled() bool AngleSnappingEnabled()
{ {
return GetRegistry(AngleSnappingSetting, false); return AzToolsFramework::GetRegistry(AngleSnappingSetting, false);
} }
void SetAngleSnapping(const bool enabled) void SetAngleSnapping(const bool enabled)
{ {
SetRegistry(AngleSnappingSetting, enabled); AzToolsFramework::SetRegistry(AngleSnappingSetting, enabled);
} }
float AngleSnappingSize() float AngleSnappingSize()
{ {
return aznumeric_cast<float>(GetRegistry(AngleSizeSetting, 5.0)); return aznumeric_cast<float>(AzToolsFramework::GetRegistry(AngleSizeSetting, 5.0));
} }
void SetAngleSnappingSize(const float size) void SetAngleSnappingSize(const float size)
{ {
SetRegistry(AngleSizeSetting, size); AzToolsFramework::SetRegistry(AngleSizeSetting, size);
} }
bool ShowingGrid() bool ShowingGrid()
{ {
return GetRegistry(ShowGridSetting, false); return AzToolsFramework::GetRegistry(ShowGridSetting, false);
} }
void SetShowingGrid(const bool showing) void SetShowingGrid(const bool showing)
{ {
SetRegistry(ShowGridSetting, showing); AzToolsFramework::SetRegistry(ShowGridSetting, showing);
} }
bool StickySelectEnabled() bool StickySelectEnabled()
{ {
return GetRegistry(StickySelectSetting, false); return AzToolsFramework::GetRegistry(StickySelectSetting, false);
} }
void SetStickySelectEnabled(const bool enabled) void SetStickySelectEnabled(const bool enabled)
{ {
SetRegistry(StickySelectSetting, enabled); AzToolsFramework::SetRegistry(StickySelectSetting, enabled);
} }
float ManipulatorLineBoundWidth() float ManipulatorLineBoundWidth()
{ {
return aznumeric_cast<float>(GetRegistry(ManipulatorLineBoundWidthSetting, 0.1)); return aznumeric_cast<float>(AzToolsFramework::GetRegistry(ManipulatorLineBoundWidthSetting, 0.1));
} }
void SetManipulatorLineBoundWidth(const float lineBoundWidth) void SetManipulatorLineBoundWidth(const float lineBoundWidth)
{ {
SetRegistry(ManipulatorLineBoundWidthSetting, lineBoundWidth); AzToolsFramework::SetRegistry(ManipulatorLineBoundWidthSetting, lineBoundWidth);
} }
float ManipulatorCircleBoundWidth() float ManipulatorCircleBoundWidth()
{ {
return aznumeric_cast<float>(GetRegistry(ManipulatorCircleBoundWidthSetting, 0.1)); return aznumeric_cast<float>(AzToolsFramework::GetRegistry(ManipulatorCircleBoundWidthSetting, 0.1));
} }
void SetManipulatorCircleBoundWidth(const float circleBoundWidth) void SetManipulatorCircleBoundWidth(const float circleBoundWidth)
{ {
SetRegistry(ManipulatorCircleBoundWidthSetting, circleBoundWidth); AzToolsFramework::SetRegistry(ManipulatorCircleBoundWidthSetting, circleBoundWidth);
} }
float CameraTranslateSpeed() float CameraTranslateSpeed()
{ {
return aznumeric_cast<float>(GetRegistry(CameraTranslateSpeedSetting, 10.0)); return aznumeric_cast<float>(AzToolsFramework::GetRegistry(CameraTranslateSpeedSetting, 10.0));
} }
void SetCameraTranslateSpeed(const float speed) void SetCameraTranslateSpeed(const float speed)
{ {
SetRegistry(CameraTranslateSpeedSetting, speed); AzToolsFramework::SetRegistry(CameraTranslateSpeedSetting, speed);
} }
float CameraBoostMultiplier() float CameraBoostMultiplier()
{ {
return aznumeric_cast<float>(GetRegistry(CameraBoostMultiplierSetting, 3.0)); return aznumeric_cast<float>(AzToolsFramework::GetRegistry(CameraBoostMultiplierSetting, 3.0));
} }
void SetCameraBoostMultiplier(const float multiplier) void SetCameraBoostMultiplier(const float multiplier)
{ {
SetRegistry(CameraBoostMultiplierSetting, multiplier); AzToolsFramework::SetRegistry(CameraBoostMultiplierSetting, multiplier);
} }
float CameraRotateSpeed() float CameraRotateSpeed()
{ {
return aznumeric_cast<float>(GetRegistry(CameraRotateSpeedSetting, 0.005)); return aznumeric_cast<float>(AzToolsFramework::GetRegistry(CameraRotateSpeedSetting, 0.005));
} }
void SetCameraRotateSpeed(const float speed) void SetCameraRotateSpeed(const float speed)
{ {
SetRegistry(CameraRotateSpeedSetting, speed); AzToolsFramework::SetRegistry(CameraRotateSpeedSetting, speed);
} }
float CameraScrollSpeed() float CameraScrollSpeed()
{ {
return aznumeric_cast<float>(GetRegistry(CameraScrollSpeedSetting, 0.02)); return aznumeric_cast<float>(AzToolsFramework::GetRegistry(CameraScrollSpeedSetting, 0.02));
} }
void SetCameraScrollSpeed(const float speed) void SetCameraScrollSpeed(const float speed)
{ {
SetRegistry(CameraScrollSpeedSetting, speed); AzToolsFramework::SetRegistry(CameraScrollSpeedSetting, speed);
} }
float CameraDollyMotionSpeed() float CameraDollyMotionSpeed()
{ {
return aznumeric_cast<float>(GetRegistry(CameraDollyMotionSpeedSetting, 0.01)); return aznumeric_cast<float>(AzToolsFramework::GetRegistry(CameraDollyMotionSpeedSetting, 0.01));
} }
void SetCameraDollyMotionSpeed(const float speed) void SetCameraDollyMotionSpeed(const float speed)
{ {
SetRegistry(CameraDollyMotionSpeedSetting, speed); AzToolsFramework::SetRegistry(CameraDollyMotionSpeedSetting, speed);
} }
bool CameraOrbitYawRotationInverted() bool CameraOrbitYawRotationInverted()
{ {
return GetRegistry(CameraOrbitYawRotationInvertedSetting, false); return AzToolsFramework::GetRegistry(CameraOrbitYawRotationInvertedSetting, false);
} }
void SetCameraOrbitYawRotationInverted(const bool inverted) void SetCameraOrbitYawRotationInverted(const bool inverted)
{ {
SetRegistry(CameraOrbitYawRotationInvertedSetting, inverted); AzToolsFramework::SetRegistry(CameraOrbitYawRotationInvertedSetting, inverted);
} }
bool CameraPanInvertedX() bool CameraPanInvertedX()
{ {
return GetRegistry(CameraPanInvertedXSetting, true); return AzToolsFramework::GetRegistry(CameraPanInvertedXSetting, true);
} }
void SetCameraPanInvertedX(const bool inverted) void SetCameraPanInvertedX(const bool inverted)
{ {
SetRegistry(CameraPanInvertedXSetting, inverted); AzToolsFramework::SetRegistry(CameraPanInvertedXSetting, inverted);
} }
bool CameraPanInvertedY() bool CameraPanInvertedY()
{ {
return GetRegistry(CameraPanInvertedYSetting, true); return AzToolsFramework::GetRegistry(CameraPanInvertedYSetting, true);
} }
void SetCameraPanInvertedY(const bool inverted) void SetCameraPanInvertedY(const bool inverted)
{ {
SetRegistry(CameraPanInvertedYSetting, inverted); AzToolsFramework::SetRegistry(CameraPanInvertedYSetting, inverted);
} }
float CameraPanSpeed() float CameraPanSpeed()
{ {
return aznumeric_cast<float>(GetRegistry(CameraPanSpeedSetting, 0.01)); return aznumeric_cast<float>(AzToolsFramework::GetRegistry(CameraPanSpeedSetting, 0.01));
} }
void SetCameraPanSpeed(float speed) void SetCameraPanSpeed(float speed)
{ {
SetRegistry(CameraPanSpeedSetting, speed); AzToolsFramework::SetRegistry(CameraPanSpeedSetting, speed);
} }
float CameraRotateSmoothness() float CameraRotateSmoothness()
{ {
return aznumeric_cast<float>(GetRegistry(CameraRotateSmoothnessSetting, 5.0)); return aznumeric_cast<float>(AzToolsFramework::GetRegistry(CameraRotateSmoothnessSetting, 5.0));
} }
void SetCameraRotateSmoothness(const float smoothness) void SetCameraRotateSmoothness(const float smoothness)
{ {
SetRegistry(CameraRotateSmoothnessSetting, smoothness); AzToolsFramework::SetRegistry(CameraRotateSmoothnessSetting, smoothness);
} }
float CameraTranslateSmoothness() float CameraTranslateSmoothness()
{ {
return aznumeric_cast<float>(GetRegistry(CameraTranslateSmoothnessSetting, 5.0)); return aznumeric_cast<float>(AzToolsFramework::GetRegistry(CameraTranslateSmoothnessSetting, 5.0));
} }
void SetCameraTranslateSmoothness(const float smoothness) void SetCameraTranslateSmoothness(const float smoothness)
{ {
SetRegistry(CameraTranslateSmoothnessSetting, smoothness); AzToolsFramework::SetRegistry(CameraTranslateSmoothnessSetting, smoothness);
} }
bool CameraRotateSmoothingEnabled() bool CameraRotateSmoothingEnabled()
{ {
return GetRegistry(CameraRotateSmoothingSetting, true); return AzToolsFramework::GetRegistry(CameraRotateSmoothingSetting, true);
} }
void SetCameraRotateSmoothingEnabled(const bool enabled) void SetCameraRotateSmoothingEnabled(const bool enabled)
{ {
SetRegistry(CameraRotateSmoothingSetting, enabled); AzToolsFramework::SetRegistry(CameraRotateSmoothingSetting, enabled);
} }
bool CameraTranslateSmoothingEnabled() bool CameraTranslateSmoothingEnabled()
{ {
return GetRegistry(CameraTranslateSmoothingSetting, true); return AzToolsFramework::GetRegistry(CameraTranslateSmoothingSetting, true);
} }
void SetCameraTranslateSmoothingEnabled(const bool enabled) void SetCameraTranslateSmoothingEnabled(const bool enabled)
{ {
SetRegistry(CameraTranslateSmoothingSetting, enabled); AzToolsFramework::SetRegistry(CameraTranslateSmoothingSetting, enabled);
} }
bool CameraCaptureCursorForLook() bool CameraCaptureCursorForLook()
{ {
return GetRegistry(CameraCaptureCursorLookSetting, true); return AzToolsFramework::GetRegistry(CameraCaptureCursorLookSetting, true);
} }
void SetCameraCaptureCursorForLook(const bool capture) void SetCameraCaptureCursorForLook(const bool capture)
{ {
SetRegistry(CameraCaptureCursorLookSetting, capture); AzToolsFramework::SetRegistry(CameraCaptureCursorLookSetting, capture);
} }
float CameraDefaultOrbitDistance() float CameraDefaultOrbitDistance()
{ {
return aznumeric_cast<float>(GetRegistry(CameraDefaultOrbitDistanceSetting, 20.0)); return aznumeric_cast<float>(AzToolsFramework::GetRegistry(CameraDefaultOrbitDistanceSetting, 20.0));
} }
void SetCameraDefaultOrbitDistance(const float distance) void SetCameraDefaultOrbitDistance(const float distance)
{ {
SetRegistry(CameraDefaultOrbitDistanceSetting, distance); AzToolsFramework::SetRegistry(CameraDefaultOrbitDistanceSetting, distance);
} }
AzFramework::InputChannelId CameraTranslateForwardChannelId() AzFramework::InputChannelId CameraTranslateForwardChannelId()
{ {
return AzFramework::InputChannelId( return AzFramework::InputChannelId(
GetRegistry(CameraTranslateForwardIdSetting, AZStd::string("keyboard_key_alphanumeric_W")).c_str()); AzToolsFramework::GetRegistry(CameraTranslateForwardIdSetting, AZStd::string("keyboard_key_alphanumeric_W")).c_str());
} }
void SetCameraTranslateForwardChannelId(AZStd::string_view cameraTranslateForwardId) void SetCameraTranslateForwardChannelId(AZStd::string_view cameraTranslateForwardId)
{ {
SetRegistry(CameraTranslateForwardIdSetting, cameraTranslateForwardId); AzToolsFramework::SetRegistry(CameraTranslateForwardIdSetting, cameraTranslateForwardId);
} }
AzFramework::InputChannelId CameraTranslateBackwardChannelId() AzFramework::InputChannelId CameraTranslateBackwardChannelId()
{ {
return AzFramework::InputChannelId( return AzFramework::InputChannelId(
GetRegistry(CameraTranslateBackwardIdSetting, AZStd::string("keyboard_key_alphanumeric_S")).c_str()); AzToolsFramework::GetRegistry(CameraTranslateBackwardIdSetting, AZStd::string("keyboard_key_alphanumeric_S")).c_str());
} }
void SetCameraTranslateBackwardChannelId(AZStd::string_view cameraTranslateBackwardId) void SetCameraTranslateBackwardChannelId(AZStd::string_view cameraTranslateBackwardId)
{ {
SetRegistry(CameraTranslateBackwardIdSetting, cameraTranslateBackwardId); AzToolsFramework::SetRegistry(CameraTranslateBackwardIdSetting, cameraTranslateBackwardId);
} }
AzFramework::InputChannelId CameraTranslateLeftChannelId() AzFramework::InputChannelId CameraTranslateLeftChannelId()
{ {
return AzFramework::InputChannelId(GetRegistry(CameraTranslateLeftIdSetting, AZStd::string("keyboard_key_alphanumeric_A")).c_str()); return AzFramework::InputChannelId(
AzToolsFramework::GetRegistry(CameraTranslateLeftIdSetting, AZStd::string("keyboard_key_alphanumeric_A")).c_str());
} }
void SetCameraTranslateLeftChannelId(AZStd::string_view cameraTranslateLeftId) void SetCameraTranslateLeftChannelId(AZStd::string_view cameraTranslateLeftId)
{ {
SetRegistry(CameraTranslateLeftIdSetting, cameraTranslateLeftId); AzToolsFramework::SetRegistry(CameraTranslateLeftIdSetting, cameraTranslateLeftId);
} }
AzFramework::InputChannelId CameraTranslateRightChannelId() AzFramework::InputChannelId CameraTranslateRightChannelId()
{ {
return AzFramework::InputChannelId( return AzFramework::InputChannelId(
GetRegistry(CameraTranslateRightIdSetting, AZStd::string("keyboard_key_alphanumeric_D")).c_str()); AzToolsFramework::GetRegistry(CameraTranslateRightIdSetting, AZStd::string("keyboard_key_alphanumeric_D")).c_str());
} }
void SetCameraTranslateRightChannelId(AZStd::string_view cameraTranslateRightId) void SetCameraTranslateRightChannelId(AZStd::string_view cameraTranslateRightId)
{ {
SetRegistry(CameraTranslateRightIdSetting, cameraTranslateRightId); AzToolsFramework::SetRegistry(CameraTranslateRightIdSetting, cameraTranslateRightId);
} }
AzFramework::InputChannelId CameraTranslateUpChannelId() AzFramework::InputChannelId CameraTranslateUpChannelId()
{ {
return AzFramework::InputChannelId(GetRegistry(CameraTranslateUpIdSetting, AZStd::string("keyboard_key_alphanumeric_E")).c_str()); return AzFramework::InputChannelId(
AzToolsFramework::GetRegistry(CameraTranslateUpIdSetting, AZStd::string("keyboard_key_alphanumeric_E")).c_str());
} }
void SetCameraTranslateUpChannelId(AZStd::string_view cameraTranslateUpId) void SetCameraTranslateUpChannelId(AZStd::string_view cameraTranslateUpId)
{ {
SetRegistry(CameraTranslateUpIdSetting, cameraTranslateUpId); AzToolsFramework::SetRegistry(CameraTranslateUpIdSetting, cameraTranslateUpId);
} }
AzFramework::InputChannelId CameraTranslateDownChannelId() AzFramework::InputChannelId CameraTranslateDownChannelId()
{ {
return AzFramework::InputChannelId(GetRegistry(CameraTranslateDownIdSetting, AZStd::string("keyboard_key_alphanumeric_Q")).c_str()); return AzFramework::InputChannelId(
AzToolsFramework::GetRegistry(CameraTranslateDownIdSetting, AZStd::string("keyboard_key_alphanumeric_Q")).c_str());
} }
void SetCameraTranslateDownChannelId(AZStd::string_view cameraTranslateDownId) void SetCameraTranslateDownChannelId(AZStd::string_view cameraTranslateDownId)
{ {
SetRegistry(CameraTranslateDownIdSetting, cameraTranslateDownId); AzToolsFramework::SetRegistry(CameraTranslateDownIdSetting, cameraTranslateDownId);
} }
AzFramework::InputChannelId CameraTranslateBoostChannelId() AzFramework::InputChannelId CameraTranslateBoostChannelId()
{ {
return AzFramework::InputChannelId( return AzFramework::InputChannelId(
GetRegistry(CameraTranslateBoostIdSetting, AZStd::string("keyboard_key_modifier_shift_l")).c_str()); AzToolsFramework::GetRegistry(CameraTranslateBoostIdSetting, AZStd::string("keyboard_key_modifier_shift_l")).c_str());
} }
void SetCameraTranslateBoostChannelId(AZStd::string_view cameraTranslateBoostId) void SetCameraTranslateBoostChannelId(AZStd::string_view cameraTranslateBoostId)
{ {
SetRegistry(CameraTranslateBoostIdSetting, cameraTranslateBoostId); AzToolsFramework::SetRegistry(CameraTranslateBoostIdSetting, cameraTranslateBoostId);
} }
AzFramework::InputChannelId CameraOrbitChannelId() AzFramework::InputChannelId CameraOrbitChannelId()
{ {
return AzFramework::InputChannelId(GetRegistry(CameraOrbitIdSetting, AZStd::string("keyboard_key_modifier_alt_l")).c_str()); return AzFramework::InputChannelId(
AzToolsFramework::GetRegistry(CameraOrbitIdSetting, AZStd::string("keyboard_key_modifier_alt_l")).c_str());
} }
void SetCameraOrbitChannelId(AZStd::string_view cameraOrbitId) void SetCameraOrbitChannelId(AZStd::string_view cameraOrbitId)
{ {
SetRegistry(CameraOrbitIdSetting, cameraOrbitId); AzToolsFramework::SetRegistry(CameraOrbitIdSetting, cameraOrbitId);
} }
AzFramework::InputChannelId CameraFreeLookChannelId() AzFramework::InputChannelId CameraFreeLookChannelId()
{ {
return AzFramework::InputChannelId(GetRegistry(CameraFreeLookIdSetting, AZStd::string("mouse_button_right")).c_str()); return AzFramework::InputChannelId(
AzToolsFramework::GetRegistry(CameraFreeLookIdSetting, AZStd::string("mouse_button_right")).c_str());
} }
void SetCameraFreeLookChannelId(AZStd::string_view cameraFreeLookId) void SetCameraFreeLookChannelId(AZStd::string_view cameraFreeLookId)
{ {
SetRegistry(CameraFreeLookIdSetting, cameraFreeLookId); AzToolsFramework::SetRegistry(CameraFreeLookIdSetting, cameraFreeLookId);
} }
AzFramework::InputChannelId CameraFreePanChannelId() AzFramework::InputChannelId CameraFreePanChannelId()
{ {
return AzFramework::InputChannelId(GetRegistry(CameraFreePanIdSetting, AZStd::string("mouse_button_middle")).c_str()); return AzFramework::InputChannelId(
AzToolsFramework::GetRegistry(CameraFreePanIdSetting, AZStd::string("mouse_button_middle")).c_str());
} }
void SetCameraFreePanChannelId(AZStd::string_view cameraFreePanId) void SetCameraFreePanChannelId(AZStd::string_view cameraFreePanId)
{ {
SetRegistry(CameraFreePanIdSetting, cameraFreePanId); AzToolsFramework::SetRegistry(CameraFreePanIdSetting, cameraFreePanId);
} }
AzFramework::InputChannelId CameraOrbitLookChannelId() AzFramework::InputChannelId CameraOrbitLookChannelId()
{ {
return AzFramework::InputChannelId(GetRegistry(CameraOrbitLookIdSetting, AZStd::string("mouse_button_left")).c_str()); return AzFramework::InputChannelId(
AzToolsFramework::GetRegistry(CameraOrbitLookIdSetting, AZStd::string("mouse_button_left")).c_str());
} }
void SetCameraOrbitLookChannelId(AZStd::string_view cameraOrbitLookId) void SetCameraOrbitLookChannelId(AZStd::string_view cameraOrbitLookId)
{ {
SetRegistry(CameraOrbitLookIdSetting, cameraOrbitLookId); AzToolsFramework::SetRegistry(CameraOrbitLookIdSetting, cameraOrbitLookId);
} }
AzFramework::InputChannelId CameraOrbitDollyChannelId() AzFramework::InputChannelId CameraOrbitDollyChannelId()
{ {
return AzFramework::InputChannelId(GetRegistry(CameraOrbitDollyIdSetting, AZStd::string("mouse_button_right")).c_str()); return AzFramework::InputChannelId(
AzToolsFramework::GetRegistry(CameraOrbitDollyIdSetting, AZStd::string("mouse_button_right")).c_str());
} }
void SetCameraOrbitDollyChannelId(AZStd::string_view cameraOrbitDollyId) void SetCameraOrbitDollyChannelId(AZStd::string_view cameraOrbitDollyId)
{ {
SetRegistry(CameraOrbitDollyIdSetting, cameraOrbitDollyId); AzToolsFramework::SetRegistry(CameraOrbitDollyIdSetting, cameraOrbitDollyId);
} }
AzFramework::InputChannelId CameraOrbitPanChannelId() AzFramework::InputChannelId CameraOrbitPanChannelId()
{ {
return AzFramework::InputChannelId(GetRegistry(CameraOrbitPanIdSetting, AZStd::string("mouse_button_middle")).c_str()); return AzFramework::InputChannelId(
AzToolsFramework::GetRegistry(CameraOrbitPanIdSetting, AZStd::string("mouse_button_middle")).c_str());
} }
void SetCameraOrbitPanChannelId(AZStd::string_view cameraOrbitPanId) void SetCameraOrbitPanChannelId(AZStd::string_view cameraOrbitPanId)
{ {
SetRegistry(CameraOrbitPanIdSetting, cameraOrbitPanId); AzToolsFramework::SetRegistry(CameraOrbitPanIdSetting, cameraOrbitPanId);
} }
AzFramework::InputChannelId CameraFocusChannelId() AzFramework::InputChannelId CameraFocusChannelId()
{ {
return AzFramework::InputChannelId(GetRegistry(CameraFocusIdSetting, AZStd::string("keyboard_key_alphanumeric_X")).c_str()); return AzFramework::InputChannelId(
AzToolsFramework::GetRegistry(CameraFocusIdSetting, AZStd::string("keyboard_key_alphanumeric_X")).c_str());
} }
void SetCameraFocusChannelId(AZStd::string_view cameraFocusId) void SetCameraFocusChannelId(AZStd::string_view cameraFocusId)
{ {
SetRegistry(CameraFocusIdSetting, cameraFocusId); AzToolsFramework::SetRegistry(CameraFocusIdSetting, cameraFocusId);
} }
} // namespace SandboxEditor } // namespace SandboxEditor

@ -14,7 +14,7 @@
namespace AzToolsFramework namespace AzToolsFramework
{ {
AZ_CVAR(bool, cl_manipulatorDrawDebug, false, nullptr, AZ::ConsoleFunctorFlags::Null, "Enable debug drawing for Manipulators"); AZ_CVAR(bool, ed_manipulatorDrawDebug, false, nullptr, AZ::ConsoleFunctorFlags::Null, "Enable debug drawing for Manipulators");
const AZ::Color BaseManipulator::s_defaultMouseOverColor = AZ::Color(1.0f, 1.0f, 0.0f, 1.0f); // yellow const AZ::Color BaseManipulator::s_defaultMouseOverColor = AZ::Color(1.0f, 1.0f, 0.0f, 1.0f); // yellow

@ -28,7 +28,7 @@ namespace AzFramework
namespace AzToolsFramework namespace AzToolsFramework
{ {
AZ_CVAR_EXTERNED(bool, cl_manipulatorDrawDebug); AZ_CVAR_EXTERNED(bool, ed_manipulatorDrawDebug);
namespace UndoSystem namespace UndoSystem
{ {

@ -207,7 +207,7 @@ namespace AzToolsFramework
? AZ::Transform::CreateFromQuaternionAndTranslation(m_visualOrientationOverride, GetLocalPosition()) ? AZ::Transform::CreateFromQuaternionAndTranslation(m_visualOrientationOverride, GetLocalPosition())
: GetLocalTransform(); : GetLocalTransform();
if (cl_manipulatorDrawDebug) if (ed_manipulatorDrawDebug)
{ {
if (PerformingAction()) if (PerformingAction())
{ {

@ -21,6 +21,7 @@
#include <AzToolsFramework/Manipulators/PlanarManipulator.h> #include <AzToolsFramework/Manipulators/PlanarManipulator.h>
#include <AzToolsFramework/Manipulators/SplineSelectionManipulator.h> #include <AzToolsFramework/Manipulators/SplineSelectionManipulator.h>
#include <AzToolsFramework/Maths/TransformUtils.h> #include <AzToolsFramework/Maths/TransformUtils.h>
#include <AzToolsFramework/Viewport/ViewportSettings.h>
#include <AzToolsFramework/ViewportSelection/EditorSelectionUtil.h> #include <AzToolsFramework/ViewportSelection/EditorSelectionUtil.h>
AZ_CVAR( AZ_CVAR(
@ -30,6 +31,13 @@ AZ_CVAR(
nullptr, nullptr,
AZ::ConsoleFunctorFlags::Null, AZ::ConsoleFunctorFlags::Null,
"Display additional debug drawing for manipulator bounds"); "Display additional debug drawing for manipulator bounds");
AZ_CVAR(
float,
ed_planarManipulatorBoundScaleFactor,
1.75f,
nullptr,
AZ::ConsoleFunctorFlags::Null,
"The scale factor to apply to the planar manipulator bounds");
namespace AzToolsFramework namespace AzToolsFramework
{ {
@ -78,7 +86,8 @@ namespace AzToolsFramework
{ {
// check if we actually needed to flip the axis, if so, write to shouldCorrect // check if we actually needed to flip the axis, if so, write to shouldCorrect
// so we know and are able to draw it differently if we wish (e.g. hollow if flipped) // so we know and are able to draw it differently if we wish (e.g. hollow if flipped)
const bool correcting = ShouldFlipCameraAxis(worldFromLocal, localPosition, axis, cameraState); const bool correcting =
FlipManipulatorAxesTowardsView() && ShouldFlipCameraAxis(worldFromLocal, localPosition, axis, cameraState);
// the corrected axis, if no flip was required, output == input // the corrected axis, if no flip was required, output == input
correctedAxis = correcting ? -axis : axis; correctedAxis = correcting ? -axis : axis;
@ -325,7 +334,8 @@ namespace AzToolsFramework
float ManipulatorView::ManipulatorViewScaleMultiplier( float ManipulatorView::ManipulatorViewScaleMultiplier(
const AZ::Vector3& worldPosition, const AzFramework::CameraState& cameraState) const const AZ::Vector3& worldPosition, const AzFramework::CameraState& cameraState) const
{ {
return ScreenSizeFixed() ? CalculateScreenToWorldMultiplier(worldPosition, cameraState) : 1.0f; const float screenScale = ScreenSizeFixed() ? CalculateScreenToWorldMultiplier(worldPosition, cameraState) : 1.0f;
return screenScale * ManipulatorViewBaseScale();
} }
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@ -342,47 +352,77 @@ namespace AzToolsFramework
const AZ::Vector3 axis1 = m_axis1; const AZ::Vector3 axis1 = m_axis1;
const AZ::Vector3 axis2 = m_axis2; const AZ::Vector3 axis2 = m_axis2;
CameraCorrectAxis( // support partial application of CameraCorrectAxis to reduce redundant call site parameters
axis1, m_cameraCorrectedAxis1, managerState, mouseInteraction, manipulatorState.m_worldFromLocal, auto cameraCorrectAxisPartialFn =
manipulatorState.m_localPosition, cameraState); [&manipulatorState, &managerState, &mouseInteraction, &cameraState](const AZ::Vector3& inAxis, AZ::Vector3& outAxis)
CameraCorrectAxis( {
axis2, m_cameraCorrectedAxis2, managerState, mouseInteraction, manipulatorState.m_worldFromLocal, CameraCorrectAxis(
manipulatorState.m_localPosition, cameraState); inAxis, outAxis, managerState, mouseInteraction, manipulatorState.m_worldFromLocal, manipulatorState.m_localPosition,
cameraState);
};
const Picking::BoundShapeQuad quadBound = CalculateQuadBound( cameraCorrectAxisPartialFn(axis1, m_cameraCorrectedAxis1);
manipulatorState.m_localPosition, manipulatorState, m_cameraCorrectedAxis1, m_cameraCorrectedAxis2, cameraCorrectAxisPartialFn(axis2, m_cameraCorrectedAxis2);
m_size * cameraCorrectAxisPartialFn(axis1 * axis1.Dot(m_offset), m_cameraCorrectedOffsetAxis1);
ManipulatorViewScaleMultiplier( cameraCorrectAxisPartialFn(axis2 * axis2.Dot(m_offset), m_cameraCorrectedOffsetAxis2);
manipulatorState.m_worldFromLocal.TransformPoint(manipulatorState.m_localPosition), cameraState));
const AZ::Vector3 totalScale =
manipulatorState.m_nonUniformScale * AZ::Vector3(manipulatorState.m_worldFromLocal.GetUniformScale());
const auto cameraCorrectedVisualOffset = (m_cameraCorrectedOffsetAxis1 + m_cameraCorrectedOffsetAxis2) * totalScale.GetReciprocal();
const auto viewScale =
ManipulatorViewScaleMultiplier(manipulatorState.m_worldFromLocal.TransformPoint(manipulatorState.m_localPosition), cameraState);
const Picking::BoundShapeQuad quadBoundVisual = CalculateQuadBound(
manipulatorState.m_localPosition + (cameraCorrectedVisualOffset * viewScale), manipulatorState, m_cameraCorrectedAxis1,
m_cameraCorrectedAxis2, m_size * viewScale);
debugDisplay.SetLineWidth(defaultLineWidth(manipulatorState.m_mouseOver)); debugDisplay.SetLineWidth(defaultLineWidth(manipulatorState.m_mouseOver));
debugDisplay.SetColor(ViewColor(manipulatorState.m_mouseOver, m_axis1Color, m_mouseOverColor).GetAsVector4()); debugDisplay.SetColor(ViewColor(manipulatorState.m_mouseOver, m_axis1Color, m_mouseOverColor).GetAsVector4());
debugDisplay.DrawLine(quadBound.m_corner4, quadBound.m_corner3); debugDisplay.DrawLine(quadBoundVisual.m_corner4, quadBoundVisual.m_corner3);
debugDisplay.DrawLine(quadBoundVisual.m_corner1, quadBoundVisual.m_corner2);
debugDisplay.SetColor(ViewColor(manipulatorState.m_mouseOver, m_axis2Color, m_mouseOverColor).GetAsVector4()); debugDisplay.SetColor(ViewColor(manipulatorState.m_mouseOver, m_axis2Color, m_mouseOverColor).GetAsVector4());
debugDisplay.DrawLine(quadBound.m_corner2, quadBound.m_corner3); debugDisplay.DrawLine(quadBoundVisual.m_corner2, quadBoundVisual.m_corner3);
debugDisplay.DrawLine(quadBoundVisual.m_corner1, quadBoundVisual.m_corner4);
if (manipulatorState.m_mouseOver) if (manipulatorState.m_mouseOver)
{ {
debugDisplay.SetColor(Vector3ToVector4(m_mouseOverColor.GetAsVector3(), 0.5f)); debugDisplay.SetColor(Vector3ToVector4(m_mouseOverColor.GetAsVector3(), 0.5f));
debugDisplay.CullOff(); debugDisplay.CullOff();
debugDisplay.DrawQuad(quadBound.m_corner1, quadBound.m_corner2, quadBound.m_corner3, quadBound.m_corner4); debugDisplay.DrawQuad(
quadBoundVisual.m_corner1, quadBoundVisual.m_corner2, quadBoundVisual.m_corner3, quadBoundVisual.m_corner4);
debugDisplay.CullOn(); debugDisplay.CullOn();
} }
RefreshBoundInternal(managerId, manipulatorId, quadBound); // total size of bounds to use for mouse intersection
const float hitSize = m_size * ed_planarManipulatorBoundScaleFactor;
// size of edge bounds (the 'margin/border' outside the visual representation)
const float edgeSize = (hitSize - m_size) * 0.5f;
const AZ::Vector3 edgeOffset =
((m_cameraCorrectedAxis1 * edgeSize + m_cameraCorrectedAxis2 * edgeSize) * totalScale.GetReciprocal());
const auto cameraCorrectedHitOffset = cameraCorrectedVisualOffset - edgeOffset;
const Picking::BoundShapeQuad quadBoundHit = CalculateQuadBound(
manipulatorState.m_localPosition + (cameraCorrectedHitOffset * viewScale), manipulatorState, m_cameraCorrectedAxis1,
m_cameraCorrectedAxis2, hitSize * viewScale);
if (ed_manipulatorDisplayBoundDebug)
{
debugDisplay.DrawQuad(quadBoundHit.m_corner1, quadBoundHit.m_corner2, quadBoundHit.m_corner3, quadBoundHit.m_corner4);
}
RefreshBoundInternal(managerId, manipulatorId, quadBoundHit);
} }
void ManipulatorViewQuadBillboard::Draw( void ManipulatorViewQuadBillboard::Draw(
const ManipulatorManagerId managerId, const ManipulatorManagerId managerId,
const ManipulatorManagerState& /*managerState*/, [[maybe_unused]] const ManipulatorManagerState& managerState,
const ManipulatorId manipulatorId, const ManipulatorId manipulatorId,
const ManipulatorState& manipulatorState, const ManipulatorState& manipulatorState,
AzFramework::DebugDisplayRequests& debugDisplay, AzFramework::DebugDisplayRequests& debugDisplay,
const AzFramework::CameraState& cameraState, const AzFramework::CameraState& cameraState,
const ViewportInteraction::MouseInteraction& /*mouseInteraction*/) [[maybe_unused]] const ViewportInteraction::MouseInteraction& mouseInteraction)
{ {
const Picking::BoundShapeQuad quadBound = CalculateQuadBoundBillboard( const Picking::BoundShapeQuad quadBound = CalculateQuadBoundBillboard(
manipulatorState.m_localPosition, manipulatorState.m_worldFromLocal, manipulatorState.m_localPosition, manipulatorState.m_worldFromLocal,
@ -442,7 +482,7 @@ namespace AzToolsFramework
void ManipulatorViewLineSelect::Draw( void ManipulatorViewLineSelect::Draw(
const ManipulatorManagerId managerId, const ManipulatorManagerId managerId,
const ManipulatorManagerState& /*managerState*/, [[maybe_unused]] const ManipulatorManagerState& managerState,
const ManipulatorId manipulatorId, const ManipulatorId manipulatorId,
const ManipulatorState& manipulatorState, const ManipulatorState& manipulatorState,
AzFramework::DebugDisplayRequests& debugDisplay, AzFramework::DebugDisplayRequests& debugDisplay,
@ -570,7 +610,7 @@ namespace AzToolsFramework
void ManipulatorViewSphere::Draw( void ManipulatorViewSphere::Draw(
const ManipulatorManagerId managerId, const ManipulatorManagerId managerId,
const ManipulatorManagerState& /*managerState*/, [[maybe_unused]] const ManipulatorManagerState& managerState,
const ManipulatorId manipulatorId, const ManipulatorId manipulatorId,
const ManipulatorState& manipulatorState, const ManipulatorState& manipulatorState,
AzFramework::DebugDisplayRequests& debugDisplay, AzFramework::DebugDisplayRequests& debugDisplay,
@ -599,12 +639,12 @@ namespace AzToolsFramework
void ManipulatorViewCircle::Draw( void ManipulatorViewCircle::Draw(
const ManipulatorManagerId managerId, const ManipulatorManagerId managerId,
const ManipulatorManagerState& /*managerState*/, [[maybe_unused]] const ManipulatorManagerState& managerState,
const ManipulatorId manipulatorId, const ManipulatorId manipulatorId,
const ManipulatorState& manipulatorState, const ManipulatorState& manipulatorState,
AzFramework::DebugDisplayRequests& debugDisplay, AzFramework::DebugDisplayRequests& debugDisplay,
const AzFramework::CameraState& cameraState, const AzFramework::CameraState& cameraState,
const ViewportInteraction::MouseInteraction& /*mouseInteraction*/) [[maybe_unused]] const ViewportInteraction::MouseInteraction& mouseInteraction)
{ {
const float viewScale = const float viewScale =
ManipulatorViewScaleMultiplier(manipulatorState.m_worldFromLocal.TransformPoint(manipulatorState.m_localPosition), cameraState); ManipulatorViewScaleMultiplier(manipulatorState.m_worldFromLocal.TransformPoint(manipulatorState.m_localPosition), cameraState);
@ -665,7 +705,7 @@ namespace AzToolsFramework
void ManipulatorViewSplineSelect::Draw( void ManipulatorViewSplineSelect::Draw(
const ManipulatorManagerId managerId, const ManipulatorManagerId managerId,
const ManipulatorManagerState& /*managerState*/, [[maybe_unused]] const ManipulatorManagerState& managerState,
const ManipulatorId manipulatorId, const ManipulatorId manipulatorId,
const ManipulatorState& manipulatorState, const ManipulatorState& manipulatorState,
AzFramework::DebugDisplayRequests& debugDisplay, AzFramework::DebugDisplayRequests& debugDisplay,
@ -698,12 +738,17 @@ namespace AzToolsFramework
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
AZStd::unique_ptr<ManipulatorViewQuad> CreateManipulatorViewQuad( AZStd::unique_ptr<ManipulatorViewQuad> CreateManipulatorViewQuad(
const PlanarManipulator& planarManipulator, const AZ::Color& axis1Color, const AZ::Color& axis2Color, const float size) const PlanarManipulator& planarManipulator,
const AZ::Color& axis1Color,
const AZ::Color& axis2Color,
const AZ::Vector3& offset,
const float size)
{ {
AZStd::unique_ptr<ManipulatorViewQuad> viewQuad = AZStd::make_unique<ManipulatorViewQuad>(); AZStd::unique_ptr<ManipulatorViewQuad> viewQuad = AZStd::make_unique<ManipulatorViewQuad>();
viewQuad->m_axis1 = planarManipulator.GetAxis1(); viewQuad->m_axis1 = planarManipulator.GetAxis1();
viewQuad->m_axis2 = planarManipulator.GetAxis2(); viewQuad->m_axis2 = planarManipulator.GetAxis2();
viewQuad->m_size = size; viewQuad->m_size = size;
viewQuad->m_offset = offset;
viewQuad->m_axis1Color = axis1Color; viewQuad->m_axis1Color = axis1Color;
viewQuad->m_axis2Color = axis2Color; viewQuad->m_axis2Color = axis2Color;
return viewQuad; return viewQuad;

@ -54,7 +54,7 @@ namespace AzToolsFramework
AZ_RTTI(ManipulatorView, "{7529E3E9-39B3-4D15-899A-FA13770113B2}") AZ_RTTI(ManipulatorView, "{7529E3E9-39B3-4D15-899A-FA13770113B2}")
ManipulatorView(); ManipulatorView();
ManipulatorView(bool screenSizeFixed); explicit ManipulatorView(bool screenSizeFixed);
virtual ~ManipulatorView(); virtual ~ManipulatorView();
ManipulatorView(ManipulatorView&&) = default; ManipulatorView(ManipulatorView&&) = default;
ManipulatorView& operator=(ManipulatorView&&) = default; ManipulatorView& operator=(ManipulatorView&&) = default;
@ -117,13 +117,16 @@ namespace AzToolsFramework
AZ::Vector3 m_axis1 = AZ::Vector3(1.0f, 0.0f, 0.0f); AZ::Vector3 m_axis1 = AZ::Vector3(1.0f, 0.0f, 0.0f);
AZ::Vector3 m_axis2 = AZ::Vector3(0.0f, 1.0f, 0.0f); AZ::Vector3 m_axis2 = AZ::Vector3(0.0f, 1.0f, 0.0f);
AZ::Vector3 m_offset = AZ::Vector3::CreateZero();
AZ::Color m_axis1Color = AZ::Color(1.0f, 0.0f, 0.0f, 1.0f); AZ::Color m_axis1Color = AZ::Color(1.0f, 0.0f, 0.0f, 1.0f);
AZ::Color m_axis2Color = AZ::Color(1.0f, 0.0f, 0.0f, 1.0f); AZ::Color m_axis2Color = AZ::Color(1.0f, 0.0f, 0.0f, 1.0f);
float m_size = 0.06f; //!< size to render and do mouse ray intersection tests against. float m_size = 0.06f; //!< size to render and do mouse ray intersection tests against.
private: private:
AZ::Vector3 m_cameraCorrectedAxis1; AZ::Vector3 m_cameraCorrectedAxis1; //!< First axis of quad (should be orthogonal to second axis).
AZ::Vector3 m_cameraCorrectedAxis2; AZ::Vector3 m_cameraCorrectedAxis2; //!< Second axis of quad (should be orthogonal to first axis).
AZ::Vector3 m_cameraCorrectedOffsetAxis1; //!< Offset along first axis (parallel with first axis).
AZ::Vector3 m_cameraCorrectedOffsetAxis2; //!< Offset along second axis (parallel with second axis).
}; };
//! A screen aligned quad, centered at the position of the manipulator, display filled. //! A screen aligned quad, centered at the position of the manipulator, display filled.
@ -379,7 +382,11 @@ namespace AzToolsFramework
// Helpers to create various manipulator views. // Helpers to create various manipulator views.
AZStd::unique_ptr<ManipulatorViewQuad> CreateManipulatorViewQuad( AZStd::unique_ptr<ManipulatorViewQuad> CreateManipulatorViewQuad(
const PlanarManipulator& planarManipulator, const AZ::Color& axis1Color, const AZ::Color& axis2Color, float size); const PlanarManipulator& planarManipulator,
const AZ::Color& axis1Color,
const AZ::Color& axis2Color,
const AZ::Vector3& offset,
float size);
AZStd::unique_ptr<ManipulatorViewQuadBillboard> CreateManipulatorViewQuadBillboard(const AZ::Color& color, float size); AZStd::unique_ptr<ManipulatorViewQuadBillboard> CreateManipulatorViewQuadBillboard(const AZ::Color& color, float size);

@ -132,7 +132,7 @@ namespace AzToolsFramework
const AzFramework::CameraState& cameraState, const AzFramework::CameraState& cameraState,
const ViewportInteraction::MouseInteraction& mouseInteraction) const ViewportInteraction::MouseInteraction& mouseInteraction)
{ {
if (cl_manipulatorDrawDebug) if (ed_manipulatorDrawDebug)
{ {
const AZ::Transform combined = TransformUniformScale(GetSpace()) * GetLocalTransform(); const AZ::Transform combined = TransformUniformScale(GetSpace()) * GetLocalTransform();
for (const auto& fixed : m_fixedAxes) for (const auto& fixed : m_fixedAxes)

@ -171,7 +171,7 @@ namespace AzToolsFramework
const AzFramework::CameraState& cameraState, const AzFramework::CameraState& cameraState,
const ViewportInteraction::MouseInteraction& mouseInteraction) const ViewportInteraction::MouseInteraction& mouseInteraction)
{ {
if (cl_manipulatorDrawDebug) if (ed_manipulatorDrawDebug)
{ {
if (PerformingAction()) if (PerformingAction())
{ {

@ -9,6 +9,7 @@
#include "ScaleManipulators.h" #include "ScaleManipulators.h"
#include <AzToolsFramework/Maths/TransformUtils.h> #include <AzToolsFramework/Maths/TransformUtils.h>
#include <AzToolsFramework/Viewport/ViewportSettings.h>
namespace AzToolsFramework namespace AzToolsFramework
{ {
@ -120,25 +121,25 @@ namespace AzToolsFramework
void ScaleManipulators::ConfigureView( void ScaleManipulators::ConfigureView(
const float axisLength, const AZ::Color& axis1Color, const AZ::Color& axis2Color, const AZ::Color& axis3Color) const float axisLength, const AZ::Color& axis1Color, const AZ::Color& axis2Color, const AZ::Color& axis3Color)
{ {
const float boxSize = 0.1f; const float boxHalfExtent = ScaleManipulatorBoxHalfExtent();
const AZ::Color colors[] = { axis1Color, axis2Color, axis3Color }; const AZ::Color colors[] = { axis1Color, axis2Color, axis3Color };
for (size_t manipulatorIndex = 0; manipulatorIndex < m_axisScaleManipulators.size(); ++manipulatorIndex) for (size_t manipulatorIndex = 0; manipulatorIndex < m_axisScaleManipulators.size(); ++manipulatorIndex)
{ {
const auto lineLength = axisLength - boxSize; const auto lineLength = axisLength - (2.0f * boxHalfExtent);
ManipulatorViews views; ManipulatorViews views;
views.emplace_back( views.emplace_back(CreateManipulatorViewLine(
CreateManipulatorViewLine(*m_axisScaleManipulators[manipulatorIndex], colors[manipulatorIndex], axisLength, m_lineBoundWidth)); *m_axisScaleManipulators[manipulatorIndex], colors[manipulatorIndex], axisLength, m_lineBoundWidth));
views.emplace_back(CreateManipulatorViewBox( views.emplace_back(CreateManipulatorViewBox(
AZ::Transform::CreateIdentity(), colors[manipulatorIndex], AZ::Transform::CreateIdentity(), colors[manipulatorIndex],
m_axisScaleManipulators[manipulatorIndex]->GetAxis() * lineLength, AZ::Vector3(boxSize))); m_axisScaleManipulators[manipulatorIndex]->GetAxis() * (lineLength + boxHalfExtent), AZ::Vector3(boxHalfExtent)));
m_axisScaleManipulators[manipulatorIndex]->SetViews(AZStd::move(views)); m_axisScaleManipulators[manipulatorIndex]->SetViews(AZStd::move(views));
} }
ManipulatorViews views; ManipulatorViews views;
views.emplace_back(CreateManipulatorViewBox( views.emplace_back(CreateManipulatorViewBox(
AZ::Transform::CreateIdentity(), AZ::Color::CreateOne(), AZ::Vector3::CreateZero(), AZ::Vector3(boxSize))); AZ::Transform::CreateIdentity(), AZ::Color::CreateOne(), AZ::Vector3::CreateZero(), AZ::Vector3(boxHalfExtent)));
m_uniformScaleManipulator->SetViews(AZStd::move(views)); m_uniformScaleManipulator->SetViews(AZStd::move(views));
} }

@ -10,13 +10,10 @@
#include <AzCore/Math/VectorConversions.h> #include <AzCore/Math/VectorConversions.h>
#include <AzToolsFramework/Manipulators/ManipulatorView.h> #include <AzToolsFramework/Manipulators/ManipulatorView.h>
#include <AzToolsFramework/Viewport/ViewportSettings.h>
namespace AzToolsFramework namespace AzToolsFramework
{ {
static const float SurfaceManipulatorTransparency = 0.75f;
static const float LinearManipulatorAxisLength = 2.0f;
static const float SurfaceManipulatorRadius = 0.1f;
static const AZ::Color LinearManipulatorXAxisColor = AZ::Color(1.0f, 0.0f, 0.0f, 1.0f); static const AZ::Color LinearManipulatorXAxisColor = AZ::Color(1.0f, 0.0f, 0.0f, 1.0f);
static const AZ::Color LinearManipulatorYAxisColor = AZ::Color(0.0f, 1.0f, 0.0f, 1.0f); static const AZ::Color LinearManipulatorYAxisColor = AZ::Color(0.0f, 1.0f, 0.0f, 1.0f);
static const AZ::Color LinearManipulatorZAxisColor = AZ::Color(0.0f, 0.0f, 1.0f, 1.0f); static const AZ::Color LinearManipulatorZAxisColor = AZ::Color(0.0f, 0.0f, 1.0f, 1.0f);
@ -240,18 +237,16 @@ namespace AzToolsFramework
const AZ::Color& axis2Color, const AZ::Color& axis2Color,
const AZ::Color& axis3Color /*= AZ::Color(0.0f, 0.0f, 1.0f, 0.5f)*/) const AZ::Color& axis3Color /*= AZ::Color(0.0f, 0.0f, 1.0f, 0.5f)*/)
{ {
const float coneLength = 0.28f;
const float coneRadius = 0.07f;
const AZ::Color axesColor[] = { axis1Color, axis2Color, axis3Color }; const AZ::Color axesColor[] = { axis1Color, axis2Color, axis3Color };
const auto configureLinearView = [lineBoundWidth = m_lineBoundWidth, coneLength, axisLength, const auto configureLinearView =
coneRadius](LinearManipulator* linearManipulator, const AZ::Color& color) [lineBoundWidth = m_lineBoundWidth, coneLength = LinearManipulatorConeLength(), axisLength,
coneRadius = LinearManipulatorConeRadius()](LinearManipulator* linearManipulator, const AZ::Color& color)
{ {
const auto lineLength = axisLength - coneLength; const auto lineLength = axisLength - coneLength;
ManipulatorViews views; ManipulatorViews views;
views.emplace_back(CreateManipulatorViewLine(*linearManipulator, color, lineLength, lineBoundWidth)); views.emplace_back(CreateManipulatorViewLine(*linearManipulator, color, axisLength, lineBoundWidth));
views.emplace_back( views.emplace_back(
CreateManipulatorViewCone(*linearManipulator, color, linearManipulator->GetAxis() * lineLength, coneLength, coneRadius)); CreateManipulatorViewCone(*linearManipulator, color, linearManipulator->GetAxis() * lineLength, coneLength, coneRadius));
linearManipulator->SetViews(AZStd::move(views)); linearManipulator->SetViews(AZStd::move(views));
@ -264,17 +259,23 @@ namespace AzToolsFramework
} }
void TranslationManipulators::ConfigurePlanarView( void TranslationManipulators::ConfigurePlanarView(
const float planeSize,
const AZ::Color& plane1Color, const AZ::Color& plane1Color,
const AZ::Color& plane2Color /*= AZ::Color(0.0f, 1.0f, 0.0f, 0.5f)*/, const AZ::Color& plane2Color /*= AZ::Color(0.0f, 1.0f, 0.0f, 0.5f)*/,
const AZ::Color& plane3Color /*= AZ::Color(0.0f, 0.0f, 1.0f, 0.5f)*/) const AZ::Color& plane3Color /*= AZ::Color(0.0f, 0.0f, 1.0f, 0.5f)*/)
{ {
const float planeSize = 0.6f;
const AZ::Color planesColor[] = { plane1Color, plane2Color, plane3Color }; const AZ::Color planesColor[] = { plane1Color, plane2Color, plane3Color };
const float linearAxisLength = LinearManipulatorAxisLength();
const float linearConeLength = LinearManipulatorConeLength();
for (size_t manipulatorIndex = 0; manipulatorIndex < m_planarManipulators.size(); ++manipulatorIndex) for (size_t manipulatorIndex = 0; manipulatorIndex < m_planarManipulators.size(); ++manipulatorIndex)
{ {
const auto& planarManipulator = *m_planarManipulators[manipulatorIndex];
const AZStd::shared_ptr<ManipulatorViewQuad> manipulatorView = CreateManipulatorViewQuad( const AZStd::shared_ptr<ManipulatorViewQuad> manipulatorView = CreateManipulatorViewQuad(
*m_planarManipulators[manipulatorIndex], planesColor[manipulatorIndex], planesColor[(manipulatorIndex + 1) % 3], planeSize); *m_planarManipulators[manipulatorIndex], planesColor[manipulatorIndex], planesColor[(manipulatorIndex + 1) % 3],
(planarManipulator.GetAxis1() + planarManipulator.GetAxis2()) *
(((linearAxisLength - linearConeLength) * 0.5f) - (planeSize * 0.5f)),
planeSize);
m_planarManipulators[manipulatorIndex]->SetViews(ManipulatorViews{ manipulatorView }); m_planarManipulators[manipulatorIndex]->SetViews(ManipulatorViews{ manipulatorView });
} }
@ -286,12 +287,11 @@ namespace AzToolsFramework
{ {
m_surfaceManipulator->SetView(CreateManipulatorViewSphere( m_surfaceManipulator->SetView(CreateManipulatorViewSphere(
color, radius, color, radius,
[](const ViewportInteraction::MouseInteraction& /*mouseInteraction*/, bool mouseOver, []([[maybe_unused]] const ViewportInteraction::MouseInteraction& mouseInteraction, bool mouseOver,
const AZ::Color& defaultColor) -> AZ::Color const AZ::Color& defaultColor) -> AZ::Color
{ {
const AZ::Color color[2] = { const AZ::Color color[2] = {
defaultColor, defaultColor, Vector3ToVector4(BaseManipulator::s_defaultMouseOverColor.GetAsVector3(), SurfaceManipulatorOpacity())
Vector3ToVector4(BaseManipulator::s_defaultMouseOverColor.GetAsVector3(), SurfaceManipulatorTransparency)
}; };
return color[mouseOver]; return color[mouseOver];
@ -325,16 +325,19 @@ namespace AzToolsFramework
void ConfigureTranslationManipulatorAppearance3d(TranslationManipulators* translationManipulators) void ConfigureTranslationManipulatorAppearance3d(TranslationManipulators* translationManipulators)
{ {
translationManipulators->SetAxes(AZ::Vector3::CreateAxisX(), AZ::Vector3::CreateAxisY(), AZ::Vector3::CreateAxisZ()); translationManipulators->SetAxes(AZ::Vector3::CreateAxisX(), AZ::Vector3::CreateAxisY(), AZ::Vector3::CreateAxisZ());
translationManipulators->ConfigurePlanarView(LinearManipulatorXAxisColor, LinearManipulatorYAxisColor, LinearManipulatorZAxisColor); translationManipulators->ConfigurePlanarView(
PlanarManipulatorAxisLength(), LinearManipulatorXAxisColor, LinearManipulatorYAxisColor, LinearManipulatorZAxisColor);
translationManipulators->ConfigureLinearView( translationManipulators->ConfigureLinearView(
LinearManipulatorAxisLength, LinearManipulatorXAxisColor, LinearManipulatorYAxisColor, LinearManipulatorZAxisColor); LinearManipulatorAxisLength(), LinearManipulatorXAxisColor, LinearManipulatorYAxisColor, LinearManipulatorZAxisColor);
translationManipulators->ConfigureSurfaceView(SurfaceManipulatorRadius, SurfaceManipulatorColor); translationManipulators->ConfigureSurfaceView(SurfaceManipulatorRadius(), SurfaceManipulatorColor);
} }
void ConfigureTranslationManipulatorAppearance2d(TranslationManipulators* translationManipulators) void ConfigureTranslationManipulatorAppearance2d(TranslationManipulators* translationManipulators)
{ {
translationManipulators->SetAxes(AZ::Vector3::CreateAxisX(), AZ::Vector3::CreateAxisY()); translationManipulators->SetAxes(AZ::Vector3::CreateAxisX(), AZ::Vector3::CreateAxisY());
translationManipulators->ConfigurePlanarView(LinearManipulatorXAxisColor); translationManipulators->ConfigurePlanarView(
translationManipulators->ConfigureLinearView(LinearManipulatorAxisLength, LinearManipulatorXAxisColor, LinearManipulatorYAxisColor); PlanarManipulatorAxisLength(), LinearManipulatorXAxisColor, LinearManipulatorYAxisColor);
translationManipulators->ConfigureLinearView(
LinearManipulatorAxisLength(), LinearManipulatorXAxisColor, LinearManipulatorYAxisColor);
} }
} // namespace AzToolsFramework } // namespace AzToolsFramework

@ -53,6 +53,7 @@ namespace AzToolsFramework
void SetAxes(const AZ::Vector3& axis1, const AZ::Vector3& axis2, const AZ::Vector3& axis3 = AZ::Vector3::CreateAxisZ()); void SetAxes(const AZ::Vector3& axis1, const AZ::Vector3& axis2, const AZ::Vector3& axis3 = AZ::Vector3::CreateAxisZ());
void ConfigurePlanarView( void ConfigurePlanarView(
float planeSize,
const AZ::Color& plane1Color, const AZ::Color& plane1Color,
const AZ::Color& plane2Color = AZ::Color(0.0f, 1.0f, 0.0f, 0.5f), const AZ::Color& plane2Color = AZ::Color(0.0f, 1.0f, 0.0f, 0.5f),
const AZ::Color& plane3Color = AZ::Color(0.0f, 0.0f, 1.0f, 0.5f)); const AZ::Color& plane3Color = AZ::Color(0.0f, 0.0f, 1.0f, 0.5f));

@ -0,0 +1,123 @@
/*
* Copyright (c) Contributors to the Open 3D Engine Project.
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
*
*/
#include <AzToolsFramework/Viewport/ViewportSettings.h>
namespace AzToolsFramework
{
constexpr AZStd::string_view FlipManipulatorAxesTowardsViewSetting = "/Amazon/Preferences/Editor/Manipulator/FlipManipulatorAxesTowardsView";
constexpr AZStd::string_view LinearManipulatorAxisLengthSetting = "/Amazon/Preferences/Editor/Manipulator/LinearManipulatorAxisLength";
constexpr AZStd::string_view PlanarManipulatorAxisLengthSetting = "/Amazon/Preferences/Editor/Manipulator/PlanarManipulatorAxisLength";
constexpr AZStd::string_view SurfaceManipulatorRadiusSetting = "/Amazon/Preferences/Editor/Manipulator/SurfaceManipulatorRadius";
constexpr AZStd::string_view SurfaceManipulatorOpacitySetting = "/Amazon/Preferences/Editor/Manipulator/SurfaceManipulatorOpacity";
constexpr AZStd::string_view LinearManipulatorConeLengthSetting = "/Amazon/Preferences/Editor/Manipulator/LinearManipulatorConeLength";
constexpr AZStd::string_view LinearManipulatorConeRadiusSetting = "/Amazon/Preferences/Editor/Manipulator/LinearManipulatorConeRadius";
constexpr AZStd::string_view ScaleManipulatorBoxHalfExtentSetting = "/Amazon/Preferences/Editor/Manipulator/ScaleManipulatorBoxHalfExtent";
constexpr AZStd::string_view RotationManipulatorRadiusSetting = "/Amazon/Preferences/Editor/Manipulator/RotationManipulatorRadius";
constexpr AZStd::string_view ManipulatorViewBaseScaleSetting = "/Amazon/Preferences/Editor/Manipulator/ViewBaseScale";
bool FlipManipulatorAxesTowardsView()
{
return GetRegistry(FlipManipulatorAxesTowardsViewSetting, true);
}
void SetFlipManipulatorAxesTowardsView(const bool enabled)
{
SetRegistry(FlipManipulatorAxesTowardsViewSetting, enabled);
}
float LinearManipulatorAxisLength()
{
return aznumeric_cast<float>(GetRegistry(LinearManipulatorAxisLengthSetting, 2.0));
}
void SetLinearManipulatorAxisLength(const float length)
{
SetRegistry(LinearManipulatorAxisLengthSetting, length);
}
float PlanarManipulatorAxisLength()
{
return aznumeric_cast<float>(GetRegistry(PlanarManipulatorAxisLengthSetting, 0.6));
}
void SetPlanarManipulatorAxisLength(const float length)
{
SetRegistry(PlanarManipulatorAxisLengthSetting, length);
}
float SurfaceManipulatorRadius()
{
return aznumeric_cast<float>(GetRegistry(SurfaceManipulatorRadiusSetting, 0.1));
}
void SetSurfaceManipulatorRadius(const float radius)
{
SetRegistry(SurfaceManipulatorRadiusSetting, radius);
}
float SurfaceManipulatorOpacity()
{
return aznumeric_cast<float>(GetRegistry(SurfaceManipulatorOpacitySetting, 0.75));
}
void SetSurfaceManipulatorOpacity(const float opacity)
{
SetRegistry(SurfaceManipulatorOpacitySetting, opacity);
}
float LinearManipulatorConeLength()
{
return aznumeric_cast<float>(GetRegistry(LinearManipulatorConeLengthSetting, 0.28));
}
void SetLinearManipulatorConeLength(const float length)
{
SetRegistry(LinearManipulatorConeLengthSetting, length);
}
float LinearManipulatorConeRadius()
{
return aznumeric_cast<float>(GetRegistry(LinearManipulatorConeRadiusSetting, 0.1));
}
void SetLinearManipulatorConeRadius(const float radius)
{
SetRegistry(LinearManipulatorConeRadiusSetting, radius);
}
float ScaleManipulatorBoxHalfExtent()
{
return aznumeric_cast<float>(GetRegistry(ScaleManipulatorBoxHalfExtentSetting, 0.1));
}
void SetScaleManipulatorBoxHalfExtent(const float size)
{
SetRegistry(ScaleManipulatorBoxHalfExtentSetting, size);
}
float RotationManipulatorRadius()
{
return aznumeric_cast<float>(GetRegistry(RotationManipulatorRadiusSetting, 2.0));
}
void SetRotationManipulatorRadius(const float radius)
{
SetRegistry(RotationManipulatorRadiusSetting, radius);
}
float ManipulatorViewBaseScale()
{
return aznumeric_cast<float>(GetRegistry(ManipulatorViewBaseScaleSetting, 1.0));
}
void SetManipulatorViewBaseScale(const float scale)
{
SetRegistry(ManipulatorViewBaseScaleSetting, scale);
}
} // namespace AzToolsFramework

@ -0,0 +1,69 @@
/*
* Copyright (c) Contributors to the Open 3D Engine Project.
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
*
*/
#pragma once
#include <AzCore/Settings/SettingsRegistry.h>
namespace AzToolsFramework
{
template<typename T>
void SetRegistry(const AZStd::string_view setting, T&& value)
{
if (auto* registry = AZ::SettingsRegistry::Get())
{
registry->Set(setting, AZStd::forward<T>(value));
}
}
template<typename T>
AZStd::remove_cvref_t<T> GetRegistry(const AZStd::string_view setting, T&& defaultValue)
{
AZStd::remove_cvref_t<T> value = AZStd::forward<T>(defaultValue);
if (const auto* registry = AZ::SettingsRegistry::Get())
{
T potentialValue;
if (registry->Get(potentialValue, setting))
{
value = AZStd::move(potentialValue);
}
}
return value;
}
bool FlipManipulatorAxesTowardsView();
void SetFlipManipulatorAxesTowardsView(bool enabled);
float LinearManipulatorAxisLength();
void SetLinearManipulatorAxisLength(float length);
float PlanarManipulatorAxisLength();
void SetPlanarManipulatorAxisLength(float length);
float SurfaceManipulatorRadius();
void SetSurfaceManipulatorRadius(float radius);
float SurfaceManipulatorOpacity();
void SetSurfaceManipulatorOpacity(float opacity);
float LinearManipulatorConeLength();
void SetLinearManipulatorConeLength(float length);
float LinearManipulatorConeRadius();
void SetLinearManipulatorConeRadius(float radius);
float ScaleManipulatorBoxHalfExtent();
void SetScaleManipulatorBoxHalfExtent(float halfExtent);
float RotationManipulatorRadius();
void SetRotationManipulatorRadius(float radius);
float ManipulatorViewBaseScale();
void SetManipulatorViewBaseScale(float scale);
} // namespace AzToolsFramework

@ -33,6 +33,7 @@
#include <AzToolsFramework/ToolsComponents/EditorVisibilityBus.h> #include <AzToolsFramework/ToolsComponents/EditorVisibilityBus.h>
#include <AzToolsFramework/ToolsComponents/TransformComponent.h> #include <AzToolsFramework/ToolsComponents/TransformComponent.h>
#include <AzToolsFramework/Viewport/ActionBus.h> #include <AzToolsFramework/Viewport/ActionBus.h>
#include <AzToolsFramework/Viewport/ViewportSettings.h>
#include <AzToolsFramework/ViewportSelection/EditorSelectionUtil.h> #include <AzToolsFramework/ViewportSelection/EditorSelectionUtil.h>
#include <AzToolsFramework/ViewportSelection/EditorVisibleEntityDataCache.h> #include <AzToolsFramework/ViewportSelection/EditorVisibleEntityDataCache.h>
#include <Entity/EditorEntityContextBus.h> #include <Entity/EditorEntityContextBus.h>
@ -1376,7 +1377,7 @@ namespace AzToolsFramework
// view // view
rotationManipulators->SetLocalAxes(AZ::Vector3::CreateAxisX(), AZ::Vector3::CreateAxisY(), AZ::Vector3::CreateAxisZ()); rotationManipulators->SetLocalAxes(AZ::Vector3::CreateAxisX(), AZ::Vector3::CreateAxisY(), AZ::Vector3::CreateAxisZ());
rotationManipulators->ConfigureView( rotationManipulators->ConfigureView(
2.0f, AzFramework::ViewportColors::XAxisColor, AzFramework::ViewportColors::YAxisColor, RotationManipulatorRadius(), AzFramework::ViewportColors::XAxisColor, AzFramework::ViewportColors::YAxisColor,
AzFramework::ViewportColors::ZAxisColor); AzFramework::ViewportColors::ZAxisColor);
struct SharedRotationState struct SharedRotationState
@ -1535,7 +1536,8 @@ namespace AzToolsFramework
RecalculateAverageManipulatorTransform(m_entityIdManipulators.m_lookups, m_pivotOverrideFrame, m_pivotMode, m_referenceFrame)); RecalculateAverageManipulatorTransform(m_entityIdManipulators.m_lookups, m_pivotOverrideFrame, m_pivotMode, m_referenceFrame));
scaleManipulators->SetAxes(AZ::Vector3::CreateAxisX(), AZ::Vector3::CreateAxisY(), AZ::Vector3::CreateAxisZ()); scaleManipulators->SetAxes(AZ::Vector3::CreateAxisX(), AZ::Vector3::CreateAxisY(), AZ::Vector3::CreateAxisZ());
scaleManipulators->ConfigureView(2.0f, AZ::Color::CreateOne(), AZ::Color::CreateOne(), AZ::Color::CreateOne()); scaleManipulators->ConfigureView(
LinearManipulatorAxisLength(), AZ::Color::CreateOne(), AZ::Color::CreateOne(), AZ::Color::CreateOne());
struct SharedScaleState struct SharedScaleState
{ {

@ -506,6 +506,8 @@ set(FILES
Viewport/ViewportMessages.cpp Viewport/ViewportMessages.cpp
Viewport/ViewportTypes.h Viewport/ViewportTypes.h
Viewport/ViewportTypes.cpp Viewport/ViewportTypes.cpp
Viewport/ViewportSettings.h
Viewport/ViewportSettings.cpp
ViewportUi/Button.h ViewportUi/Button.h
ViewportUi/Button.cpp ViewportUi/Button.cpp
ViewportUi/ButtonGroup.h ViewportUi/ButtonGroup.h

@ -143,7 +143,7 @@ namespace LmbrCentral
using EditorPolygonPrismShapeComponentManipulatorFixture = using EditorPolygonPrismShapeComponentManipulatorFixture =
UnitTest::IndirectCallManipulatorViewportInteractionFixtureMixin<EditorPolygonPrismShapeComponentFixture>; UnitTest::IndirectCallManipulatorViewportInteractionFixtureMixin<EditorPolygonPrismShapeComponentFixture>;
TEST_F(EditorPolygonPrismShapeComponentManipulatorFixture, PolygonPrismNonUniformScale_ManipulatorsScaleCorrectly) TEST_F(EditorPolygonPrismShapeComponentManipulatorFixture, PolygonPrismNonUniformScaleManipulatorsScaleCorrectly)
{ {
// set the non-uniform scale and enter the polygon prism shape component's component mode // set the non-uniform scale and enter the polygon prism shape component's component mode
const AZ::Vector3 nonUniformScale(2.0f, 3.0f, 4.0f); const AZ::Vector3 nonUniformScale(2.0f, 3.0f, 4.0f);
@ -171,8 +171,8 @@ namespace LmbrCentral
const auto screenStart = AzFramework::WorldToScreen(worldStart, m_cameraState); const auto screenStart = AzFramework::WorldToScreen(worldStart, m_cameraState);
const auto screenEnd = AzFramework::WorldToScreen(worldEnd, m_cameraState); const auto screenEnd = AzFramework::WorldToScreen(worldEnd, m_cameraState);
// small diagonal offset to ensure we interact with the planar manipulator and not one of the linear manipulators // diagonal offset to ensure we interact with the planar manipulator and not one of the linear manipulators
const AzFramework::ScreenVector offset(5, -5); const AzFramework::ScreenVector offset(50, -50);
m_actionDispatcher m_actionDispatcher
->CameraState(m_cameraState) ->CameraState(m_cameraState)

@ -17,6 +17,7 @@
#include <AzToolsFramework/Manipulators/ManipulatorManager.h> #include <AzToolsFramework/Manipulators/ManipulatorManager.h>
#include <AzToolsFramework/Manipulators/ManipulatorView.h> #include <AzToolsFramework/Manipulators/ManipulatorView.h>
#include <AzToolsFramework/Manipulators/PlanarManipulator.h> #include <AzToolsFramework/Manipulators/PlanarManipulator.h>
#include <AzToolsFramework/Viewport/ViewportSettings.h>
#include <Editor/Source/ComponentModes/Joints/JointsComponentModeCommon.h> #include <Editor/Source/ComponentModes/Joints/JointsComponentModeCommon.h>
#include <PhysX/EditorJointBus.h> #include <PhysX/EditorJointBus.h>
@ -34,22 +35,22 @@ namespace PhysX
const float XRotationManipulatorWidth = 0.05f; const float XRotationManipulatorWidth = 0.05f;
} // namespace Internal } // namespace Internal
JointsSubComponentModeAngleCone::JointsSubComponentModeAngleCone( JointsSubComponentModeAngleCone::JointsSubComponentModeAngleCone(const AZStd::string& propertyName, float max, float min)
const AZStd::string& propertyName, float max, float min)
: m_propertyName(propertyName) : m_propertyName(propertyName)
, m_max(max) , m_max(max)
, m_min(min) , m_min(min)
{ {
} }
void JointsSubComponentModeAngleCone::Setup(const AZ::EntityComponentIdPair& idPair) void JointsSubComponentModeAngleCone::Setup(const AZ::EntityComponentIdPair& idPair)
{ {
m_entityComponentIdPair = idPair; m_entityComponentIdPair = idPair;
EditorJointRequestBus::EventResult( EditorJointRequestBus::EventResult(
m_resetPostion, m_entityComponentIdPair, &PhysX::EditorJointRequests::GetVector3Value, JointsComponentModeCommon::ParamaterNames::Position); m_resetPostion, m_entityComponentIdPair, &PhysX::EditorJointRequests::GetVector3Value,
JointsComponentModeCommon::ParamaterNames::Position);
EditorJointRequestBus::EventResult( EditorJointRequestBus::EventResult(
m_resetRotation, m_entityComponentIdPair, &PhysX::EditorJointRequests::GetVector3Value, JointsComponentModeCommon::ParamaterNames::Rotation); m_resetRotation, m_entityComponentIdPair, &PhysX::EditorJointRequests::GetVector3Value,
JointsComponentModeCommon::ParamaterNames::Rotation);
EditorJointRequestBus::EventResult( EditorJointRequestBus::EventResult(
m_resetLimits, m_entityComponentIdPair, &EditorJointRequests::GetLinearValuePair, m_propertyName); m_resetLimits, m_entityComponentIdPair, &EditorJointRequests::GetLinearValuePair, m_propertyName);
@ -57,7 +58,8 @@ namespace PhysX
AZ::Transform localTransform = AZ::Transform::CreateIdentity(); AZ::Transform localTransform = AZ::Transform::CreateIdentity();
EditorJointRequestBus::EventResult( EditorJointRequestBus::EventResult(
localTransform, m_entityComponentIdPair, &EditorJointRequests::GetTransformValue, JointsComponentModeCommon::ParamaterNames::Transform); localTransform, m_entityComponentIdPair, &EditorJointRequests::GetTransformValue,
JointsComponentModeCommon::ParamaterNames::Transform);
const AZ::Quaternion localRotation = localTransform.GetRotation(); const AZ::Quaternion localRotation = localTransform.GetRotation();
// Initialize manipulators used to resize the base of the cone. // Initialize manipulators used to resize the base of the cone.
@ -105,10 +107,10 @@ namespace PhysX
{ {
AngleLimitsFloatPair m_startValues; AngleLimitsFloatPair m_startValues;
}; };
auto sharedState = AZStd::make_shared<SharedState>();
auto sharedState = AZStd::make_shared<SharedState>();
m_yLinearManipulator->InstallLeftMouseDownCallback( m_yLinearManipulator->InstallLeftMouseDownCallback(
[this, sharedState](const AzToolsFramework::LinearManipulator::Action& /*action*/) mutable [this, sharedState](const AzToolsFramework::LinearManipulator::Action& /*action*/)
{ {
AngleLimitsFloatPair currentValue; AngleLimitsFloatPair currentValue;
EditorJointRequestBus::EventResult( EditorJointRequestBus::EventResult(
@ -137,7 +139,7 @@ namespace PhysX
}); });
m_zLinearManipulator->InstallLeftMouseDownCallback( m_zLinearManipulator->InstallLeftMouseDownCallback(
[this, sharedState](const AzToolsFramework::LinearManipulator::Action& /*action*/) mutable [this, sharedState](const AzToolsFramework::LinearManipulator::Action& /*action*/)
{ {
AngleLimitsFloatPair currentValue; AngleLimitsFloatPair currentValue;
EditorJointRequestBus::EventResult( EditorJointRequestBus::EventResult(
@ -166,7 +168,7 @@ namespace PhysX
}); });
m_yzPlanarManipulator->InstallLeftMouseDownCallback( m_yzPlanarManipulator->InstallLeftMouseDownCallback(
[this, sharedState]([[maybe_unused]]const AzToolsFramework::PlanarManipulator::Action& action) mutable [this, sharedState]([[maybe_unused]] const AzToolsFramework::PlanarManipulator::Action& action)
{ {
AngleLimitsFloatPair currentValue; AngleLimitsFloatPair currentValue;
EditorJointRequestBus::EventResult( EditorJointRequestBus::EventResult(
@ -207,9 +209,8 @@ namespace PhysX
{ {
AZ::Transform m_startTM; AZ::Transform m_startTM;
}; };
auto sharedStateXRotate = AZStd::make_shared<SharedStateXRotate>();
auto mouseDownCallback = [this, sharedRotationState](const AzToolsFramework::AngularManipulator::Action& action) mutable -> void auto mouseDownCallback = [this, sharedRotationState](const AzToolsFramework::AngularManipulator::Action& action)
{ {
AZ::Quaternion normalizedStart = action.m_start.m_rotation.GetNormalized(); AZ::Quaternion normalizedStart = action.m_start.m_rotation.GetNormalized();
sharedRotationState->m_axis = AZ::Vector3(normalizedStart.GetX(), normalizedStart.GetY(), normalizedStart.GetZ()); sharedRotationState->m_axis = AZ::Vector3(normalizedStart.GetX(), normalizedStart.GetY(), normalizedStart.GetZ());
@ -222,8 +223,9 @@ namespace PhysX
sharedRotationState->m_valuePair = currentValue; sharedRotationState->m_valuePair = currentValue;
}; };
auto sharedStateXRotate = AZStd::make_shared<SharedStateXRotate>();
auto mouseDownRotateXCallback = auto mouseDownRotateXCallback =
[this, sharedStateXRotate]([[maybe_unused]] const AzToolsFramework::AngularManipulator::Action& action) mutable -> void [this, sharedStateXRotate]([[maybe_unused]] const AzToolsFramework::AngularManipulator::Action& action)
{ {
PhysX::EditorJointRequestBus::EventResult( PhysX::EditorJointRequestBus::EventResult(
sharedStateXRotate->m_startTM, m_entityComponentIdPair, &PhysX::EditorJointRequests::GetTransformValue, sharedStateXRotate->m_startTM, m_entityComponentIdPair, &PhysX::EditorJointRequests::GetTransformValue,
@ -233,7 +235,7 @@ namespace PhysX
m_xRotationManipulator->InstallLeftMouseDownCallback(mouseDownRotateXCallback); m_xRotationManipulator->InstallLeftMouseDownCallback(mouseDownRotateXCallback);
m_xRotationManipulator->InstallMouseMoveCallback( m_xRotationManipulator->InstallMouseMoveCallback(
[this, sharedStateXRotate](const AzToolsFramework::AngularManipulator::Action& action) mutable -> void [this, sharedStateXRotate](const AzToolsFramework::AngularManipulator::Action& action)
{ {
const AZ::Quaternion manipulatorOrientation = action.m_start.m_rotation * action.m_current.m_delta; const AZ::Quaternion manipulatorOrientation = action.m_start.m_rotation * action.m_current.m_delta;
@ -241,11 +243,11 @@ namespace PhysX
newTransform = sharedStateXRotate->m_startTM * AZ::Transform::CreateFromQuaternion(action.m_current.m_delta); newTransform = sharedStateXRotate->m_startTM * AZ::Transform::CreateFromQuaternion(action.m_current.m_delta);
PhysX::EditorJointRequestBus::Event( PhysX::EditorJointRequestBus::Event(
m_entityComponentIdPair, &PhysX::EditorJointRequests::SetVector3Value, JointsComponentModeCommon::ParamaterNames::Position, m_entityComponentIdPair, &PhysX::EditorJointRequests::SetVector3Value,
newTransform.GetTranslation()); JointsComponentModeCommon::ParamaterNames::Position, newTransform.GetTranslation());
PhysX::EditorJointRequestBus::Event( PhysX::EditorJointRequestBus::Event(
m_entityComponentIdPair, &PhysX::EditorJointRequests::SetVector3Value, JointsComponentModeCommon::ParamaterNames::Rotation, m_entityComponentIdPair, &PhysX::EditorJointRequests::SetVector3Value,
newTransform.GetRotation().GetEulerDegrees()); JointsComponentModeCommon::ParamaterNames::Rotation, newTransform.GetRotation().GetEulerDegrees());
m_yLinearManipulator->SetLocalOrientation(manipulatorOrientation); m_yLinearManipulator->SetLocalOrientation(manipulatorOrientation);
m_zLinearManipulator->SetLocalOrientation(manipulatorOrientation); m_zLinearManipulator->SetLocalOrientation(manipulatorOrientation);
@ -332,8 +334,7 @@ namespace PhysX
{ {
AzToolsFramework::ManipulatorViews views; AzToolsFramework::ManipulatorViews views;
views.emplace_back(CreateManipulatorViewLine( views.emplace_back(CreateManipulatorViewLine(
*linearManipulator, color, axisLength, *linearManipulator, color, axisLength, AzToolsFramework::ManipulatorLineBoundWidth(AzFramework::InvalidViewportId)));
AzToolsFramework::ManipulatorLineBoundWidth(AzFramework::InvalidViewportId)));
views.emplace_back(CreateManipulatorViewCone( views.emplace_back(CreateManipulatorViewCone(
*linearManipulator, color, linearManipulator->GetAxis() * (axisLength - coneLength), coneLength, coneRadius)); *linearManipulator, color, linearManipulator->GetAxis() * (axisLength - coneLength), coneLength, coneRadius));
linearManipulator->SetViews(AZStd::move(views)); linearManipulator->SetViews(AZStd::move(views));
@ -345,9 +346,9 @@ namespace PhysX
void JointsSubComponentModeAngleCone::ConfigurePlanarView(const AZ::Color& planeColor, const AZ::Color& plane2Color) void JointsSubComponentModeAngleCone::ConfigurePlanarView(const AZ::Color& planeColor, const AZ::Color& plane2Color)
{ {
const float planeSize = 0.6f;
AzToolsFramework::ManipulatorViews views; AzToolsFramework::ManipulatorViews views;
views.emplace_back(CreateManipulatorViewQuad(*m_yzPlanarManipulator, planeColor, plane2Color, planeSize)); views.emplace_back(CreateManipulatorViewQuad(
*m_yzPlanarManipulator, planeColor, plane2Color, AZ::Vector3::CreateZero(), AzToolsFramework::PlanarManipulatorAxisLength()));
m_yzPlanarManipulator->SetViews(AZStd::move(views)); m_yzPlanarManipulator->SetViews(AZStd::move(views));
} }

Loading…
Cancel
Save