public Shape OnConvert(Mesh mesh) { MeshNormalizer normalizer = new MeshNormalizer(mesh); List <UnityEngine.Vector3> vertices = normalizer.UniqueVertices; List <int> triangles = normalizer.UniqueTriangles; List <Subdivision.Core.Point> points = new List <Subdivision.Core.Point>(); foreach (var v in normalizer.UniqueVertices) { points.Add(new Subdivision.Core.Point(v.x, v.y, v.z)); } List <Subdivision.Core.Edge> edges = new List <Subdivision.Core.Edge>(); Shape shape = new Shape(); for (int i = 0; i < normalizer.UniqueTriangles.Count / 3; i++) { Subdivision.Core.Point p0 = points[triangles[3 * i]]; Subdivision.Core.Point p1 = points[triangles[3 * i + 1]]; Subdivision.Core.Point p2 = points[triangles[3 * i + 2]]; Subdivision.Core.Edge e0 = new Subdivision.Core.Edge(p0, p1); Subdivision.Core.Edge e1 = new Subdivision.Core.Edge(p1, p2); Subdivision.Core.Edge e2 = new Subdivision.Core.Edge(p2, p0); bool b0 = true; bool b1 = true; bool b2 = true; foreach (Subdivision.Core.Edge ee in edges) { if (e0.IsMatchFor(ee)) { e0 = ee; b0 = false; } if (e1.IsMatchFor(ee)) { e1 = ee; b1 = false; } if (e2.IsMatchFor(ee)) { e2 = ee; b2 = false; } } if (b0) { edges.Add(e0); } if (b1) { edges.Add(e1); } if (b2) { edges.Add(e2); } shape.AddFace(new Face(e0, e1, e2)); } return(shape); }
UnityEngine.Vector3 ConvertToVector(Subdivision.Core.Point pt) { return(new UnityEngine.Vector3((float)pt.Position.X, (float)pt.Position.Y, (float)pt.Position.Z)); }