using System.Collections; using System.Collections.Generic; using UnityEngine; public class MeshSelection : MonoBehaviour { private GameObject ToolSelectObj; public List SelectedTrianglesIndex = new List(); public HashSet TrianglesVector3s = new HashSet(); public void GetBoundaryVertices(Mesh mesh) { Vector3[] vertices = mesh.vertices; int[] triangles = mesh.triangles; Dictionary<(int, int), int> edgeFaces = new Dictionary<(int, int), int>(); foreach (var i in SelectedTrianglesIndex) { int a = triangles[i]; int b = triangles[i + 1]; int c = triangles[i + 2]; RegisterEdge(a, b, edgeFaces); RegisterEdge(b, c, edgeFaces); RegisterEdge(c, a, edgeFaces); } foreach (var edge in edgeFaces) { if (edge.Value == 1) { TrianglesVector3s.Add(ToolSelectObj.transform.TransformPoint(vertices[edge.Key.Item1])); TrianglesVector3s.Add(ToolSelectObj.transform.TransformPoint(vertices[edge.Key.Item2])); } } } private static void RegisterEdge(int a, int b, Dictionary<(int, int), int> edgeFaces) { var edge = a < b ? (a, b) : (b, a); edgeFaces.TryGetValue(edge, out int count); edgeFaces[edge] = count + 1; } public void CreateCenter() { Vector3 v3 = Vector3.zero; foreach(Vector3 vector3 in TrianglesVector3s) { GameObject gameObject = new GameObject(); gameObject.transform.position = vector3; v3 += vector3; } GameObject obj = new GameObject(); obj.transform.SetParent(ToolSelectObj.transform.parent, true); obj.transform.localPosition = v3 / TrianglesVector3s.Count ; obj.name = ToolSelectObj.name+"---生成点"; //ToolSelectObj.transform.SetParent(obj.transform,true); TrianglesVector3s.Clear(); } public void setObj(GameObject obj) { ToolSelectObj = obj; } }