void DoSceneViewOverlay() { Handles.BeginGUI(); GUILayout.Space(4); GUILayout.BeginHorizontal(); GUILayout.Space(4); GUILayout.BeginVertical(EditorStyles.helpBox); if (m_Meshes.Length > 0) { for (int i = 0, c = m_Meshes.Length; i < c; ++i) { GUILayout.BeginHorizontal(); if (m_Invalid[i].Count > 0 && GUILayout.Button("Fix")) { MeshValidation.EnsureMeshIsValid(m_Meshes[i], out var removedVertexCount); Debug.Log($"Successfully repaired {m_Meshes[i].name}. Removed {removedVertexCount} problem vertices."); } GUILayout.Label($"Mesh \"{m_Meshes[i].name}\" found {m_Invalid[i].Count} problems"); GUILayout.EndHorizontal(); } } else { GUILayout.Label("Select a ProBuilder Mesh"); } GUILayout.EndVertical(); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); Handles.EndGUI(); }
public static void MenuRemoveDegenerateTriangles() { int count = 0; foreach (ProBuilderMesh pb in InternalUtility.GetComponents <ProBuilderMesh>(Selection.transforms)) { int removedVertexCount; if (!MeshValidation.EnsureMeshIsValid(pb, out removedVertexCount)) { pb.Rebuild(); pb.Optimize(); count += removedVertexCount; } } EditorUtility.ShowNotification("Removed " + count + " vertices \nbelonging to degenerate triangles."); }