-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSceneUnitRuler.cs
More file actions
108 lines (102 loc) · 3.96 KB
/
SceneUnitRuler.cs
File metadata and controls
108 lines (102 loc) · 3.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
#if true
public class RulerWindow : EditorWindow
{
bool rulerEnabled = false;
bool sceneRulerEnabled = false;
Vector2 mousePos = Vector2.zero;
Vector2 mousePosStart = Vector2.zero;
Vector2 mousePosLast = Vector2.zero;
Vector2 start2Last = Vector2.zero;
float distance = 0;
GUIStyle style = new GUIStyle();
[MenuItem("SceneRuler/RulerWindow")]
//[InitializeOnLoadMethod]
public static void Init()
{
RulerWindow window = EditorWindow.GetWindow<RulerWindow>();
window.Show();
}
void OnEnable()
{
//autoRepaintOnSceneChange = true;
}
void OnGUI()
{
GUILayout.Label("Scene Unit Ruler (Alt + Click to record position)");
bool isEnabled = EditorGUILayout.Toggle("Enable Ruler", rulerEnabled);
if (isEnabled != rulerEnabled)
{
TurnOnRuler(isEnabled);
rulerEnabled = isEnabled;
}
sceneRulerEnabled = EditorGUILayout.Toggle("Ruler on scene", sceneRulerEnabled);
GUILayout.Label("Current mouse position:" + mousePos.ToString("F2"));
EditorGUILayout.LabelField("Starting mouse position:" + mousePosStart.ToString("F2"));
EditorGUILayout.LabelField("Last mouse position:" + mousePosLast.ToString("F2"));
EditorGUILayout.LabelField("From start to last:" + distance.ToString("F2") + start2Last.ToString("F2"));
}
void OnDisable()
{
rulerEnabled = false;
sceneRulerEnabled = false;
}
public void TurnOnRuler(bool action)
{
SceneView.onSceneGUIDelegate -= UpdatePosition;
if (action)
{
SceneView.lastActiveSceneView.in2DMode = true;
SceneView.onSceneGUIDelegate += UpdatePosition;
}
}
public void UpdatePosition(SceneView scene)
{
mousePos = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition).origin;
if (Event.current.alt && Event.current.button == 0 && Event.current.type == EventType.MouseDown)
{
mousePosStart = mousePosLast;
mousePosLast = mousePos;
distance = Vector2.Distance(mousePosStart, mousePosLast);
CountDistance();
Event.current.Use();
}
Repaint();
if (sceneRulerEnabled)
{
DrawSceneRuler();
}
}
public void DrawSceneRuler()
{
style.normal.textColor = Color.green;
Handles.BeginGUI();
GUILayout.Label("Current mouse position:" + mousePos.ToString("F2"), style);
GUILayout.Label("Starting mouse position:" + mousePosStart.ToString("F2"), style);
GUILayout.Label("Last mouse position:" + mousePosLast.ToString("F2"), style);
GUILayout.Label("From start to last:" + distance.ToString("F2") + start2Last.ToString("F2"), style);
Handles.EndGUI();
Handles.color = Color.red;
Handles.DrawLine(mousePosStart, mousePosLast);
Handles.Label(mousePosStart, "Start: " + mousePosStart.ToString("F2"), style);
Handles.Label(mousePosLast, "End: " + mousePosLast.ToString("F2"), style);
Handles.Label(mousePosStart + start2Last / 2, "DIstance: " + distance.ToString("F2") + start2Last.ToString("F2"), style);
if (Event.current.alt)
{
Handles.color = Color.cyan;
Handles.DrawLine(mousePosLast, mousePos);
Handles.Label(mousePos, mousePos.ToString("F2"), style);
Vector2 vectBetween = mousePos - mousePosLast;
float distance2 = Vector2.Distance(mousePos, mousePosLast);
Handles.Label(mousePosLast + vectBetween / 2, "DIstance: " + distance2.ToString("F2") + vectBetween.ToString("F2"), style);
}
}
public void CountDistance()
{
start2Last = mousePosLast - mousePosStart;
}
}
#endif