70 lines
2.3 KiB
C#
70 lines
2.3 KiB
C#
// SPDX-License-Identifier: MIT
|
|
|
|
using GaussianSplatting.Runtime;
|
|
using UnityEditor;
|
|
using UnityEditor.EditorTools;
|
|
using UnityEngine;
|
|
|
|
namespace GaussianSplatting.Editor
|
|
{
|
|
/* not working correctly yet
|
|
[EditorTool("Gaussian Rotate Tool", typeof(GaussianSplatRenderer), typeof(GaussianToolContext))]
|
|
class GaussianRotateTool : GaussianTool
|
|
{
|
|
Quaternion m_CurrentRotation = Quaternion.identity;
|
|
Vector3 m_FrozenSelCenterLocal = Vector3.zero;
|
|
bool m_FreezePivot = false;
|
|
|
|
public override void OnActivated()
|
|
{
|
|
m_FreezePivot = false;
|
|
}
|
|
|
|
public override void OnToolGUI(EditorWindow window)
|
|
{
|
|
var gs = GetRenderer();
|
|
if (!gs || !CanBeEdited() || !HasSelection())
|
|
return;
|
|
var tr = gs.transform;
|
|
var evt = Event.current;
|
|
|
|
var selCenterLocal = GetSelectionCenterLocal();
|
|
if (evt.type == EventType.MouseDown)
|
|
{
|
|
gs.EditStorePosMouseDown();
|
|
gs.EditStoreOtherMouseDown();
|
|
m_FrozenSelCenterLocal = selCenterLocal;
|
|
m_FreezePivot = true;
|
|
}
|
|
if (evt.type == EventType.MouseUp)
|
|
{
|
|
m_CurrentRotation = Quaternion.identity;
|
|
m_FreezePivot = false;
|
|
}
|
|
|
|
if (m_FreezePivot)
|
|
selCenterLocal = m_FrozenSelCenterLocal;
|
|
|
|
EditorGUI.BeginChangeCheck();
|
|
var selCenterWorld = tr.TransformPoint(selCenterLocal);
|
|
var newRotation = Handles.DoRotationHandle(m_CurrentRotation, selCenterWorld);
|
|
if (EditorGUI.EndChangeCheck())
|
|
{
|
|
Matrix4x4 localToWorld = gs.transform.localToWorldMatrix;
|
|
Matrix4x4 worldToLocal = gs.transform.worldToLocalMatrix;
|
|
var wasModified = gs.editModified;
|
|
var rotToApply = newRotation;
|
|
gs.EditRotateSelection(selCenterLocal, localToWorld, worldToLocal, rotToApply);
|
|
m_CurrentRotation = newRotation;
|
|
if (!wasModified)
|
|
GaussianSplatRendererEditor.RepaintAll();
|
|
|
|
if(GUIUtility.hotControl == 0)
|
|
{
|
|
m_CurrentRotation = Tools.handleRotation;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
*/
|
|
} |