Manipulator for params (#7231)

Signed-off-by: rhhong <rhhong@amazon.com>
monroegm-disable-blank-issue-2
Roman 4 years ago committed by GitHub
parent 117cb11505
commit 79f4fee960
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -28,8 +28,6 @@
namespace EMStudio namespace EMStudio
{ {
AZ_CLASS_ALLOCATOR_IMPL(AtomRenderPlugin, EMotionFX::EditorAllocator, 0); AZ_CLASS_ALLOCATOR_IMPL(AtomRenderPlugin, EMotionFX::EditorAllocator, 0);
const AzToolsFramework::ManipulatorManagerId g_animManipulatorManagerId =
AzToolsFramework::ManipulatorManagerId(AZ::Crc32("AnimManipulatorManagerId"));
AtomRenderPlugin::AtomRenderPlugin() AtomRenderPlugin::AtomRenderPlugin()
: DockWidgetPlugin() : DockWidgetPlugin()

@ -500,6 +500,9 @@ namespace EMStudio
painter.drawPath(path); painter.drawPath(path);
} }
const AzToolsFramework::ManipulatorManagerId g_animManipulatorManagerId =
AzToolsFramework::ManipulatorManagerId(AZ::Crc32("AnimManipulatorManagerId"));
// shortcuts // shortcuts
QApplication* GetApp() QApplication* GetApp()
{ {

@ -31,6 +31,8 @@
#include "MainWindow.h" #include "MainWindow.h"
#include <Source/Editor/Plugins/SkeletonOutliner/SkeletonOutlinerBus.h> #include <Source/Editor/Plugins/SkeletonOutliner/SkeletonOutlinerBus.h>
#include <AzToolsFramework/Manipulators/ManipulatorBus.h>
// include Qt // include Qt
#include <QString> #include <QString>
#include <QPainter> #include <QPainter>
@ -169,6 +171,9 @@ namespace EMStudio
EventProcessingCallback* m_eventProcessingCallback = nullptr; EventProcessingCallback* m_eventProcessingCallback = nullptr;
}; };
// Define the manipulator id for atom viewport in animation editor.
extern const AzToolsFramework::ManipulatorManagerId g_animManipulatorManagerId;
// Shortcuts // Shortcuts
QApplication* GetApp(); QApplication* GetApp();
EMStudioManager* GetManager(); EMStudioManager* GetManager();

@ -25,6 +25,8 @@ namespace EMStudio
, m_currentValue(0.0f, 0.0f, 0.0f) , m_currentValue(0.0f, 0.0f, 0.0f)
, m_gizmoButton(nullptr) , m_gizmoButton(nullptr)
, m_transformationGizmo(nullptr) , m_transformationGizmo(nullptr)
, m_translationManipulators(
AzToolsFramework::TranslationManipulators::Dimensions::Three, AZ::Transform::Identity(), AZ::Vector3::CreateOne())
{ {
UpdateValue(); UpdateValue();
} }
@ -102,6 +104,27 @@ namespace EMStudio
m_gizmoButton->setCheckable(true); m_gizmoButton->setCheckable(true);
m_gizmoButton->setEnabled(!IsReadOnly()); m_gizmoButton->setEnabled(!IsReadOnly());
m_manipulatorCallback = manipulatorCallback; m_manipulatorCallback = manipulatorCallback;
// Setup the translation manipulator
AzToolsFramework::ConfigureTranslationManipulatorAppearance3d(&m_translationManipulators);
m_translationManipulators.InstallLinearManipulatorMouseMoveCallback(
[this](const AzToolsFramework::LinearManipulator::Action& action)
{
OnManipulatorMoved(action.LocalPosition());
});
m_translationManipulators.InstallPlanarManipulatorMouseMoveCallback(
[this](const AzToolsFramework::PlanarManipulator::Action& action)
{
OnManipulatorMoved(action.LocalPosition());
});
m_translationManipulators.InstallSurfaceManipulatorMouseMoveCallback(
[this](const AzToolsFramework::SurfaceManipulator::Action& action)
{
OnManipulatorMoved(action.LocalPosition());
});
return m_gizmoButton; return m_gizmoButton;
} }
@ -183,6 +206,17 @@ namespace EMStudio
EMStudioManager::MakeTransparentButton(m_gizmoButton, "Images/Icons/Vector3GizmoDisabled.png", "Show/Hide translation gizmo for visual manipulation"); EMStudioManager::MakeTransparentButton(m_gizmoButton, "Images/Icons/Vector3GizmoDisabled.png", "Show/Hide translation gizmo for visual manipulation");
} }
// These will enable/disable the translation manipulator for atom render viewport.
if (m_translationManipulators.Registered())
{
m_translationManipulators.Unregister();
}
else
{
m_translationManipulators.Register(g_animManipulatorManagerId);
}
// These will enable/disable the translation manipulator for opengl render viewport.
if (!m_transformationGizmo) if (!m_transformationGizmo)
{ {
m_transformationGizmo = static_cast<MCommon::TranslateManipulator*>(GetManager()->AddTransformationManipulator(new MCommon::TranslateManipulator(70.0f, true))); m_transformationGizmo = static_cast<MCommon::TranslateManipulator*>(GetManager()->AddTransformationManipulator(new MCommon::TranslateManipulator(70.0f, true)));
@ -197,4 +231,14 @@ namespace EMStudio
m_transformationGizmo = nullptr; m_transformationGizmo = nullptr;
} }
} }
void Vector3GizmoParameterEditor::OnManipulatorMoved(const AZ::Vector3& position)
{
m_translationManipulators.SetLocalPosition(position);
SetValue(position);
if (m_manipulatorCallback)
{
m_manipulatorCallback();
}
}
} }

@ -8,7 +8,8 @@
#pragma once #pragma once
#include "ValueParameterEditor.h" #include <EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/ParameterEditor/ValueParameterEditor.h>
#include <AzToolsFramework/Manipulators/TranslationManipulators.h>
#include <QPushButton> #include <QPushButton>
@ -50,10 +51,16 @@ namespace EMStudio
AZ::Vector3 GetMinValue() const; AZ::Vector3 GetMinValue() const;
AZ::Vector3 GetMaxValue() const; AZ::Vector3 GetMaxValue() const;
void OnManipulatorMoved(const AZ::Vector3& position);
private: private:
AZ::Vector3 m_currentValue = AZ::Vector3::CreateZero(); AZ::Vector3 m_currentValue = AZ::Vector3::CreateZero();
QPushButton* m_gizmoButton = nullptr; QPushButton* m_gizmoButton = nullptr;
// TODO: Remove this when we remove the opengl widget
MCommon::TranslateManipulator* m_transformationGizmo = nullptr; MCommon::TranslateManipulator* m_transformationGizmo = nullptr;
AzToolsFramework::TranslationManipulators m_translationManipulators;
AZStd::function<void()> m_manipulatorCallback; AZStd::function<void()> m_manipulatorCallback;
}; };
} // namespace EMStudio } // namespace EMStudio

Loading…
Cancel
Save