Skip to content

Commit c125764

Browse files
committed
UI debug + Gui logic splitting
so there we use partial class
1 parent cf8228b commit c125764

File tree

6 files changed

+204
-75
lines changed

6 files changed

+204
-75
lines changed

Assets/Plugins/MeshDebugger/Editor/IMGizmos.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,11 @@ private void CreateNewIter()
6767

6868
public void Init(Transform transform, Transform camera, bool depth, bool equalSize)
6969
{
70+
_transform = transform;
71+
_camera = camera;
72+
_depth = depth;
73+
_equalSize = equalSize;
74+
7075
m_TotalVert = 0;
7176
m_CurIter = 0;
7277
if (m_Gizmos.Count == 0)
@@ -76,10 +81,7 @@ public void Init(Transform transform, Transform camera, bool depth, bool equalSi
7681
m_Gizmos[i].m_Active = i == 0;
7782
m_Gizmos[i].Init(transform, camera, depth, equalSize);
7883
}
79-
_transform = transform;
80-
_camera = camera;
81-
_depth = depth;
82-
_equalSize = equalSize;
84+
8385
}
8486

8587
public void End()

Assets/Plugins/MeshDebugger/Editor/MeshDebugger.cs

Lines changed: 21 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
using UnityEngine.UI;
55

