示例#1
0
    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;
    }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
        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)
             *  {
             *
             *  }
             * }
             */
        }
示例#5
0
        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);
                }
            }
        }
示例#6
0
        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);
        }