Exemplo n.º 1
0
        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.");
        }