public override void OnInspectorGUI() { plotter = (HairyPlotter)target; if (!plotter) { return; } if (sceneViewCallback == null) { sceneViewCallback = new SceneView.OnSceneFunc(OnSceneViewRender); } if (!ReferenceEquals(SceneView.onSceneGUIDelegate, sceneViewCallback)) { SceneView.onSceneGUIDelegate = sceneViewCallback; } plotter.InitEditing(); EditorGUILayout.LabelField("Edit Mesh", plotter.EditMesh.name); EditorGUILayout.LabelField("Original Mesh", plotter.OriginalMesh ?? ""); EditorGUILayout.LabelField("Vertex Count", plotter.VertexCount.ToString()); EditorGUILayout.LabelField("Triangle Count", plotter.TriangleCount.ToString()); EditorGUILayout.LabelField("Unused Vertices", plotter.UnusedVerticesCount.ToString()); VertexToolbox(); TriangleToolbox(); VertexSelectionToolbox(); TriangleSelectionToolbox(); UvToolbox(); plotter.UpdateMesh(); if (Event.current.type == EventType.Repaint) { if (SceneView.lastActiveSceneView != null) { SceneView.lastActiveSceneView.Repaint(); } } }
public override void OnInspectorGUI() { base.OnInspectorGUI(); MeshFilter filter = (MeshFilter)target; HairyPlotter plotter = filter.GetComponent <HairyPlotter>(); if (plotter) { if (saveAsset) { EditorGUILayout.BeginHorizontal(); saveName = EditorGUILayout.TextField("Save Mesh As", saveName); if (GUILayout.Button("Save", EditorStyles.miniButton)) { if (saveName != "") { string path = "Assets/" + saveName + ".asset"; // Make sure mesh is latest version plotter.UpdateMesh(); // Create asset mesh Mesh asset = HairyPlotter.CloneMesh(plotter.EditMesh); // Load current Mesh currentAsset = (Mesh)AssetDatabase.LoadAssetAtPath(path, typeof(Mesh)); if (currentAsset) { currentAsset.Clear(); currentAsset.vertices = asset.vertices; currentAsset.uv = asset.uv; currentAsset.triangles = asset.triangles; currentAsset.RecalculateBounds(); currentAsset.RecalculateNormals(); AssetDatabase.SaveAssets(); } else { // Create asset new asset AssetDatabase.CreateAsset(asset, "Assets/" + saveName + ".asset"); } // Store asset on filter filter.sharedMesh = asset; // Set dirty EditorUtility.SetDirty(filter); // Destroy plotter object MonoBehaviour.DestroyImmediate(plotter); // Clean up assets CleanUp(plotter); } else { Debug.LogWarning("Enter a name for the mesh asset"); } } if (GUILayout.Button("Cancel", EditorStyles.miniButton)) { saveAsset = false; } EditorGUILayout.EndHorizontal(); } else { if (GUILayout.Button("Save Mesh And Stop Editing", EditorStyles.miniButton)) { saveName = ""; saveAsset = true; } if (GUILayout.Button("Revert Mesh", EditorStyles.miniButton)) { if (plotter.OriginalMesh != null) { // Load main asset filter.sharedMesh = (Mesh)AssetDatabase.LoadMainAssetAtPath(plotter.OriginalMesh); } else { // Reset to empty mesh filter.sharedMesh = new Mesh(); Debug.LogWarning("No original mesh to revert to"); } // Clear edit asset plotter.EditMesh = null; plotter.OriginalMesh = null; // Mark dirty EditorUtility.SetDirty(filter); } if (GUILayout.Button("Abort Editing", EditorStyles.miniButton)) { if (plotter.OriginalMesh != null) { filter.sharedMesh = (Mesh)AssetDatabase.LoadAssetAtPath(plotter.OriginalMesh, typeof(Mesh)); } else { // No mesh to revert to filter.sharedMesh = null; } // Set dirty EditorUtility.SetDirty(filter); // Destroy plotter object MonoBehaviour.DestroyImmediate(plotter); // Clean upp assets CleanUp(plotter); } } } else { if (AssetDatabase.LoadAssetAtPath("Assets/HairyPlotterMesh.asset", typeof(Mesh))) { EditorGUILayout.LabelField("Another mesh is already being edited with HairyPlotter", EditorStyles.miniLabel); } else { if (GUILayout.Button("Edit Mesh With HairyPlotter", EditorStyles.miniButton)) { EditorUtility.SetDirty(filter); EditorUtility.SetDirty(filter.gameObject.AddComponent <HairyPlotter>()); } } } }
public override void OnInspectorGUI() { plotter = (HairyPlotter)target; if (!plotter) return; if (sceneViewCallback == null) sceneViewCallback = new SceneView.OnSceneFunc(OnSceneViewRender); if (!ReferenceEquals(SceneView.onSceneGUIDelegate, sceneViewCallback)) SceneView.onSceneGUIDelegate = sceneViewCallback; plotter.InitEditing(); EditorGUILayout.LabelField("Edit Mesh", plotter.EditMesh.name); EditorGUILayout.LabelField("Original Mesh", plotter.OriginalMesh ?? ""); EditorGUILayout.LabelField("Vertex Count", plotter.VertexCount.ToString()); EditorGUILayout.LabelField("Triangle Count", plotter.TriangleCount.ToString()); EditorGUILayout.LabelField("Unused Vertices", plotter.UnusedVerticesCount.ToString()); VertexToolbox(); TriangleToolbox(); VertexSelectionToolbox(); TriangleSelectionToolbox(); UvToolbox(); plotter.UpdateMesh(); if (Event.current.type == EventType.Repaint) { if (SceneView.lastActiveSceneView != null) { SceneView.lastActiveSceneView.Repaint(); } } }
public override void OnInspectorGUI() { base.OnInspectorGUI(); MeshFilter filter = (MeshFilter)target; HairyPlotter plotter = filter.GetComponent <HairyPlotter>(); if (plotter) { if (saveAsset) { EditorGUILayout.BeginHorizontal(); saveName = EditorGUILayout.TextField("Save Mesh As", saveName); if (GUILayout.Button("Save", EditorStyles.miniButton)) { if (saveName != "") { // Make sure mesh is latest version plotter.UpdateMesh(); // Create asset mesh Mesh asset = HairyPlotter.CloneMesh(plotter.EditMesh); // Create asset and destroy temp mesh AssetDatabase.CreateAsset(asset, "Assets/" + saveName + ".asset"); // Store asset on filter filter.sharedMesh = asset; // Set dirty EditorUtility.SetDirty(filter); // Destroy plotter object MonoBehaviour.DestroyImmediate(plotter); // Clean up assets CleanUp(plotter); } else { Debug.LogWarning("Enter a name for the mesh asset"); } } if (GUILayout.Button("Cancel", EditorStyles.miniButton)) { saveAsset = false; } EditorGUILayout.EndHorizontal(); } else { if (GUILayout.Button("Save Mesh And Stop Editing", EditorStyles.miniButton)) { saveName = ""; saveAsset = true; } if (GUILayout.Button("Revert Mesh", EditorStyles.miniButton)) { if (plotter.OriginalMesh != null) { // Load main asset filter.sharedMesh = (Mesh)AssetDatabase.LoadMainAssetAtPath(plotter.OriginalMesh); } else { // Reset to empty mesh filter.sharedMesh = new Mesh(); Debug.LogWarning("No original mesh to revert to"); } // Clear edit asset plotter.EditMesh = null; plotter.OriginalMesh = null; // Mark dirty EditorUtility.SetDirty(filter); } if (GUILayout.Button("Abort Editing", EditorStyles.miniButton)) { if (plotter.OriginalMesh != null) { filter.sharedMesh = (Mesh)AssetDatabase.LoadAssetAtPath(plotter.OriginalMesh, typeof(Mesh)); } else { // No mesh to revert to filter.sharedMesh = null; } // Set dirty EditorUtility.SetDirty(filter); // Destroy plotter object MonoBehaviour.DestroyImmediate(plotter); // Clean upp assets CleanUp(plotter); } // select vertex gizmo size HairyPlotterEditor.GizmoSize = EditorGUILayout.FloatField("Gizmo Vertex Zize", HairyPlotterEditor.GizmoSize); // keep UV mapping while moving verts? HairyPlotterEditor.KeepUVOnVertsMove = EditorGUILayout.Toggle("Keep vertices UVs", HairyPlotterEditor.KeepUVOnVertsMove); } } else { if (AssetDatabase.LoadAssetAtPath("Assets/HairyPlotterMesh.asset", typeof(Mesh))) { EditorGUILayout.LabelField("Another mesh is already being edited with HairyPlotter", EditorStyles.miniLabel); } else { if (GUILayout.Button("Edit Mesh With HairyPlotter", EditorStyles.miniButton)) { EditorUtility.SetDirty(filter); EditorUtility.SetDirty(filter.gameObject.AddComponent <HairyPlotter>()); } } } }