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() { 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>()); } } } }