void Start() { Vertex3[] vertices = new Vertex3[numPoints]; for (int i = 0; i < numPoints; i++) { Vector3 point = _meshFilter.mesh.GetRandomPointInsideNonConvex(_meshFilter.GetComponent <Renderer>().bounds.center); vertices[i] = new Vertex3(point.x, point.y, point.z); } delaunay = new DelaunayTriangulation3(); delaunay.Generate(vertices); GameObject go = new GameObject(); var meshfilter = go.AddComponent <MeshFilter>(); var renderer = go.AddComponent <MeshRenderer>(); renderer.sharedMaterial = material; Mesh mesh = new Mesh(); Vector3[] meshVertices = new Vector3[numPoints]; mesh.vertices = meshVertices; mesh.RecalculateNormals(); meshfilter.mesh = mesh; go.transform.parent = gameObject.transform; }
private void Update() { seed++; if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.D)) { theta += (Input.GetKey(KeyCode.A)) ? 0.005f : -0.005f; rotation[0, 0] = Mathf.Cos(theta); rotation[0, 2] = Mathf.Sin(theta); rotation[2, 0] = -Mathf.Sin(theta); rotation[2, 2] = Mathf.Cos(theta); } Debug.Log("Update"); Vertex3[] vertices = new Vertex3[NumberOfVertices]; Random.InitState(seed); for (int i = 0; i < NumberOfVertices; i++) { float x = size * Random.Range(-1.0f, 1.0f); float y = size * Random.Range(-2.0f, 2.0f); float z = size * Random.Range(-1.0f, 1.0f); vertices[i] = new Vertex3(x, y, z); } delaunay = new DelaunayTriangulation3(); delaunay.Generate(vertices, true, true); }
private void Start() { lineMaterial = new Material(Shader.Find("Hidden/Internal-Colored")); Vertex3[] vertices = new Vertex3[NumberOfVertices]; Random.InitState(seed); for (int i = 0; i < NumberOfVertices; i++) { float x = size * Random.Range(-1.0f, 1.0f); float y = size * Random.Range(-1.0f, 1.0f); float z = size * Random.Range(-1.0f, 1.0f); vertices[i] = new Vertex3(x, y, z); } delaunay = new DelaunayTriangulation3(); delaunay.Generate(vertices); }
private void Start() { lineMaterial = new Material(Shader.Find("Hidden/Internal-Colored")); Vertex3[] vertices = new Vertex3[NumberOfVertices]; Random.InitState(seed); for (int i = 0; i < NumberOfVertices; i++) { float x = size * Random.Range(-1.0f, 1.0f); float y = size * Random.Range(-1.0f, 1.0f); float z = size * Random.Range(-1.0f, 1.0f); vertices[i] = new Vertex3(x, y, z); } delaunay = new DelaunayTriangulation3(); delaunay.Generate(vertices); // DEBUG //CheckVertices(); //CheckCells(); TagCells(); _cellLabels = delaunay.Cells.Select(ShouldInclude).ToArray(); //var tris = GetBoundaryTriangles().SelectMany(v => v); var tris = GetBoundaryTriangles(); _mesh = new Mesh { //vertices = VertexToVector() }; /* * foreach (var tri in tris) * { * foreach (var v in tri) * { * * } * } */ }
static void Main(string[] args) { STLReader reader = new STLReader("C:/Users/Becarios/Documents/Ferreyra/Scripts/CenterlineComputation/Centerline/Meshes/testmesh.stl"); TriangleMesh[] mesh = reader.ReadFile(); Vertex3[] vertices = new Vertex3[3 * mesh.Length]; int j = 0; for (int i = 0; i < mesh.Length; i++) { vertices[j] = new Vertex3(mesh[i].vert1.x, mesh[i].vert1.y, mesh[i].vert1.z); vertices[j + 1] = new Vertex3(mesh[i].vert2.x, mesh[i].vert2.y, mesh[i].vert2.z); vertices[j + 2] = new Vertex3(mesh[i].vert3.x, mesh[i].vert3.y, mesh[i].vert3.z); j += 3; } DelaunayTriangulation3 delaunay = new DelaunayTriangulation3(); delaunay.Generate(vertices); //VoronoiMesh3 voronoi = new VoronoiMesh3(); //voronoi.Generate(vertices); //SAVE CENTROIDS using (StreamWriter writetext = new StreamWriter("C:/Users/Becarios/Documents/Ferreyra/Scripts/CenterlineComputation/DelaunayCentroids.txt")) { for (int k = 0; k < delaunay.Cells.Count; k++) { writetext.WriteLine(delaunay.Cells[k].CircumCenter.X + " " + delaunay.Cells[k].CircumCenter.Y + " " + delaunay.Cells[k].CircumCenter.Z + " " + delaunay.Cells[k].Radius); } } }
IEnumerator GenerateDelaunayEnumerator() { if (PointCloudData != null && PointCloudData.Length > 0 && maxPointsToShow > 0) { Camera mainCam = Camera.main; ; int numPoint = Mathf.Min(PointCloudData.Length, maxPointsToShow); Vertex3[] vertices = new Vertex3[numPoint]; int renderableIndex = 0; for (int i = 0; i < PointCloudData.Length; i++) { if (renderableIndex >= numPoint) { break; } Vector3 viewPos = mainCam.WorldToViewportPoint(PointCloudData[i]); if (viewPos.x >= -0.1 && viewPos.x <= 1.1 && viewPos.y >= 0 && viewPos.y <= 1.1 && viewPos.z > -0.1) { vertices[renderableIndex] = new Vertex3(PointCloudData[i].x, PointCloudData[i].y, PointCloudData[i].z); renderableIndex++; } } delaunay = new DelaunayTriangulation3(); delaunay.Generate(vertices); if (lines != null) { VectorLine.Destroy(lines); } foreach (var vectorObject3D in Component.FindObjectsOfType <VectorObject3D>()) { vectorObject3D.Destroy(); } lines = new List <VectorLine>(); if (delaunay != null) { Debug.Log("Generating Delaunay Wireframe"); foreach (DelaunayCell <Vertex3> cell in delaunay.Cells) { Vector3 a1 = new Vector3(cell.Simplex.Vertices[0].X, cell.Simplex.Vertices[0].Y, cell.Simplex.Vertices[0].Z); Vector3 a2 = new Vector3(cell.Simplex.Vertices[1].X, cell.Simplex.Vertices[1].Y, cell.Simplex.Vertices[1].Z); float aLength = (a1 - a2).magnitude; if (aLength < maxPointWireFrameLength) { VectorLine a; if (use3DLine) { a = VectorLine.SetLine3D(new Color(1, 1, 1, 0.5f), a1, a2); } else { a = VectorLine.SetLine(new Color(1, 1, 1, 0.5f), Camera.main.WorldToScreenPoint(a1), Camera.main.WorldToScreenPoint(a2)); } a.SetWidth(lineWidth); a.material = lineMaterial; lines.Add(a); } Vector3 b1 = new Vector3(cell.Simplex.Vertices[2].X, cell.Simplex.Vertices[2].Y, cell.Simplex.Vertices[2].Z); Vector3 b2 = new Vector3(cell.Simplex.Vertices[1].X, cell.Simplex.Vertices[1].Y, cell.Simplex.Vertices[1].Z); float bLength = (b1 - b2).magnitude; if (bLength < maxPointWireFrameLength) { VectorLine b; if (use3DLine) { b = VectorLine.SetLine3D(new Color(1, 1, 1, 0.5f), b1, b2); } else { b = VectorLine.SetLine(new Color(1, 1, 1, 0.5f), Camera.main.WorldToScreenPoint(b1), Camera.main.WorldToScreenPoint(b2)); } b.SetWidth(lineWidth); b.material = lineMaterial; lines.Add(b); } Vector3 c1 = new Vector3(cell.Simplex.Vertices[0].X, cell.Simplex.Vertices[0].Y, cell.Simplex.Vertices[0].Z); Vector3 c2 = new Vector3(cell.Simplex.Vertices[2].X, cell.Simplex.Vertices[2].Y, cell.Simplex.Vertices[2].Z); float cLength = (c1 - c2).magnitude; if (cLength < maxPointWireFrameLength) { VectorLine c; if (use3DLine) { c = VectorLine.SetLine3D(new Color(1, 1, 1, 0.5f), c1, c2); } else { c = VectorLine.SetLine(new Color(1, 1, 1, 0.5f), Camera.main.WorldToScreenPoint(c1), Camera.main.WorldToScreenPoint(c2)); } c.SetWidth(lineWidth); c.material = lineMaterial; lines.Add(c); } } } } yield return(null); }