80 lines
2.8 KiB
C#
80 lines
2.8 KiB
C#
namespace Dreamteck.Splines.Editor
|
|
{
|
|
using UnityEngine;
|
|
using UnityEditor;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
|
|
public class PointRotateModule : PointTransformModule
|
|
{
|
|
public bool rotateNormals = true;
|
|
public bool rotateTangents = true;
|
|
|
|
public PointRotateModule(SplineEditor editor) : base(editor)
|
|
{
|
|
}
|
|
|
|
public override GUIContent GetIconOff()
|
|
{
|
|
return EditorGUIUtility.IconContent("RotateTool");
|
|
}
|
|
|
|
public override GUIContent GetIconOn()
|
|
{
|
|
return EditorGUIUtility.IconContent("RotateTool On");
|
|
}
|
|
|
|
public override void LoadState()
|
|
{
|
|
base.LoadState();
|
|
rotateNormals = LoadBool("rotateNormals");
|
|
rotateTangents = LoadBool("rotateTangents");
|
|
}
|
|
|
|
public override void SaveState()
|
|
{
|
|
base.SaveState();
|
|
SaveBool("rotateNormals", rotateNormals);
|
|
SaveBool("rotateTangents", rotateTangents);
|
|
}
|
|
|
|
protected override void OnDrawInspector()
|
|
{
|
|
editSpace = (EditSpace)EditorGUILayout.EnumPopup("Edit Space", editSpace);
|
|
rotateNormals = EditorGUILayout.Toggle("Rotate Normals", rotateNormals);
|
|
rotateTangents = EditorGUILayout.Toggle("Rotate Tangents", rotateTangents);
|
|
}
|
|
|
|
protected override void OnDrawScene()
|
|
{
|
|
if (selectedPoints.Count == 0) return;
|
|
if (rotateNormals)
|
|
{
|
|
Handles.color = new Color(Color.yellow.r, Color.yellow.g, Color.yellow.b, 0.4f);
|
|
for (int i = 0; i < selectedPoints.Count; i++)
|
|
{
|
|
Vector3 normal = points[selectedPoints[i]].normal;
|
|
normal *= HandleUtility.GetHandleSize(points[selectedPoints[i]].position);
|
|
Handles.DrawLine(points[selectedPoints[i]].position, points[selectedPoints[i]].position + normal);
|
|
SplineEditorHandles.DrawArrowCap(points[selectedPoints[i]].position + normal, Quaternion.LookRotation(normal), HandleUtility.GetHandleSize(points[selectedPoints[i]].position));
|
|
}
|
|
}
|
|
Handles.color = Color.white;
|
|
Quaternion lastRotation = rotation;
|
|
rotation = Handles.RotationHandle(lastRotation, selectionCenter);
|
|
if (lastRotation != rotation)
|
|
{
|
|
PrepareTransform();
|
|
for (int i = 0; i < selectedPoints.Count; i++)
|
|
{
|
|
var point = localPoints[selectedPoints[i]];
|
|
TransformPoint(ref point, rotateNormals, rotateTangents);
|
|
points[selectedPoints[i]].SetPoint(point);
|
|
}
|
|
RegisterChange();
|
|
SetDirty();
|
|
}
|
|
}
|
|
}
|
|
}
|