66
[ExecuteInEditMode]
7-
public class MeshDebugger : EditorWindow
7+
public partial class MeshDebugger : EditorWindow
88
{
99
public Mesh m_Mesh;
1010
public Transform m_Transform;
@@ -20,7 +20,7 @@ public class MeshDebugger : EditorWindow
2020
public bool m_DebugBinormalVerts;
2121
public bool m_DebugVertsToIndice;
2222
public bool m_DebugTrisNormal;
23-
public float m_RaySize = .4f;
23+
public float m_RaySize = .2f;
2424

2525
public enum DebugTriangle { None, Index, Area, Submesh }
2626
public enum DebugVertice { None, Index, Shared, Duplicates }
@@ -29,7 +29,7 @@ public enum DebugVertice { None, Index, Shared, Duplicates }
2929
public DebugTriangle m_DebugTris;
3030
public DebugVertice m_DebugVert;
3131
public bool m_UseHeatmap;
32-
public float m_HeatSize = .2f;
32+
public float m_HeatSize = .1f;
3333

3434
[Space]
3535
private Transform m_sceneCam;
@@ -69,11 +69,27 @@ void OnDisable()
6969

7070
void OnSelectionChange()
7171
{
72+
if (m_Transform && m_Transform.GetComponent<MeshDebuggerProxyUI>())
73+
{
74+
DestroyImmediate(m_Transform.GetComponent<MeshDebuggerProxyUI>());
75+
}
76+
7277
m_Transform = Selection.activeTransform;
7378
if (m_Transform)
7479
{
7580
var m = m_Transform.GetComponent<MeshFilter>();
81+
var m2 = m_Transform.GetComponent<Graphic>();
7682
if (m) m_Mesh = m.sharedMesh;
83+
else if (m2)
84+
{
85+
var m3 = m_Transform.gameObject.AddComponent<MeshDebuggerProxyUI>();
86+
m_Mesh = null;
87+
m3.callback += () =>
88+
{
89+
m_Mesh = m3.mesh;
90+
m_hasUpdated = false;
91+
};
92+
}
7793
else
7894
m_Mesh = null;
7995
}
@@ -84,74 +100,6 @@ void OnSelectionChange()
84100
Repaint();
85101
}
86102

87-
void OnGUI()
88-
{
89-
EditorGUI.BeginChangeCheck();
90-
{
91-
EditorGUILayout.BeginHorizontal();
92-
EditorGUILayout.PrefixLabel("Target");
93-
m_Transform = (Transform)EditorGUILayout.ObjectField(m_Transform, typeof(Transform), true);
94-
m_Mesh = (Mesh)EditorGUILayout.ObjectField(m_Mesh, typeof(Mesh), true);
95-
EditorGUILayout.EndHorizontal();
96-
}
97-
{
98-
EditorGUILayout.BeginHorizontal();
99-
EditorGUILayout.PrefixLabel("Configuration");
100-
m_Static = GUILayout.Toggle(m_Static, "Static", EditorStyles.miniButtonLeft);
101-
m_DepthCulling = GUILayout.Toggle(m_DepthCulling, "Depth Culling", EditorStyles.miniButtonMid);
102-
m_EqualizeGizmoSize = GUILayout.Toggle(m_EqualizeGizmoSize, "Equalize", EditorStyles.miniButtonRight);
103-
EditorGUILayout.EndHorizontal();
104-
}
105-
m_RaySize = EditorGUILayout.Slider("Ray Size", m_RaySize, 0, 2);
106-
{
107-
EditorGUILayout.BeginHorizontal();
108-
EditorGUILayout.PrefixLabel("Vertex Rays");
109-
m_DebugNormalVerts = GUILayout.Toggle(m_DebugNormalVerts, "Normal", EditorStyles.miniButtonLeft);
110-
m_DebugTangentVerts = GUILayout.Toggle(m_DebugTangentVerts, "Tangent", EditorStyles.miniButtonMid);
111-
m_DebugBinormalVerts = GUILayout.Toggle(m_DebugBinormalVerts, "Bitangent", EditorStyles.miniButtonRight);
112-
EditorGUILayout.EndHorizontal();
113-
}
114-
{
115-
EditorGUILayout.BeginHorizontal();
116-
EditorGUILayout.PrefixLabel("Additional Rays");
117-
m_DebugVertsToIndice = GUILayout.Toggle(m_DebugVertsToIndice, "Verts to Indice", EditorStyles.miniButtonLeft);
118-
m_DebugTrisNormal = GUILayout.Toggle(m_DebugTrisNormal, "Triangle Normal", EditorStyles.miniButtonRight);
119-
EditorGUILayout.EndHorizontal();
120-
}
121-
{
122-
EditorGUILayout.BeginHorizontal();
123-
EditorGUILayout.PrefixLabel("Use Heatmap");
124-
m_UseHeatmap = EditorGUILayout.Toggle(m_UseHeatmap);
125-
EditorGUI.BeginDisabledGroup(!m_UseHeatmap);
126-
m_HeatSize = EditorGUILayout.Slider(m_HeatSize, 0, 1);
127-
EditorGUI.EndDisabledGroup();
128-
EditorGUILayout.EndHorizontal();
129-
}
130-
{
131-
EditorGUILayout.BeginHorizontal();
132-
EditorGUILayout.PrefixLabel("Debug Vertices");
133-
if (GUILayout.Toggle(m_DebugVert == DebugVertice.None, "None", EditorStyles.miniButtonLeft)) m_DebugVert = DebugVertice.None;
134-
if (GUILayout.Toggle(m_DebugVert == DebugVertice.Index, "Index", EditorStyles.miniButtonMid)) m_DebugVert = DebugVertice.Index;
135-
if (GUILayout.Toggle(m_DebugVert == DebugVertice.Shared, "Shared", EditorStyles.miniButtonMid)) m_DebugVert = DebugVertice.Shared;
136-
if (GUILayout.Toggle(m_DebugVert == DebugVertice.Duplicates, "Duplicates", EditorStyles.miniButtonRight)) m_DebugVert = DebugVertice.Duplicates;
137-
EditorGUILayout.EndHorizontal();
138-
}
139-
{
140-
EditorGUILayout.BeginHorizontal();
141-
EditorGUILayout.PrefixLabel("Debug Triangles");
142-
if (GUILayout.Toggle(m_DebugTris == DebugTriangle.None, "None", EditorStyles.miniButtonLeft)) m_DebugTris = DebugTriangle.None;
143-
if (GUILayout.Toggle(m_DebugTris == DebugTriangle.Index, "Index", EditorStyles.miniButtonMid)) m_DebugTris = DebugTriangle.Index;
144-
if (GUILayout.Toggle(m_DebugTris == DebugTriangle.Area, "Area", EditorStyles.miniButtonMid)) m_DebugTris = DebugTriangle.Area;
145-
if (GUILayout.Toggle(m_DebugTris == DebugTriangle.Submesh, "Submesh", EditorStyles.miniButtonRight)) m_DebugTris = DebugTriangle.Submesh;
146-
EditorGUILayout.EndHorizontal();
147-
}
148-
if (EditorGUI.EndChangeCheck())
149-
{
150-
m_hasUpdated = false;
151-
SceneView.RepaintAll();
152-
}
153-
}
154-
155103
void OnSceneGUI(SceneView view)
156104
{
157105
if (Event.current.type != EventType.Repaint)
@@ -371,4 +319,6 @@ static Styles()
371319
blockLabel.alignment = TextAnchor.MiddleCenter;
372320
}
373321
}
322+
323+
374324
}
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Reflection;
5+
using System.Text;
6+
using UnityEditor;
7+
using UnityEngine;
8+
using UnityEngine.UI;
9+
10+
public partial class MeshDebugger : EditorWindow
11+
{
12+
public static class UI
13+
{
14+
public static GUIContent Target = new GUIContent("Target", "Currently inspected object");
15+
16+
public static GUIContent Configuration = new GUIContent("Configuration", "Toggleable control");
17+
public static GUIContent Static = new GUIContent("Static", "Turn on to assume that the mesh won't change internally (ie. not procedural)");
18+
public static GUIContent DepthCulling = new GUIContent("Depth Culling", "Turn on to cull cues that behind the object");
19+
public static GUIContent Equalize = new GUIContent("Equalize", "Turn on to keep cues on scale no matter far it is\n(NOTE: does not work correctly if static is on)");
20+
21+
public static GUIContent RaySize = new GUIContent("Ray Size", "The length of ray cues");
22+
public static GUIContent VertexRays = new GUIContent("Vertex Rays", "The length of ray cues");
23+
public static GUIContent Normal = new GUIContent("Normal", "Normal vector of vertices");
24+
public static GUIContent Tangent = new GUIContent("Tangent", "Tangent vector of vertices");
25+
public static GUIContent Bitangent = new GUIContent("Bitangent", "Bitangent (cross of normal and tangent) vector of vertices");
26+
27+
public static GUIContent AdditionalRays = new GUIContent("Additional Rays", "");
28+
public static GUIContent VertsToIndice = new GUIContent("Vertex to Indice", "Incomplete");
29+
public static GUIContent TriangleNormal = new GUIContent("Triangle Normal", "");
30+
31+
public static GUIContent UseHeatmap = new GUIContent("Triangle Normal", "");
32+
public static GUIContent DebugVertices = new GUIContent("Debug Vertices", "");
33+
public static GUIContent DebugTriangles = new GUIContent("Debug Triangles", "");
34+
35+
public static GUIContent None = new GUIContent("None", "");
36+
public static GUIContent Index = new GUIContent("Index", "");
37+
public static GUIContent Shared = new GUIContent("Shared", "");
38+
public static GUIContent Duplicates = new GUIContent("Duplicates", "");
39+
public static GUIContent Area = new GUIContent("Area", "");
40+
public static GUIContent Submesh = new GUIContent("Submesh", "");
41+
42+
}
43+
44+
void OnGUI()
45+
{
46+
EditorGUI.BeginChangeCheck();
47+
{
48+
EditorGUILayout.BeginHorizontal();
49+
EditorGUILayout.PrefixLabel(UI.Target);
50+
m_Transform = (Transform)EditorGUILayout.ObjectField(m_Transform, typeof(Transform), true);
51+
m_Mesh = (Mesh)EditorGUILayout.ObjectField(m_Mesh, typeof(Mesh), true);
52+
EditorGUILayout.EndHorizontal();
53+
}
54+
{
55+
EditorGUILayout.BeginHorizontal();
56+
EditorGUILayout.PrefixLabel(UI.Configuration);
57+
m_Static = GUILayout.Toggle(m_Static, UI.Static, EditorStyles.miniButtonLeft);
58+
m_DepthCulling = GUILayout.Toggle(m_DepthCulling, UI.DepthCulling, EditorStyles.miniButtonMid);
59+
m_EqualizeGizmoSize = GUILayout.Toggle(m_EqualizeGizmoSize, UI.Equalize, EditorStyles.miniButtonRight);
60+
EditorGUILayout.EndHorizontal();
61+
}
62+
m_RaySize = EditorGUILayout.Slider(UI.RaySize, m_RaySize, 0, 2);
63+
{
64+
EditorGUILayout.BeginHorizontal();
65+
EditorGUILayout.PrefixLabel(UI.VertexRays);
66+
m_DebugNormalVerts = GUILayout.Toggle(m_DebugNormalVerts, UI.Normal, EditorStyles.miniButtonLeft);
67+
m_DebugTangentVerts = GUILayout.Toggle(m_DebugTangentVerts, UI.Tangent, EditorStyles.miniButtonMid);
68+
m_DebugBinormalVerts = GUILayout.Toggle(m_DebugBinormalVerts, UI.Bitangent, EditorStyles.miniButtonRight);
69+
EditorGUILayout.EndHorizontal();
70+
}
71+
{
72+
EditorGUILayout.BeginHorizontal();
73+
EditorGUILayout.PrefixLabel(UI.AdditionalRays);
74+
m_DebugVertsToIndice = GUILayout.Toggle(m_DebugVertsToIndice, UI.VertsToIndice, EditorStyles.miniButtonLeft);
75+
m_DebugTrisNormal = GUILayout.Toggle(m_DebugTrisNormal, UI.TriangleNormal, EditorStyles.miniButtonRight);
76+
EditorGUILayout.EndHorizontal();
77+
}
78+
{
79+
EditorGUILayout.BeginHorizontal();
80+
EditorGUILayout.PrefixLabel(UI.UseHeatmap);
81+
m_UseHeatmap = EditorGUILayout.Toggle(m_UseHeatmap);
82+
EditorGUI.BeginDisabledGroup(!m_UseHeatmap);
83+
m_HeatSize = EditorGUILayout.Slider(m_HeatSize, 0, 0.5f);
84+
EditorGUI.EndDisabledGroup();
85+
EditorGUILayout.EndHorizontal();
86+
}
87+
{
88+
EditorGUILayout.BeginHorizontal();
89+
EditorGUILayout.PrefixLabel(UI.DebugVertices);
90+
if (GUILayout.Toggle(m_DebugVert == DebugVertice.None, UI.None, EditorStyles.miniButtonLeft)) m_DebugVert = DebugVertice.None;
91+
if (GUILayout.Toggle(m_DebugVert == DebugVertice.Index, UI.Index, EditorStyles.miniButtonMid)) m_DebugVert = DebugVertice.Index;
92+
if (GUILayout.Toggle(m_DebugVert == DebugVertice.Shared, UI.Shared, EditorStyles.miniButtonMid)) m_DebugVert = DebugVertice.Shared;
93+
if (GUILayout.Toggle(m_DebugVert == DebugVertice.Duplicates, UI.Duplicates, EditorStyles.miniButtonRight)) m_DebugVert = DebugVertice.Duplicates;
94+
EditorGUILayout.EndHorizontal();
95+
}
96+
{
97+
EditorGUILayout.BeginHorizontal();
98+
EditorGUILayout.PrefixLabel(UI.DebugTriangles);
99+
if (GUILayout.Toggle(m_DebugTris == DebugTriangle.None, UI.None, EditorStyles.miniButtonLeft)) m_DebugTris = DebugTriangle.None;
100+
if (GUILayout.Toggle(m_DebugTris == DebugTriangle.Index, UI.Index, EditorStyles.miniButtonMid)) m_DebugTris = DebugTriangle.Index;
101+
if (GUILayout.Toggle(m_DebugTris == DebugTriangle.Area, UI.Area, EditorStyles.miniButtonMid)) m_DebugTris = DebugTriangle.Area;
102+
if (GUILayout.Toggle(m_DebugTris == DebugTriangle.Submesh, UI.Submesh, EditorStyles.miniButtonRight)) m_DebugTris = DebugTriangle.Submesh;
103+
EditorGUILayout.EndHorizontal();
104+
}
105+
if (EditorGUI.EndChangeCheck())
106+
{
107+
m_hasUpdated = false;
108+
SceneView.RepaintAll();
109+
}
110+
}
111+
}

Assets/Plugins/MeshDebugger/Editor/MeshDebugger_GUI.cs.meta

Lines changed: 13 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using UnityEngine;
6+
using UnityEngine.UI;
7+
8+
public class MeshDebuggerProxyUI : BaseMeshEffect
9+
{
10+
public Mesh mesh;
11+
12+
public Action callback;
13+
14+
protected override void OnEnable()
15+
{
16+
if (!mesh)
17+
{
18+
mesh = new Mesh();
19+
mesh.hideFlags = HideFlags.HideAndDontSave;
20+
}
21+
base.OnEnable();
22+
}
23+
24+
protected override void OnDestroy()
25+
{
26+
if (mesh)
27+
{
28+
DestroyImmediate(mesh);
29+
}
30+
base.OnDestroy();
31+
}
32+
33+
public override void ModifyMesh(VertexHelper vh)
34+
{
35+
mesh.Clear();
36+
vh.FillMesh(mesh);
37+
38+
if (callback != null) callback();
39+
}
40+
}

Assets/Plugins/MeshDebugger/MeshDebuggerProxyUI.cs.meta

Lines changed: 13 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)