| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- public class MeshSelection : MonoBehaviour
- {
- private GameObject ToolSelectObj;
- public List<int> SelectedTrianglesIndex = new List<int>();
- public HashSet<Vector3> TrianglesVector3s = new HashSet<Vector3>();
- 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;
- }
- }
|