Example #1
0
    // cria a representação visual do diagrama de delaunay
    // cria um grafo a partir do resultado da triangulação
    public void BuildGraph()
    {
        var orderedLocations = new List <MapLocation>();

        foreach (var item in Diagram.Triangulation.Vertices)
        {
            orderedLocations.Add(Locations.Find(i => i.IsEqualTo(item)));
        }

        LocationGraph.AddNodes(orderedLocations);

        int[] indices = new int[Diagram.Triangulation.Triangles.Count * 3];

        // separa cada triangulo em 3 segmentos de reta
        int j = 0;

        for (int i = 0; i < Diagram.Triangulation.Triangles.Count; i += 3)
        {
            indices[j]     = Diagram.Triangulation.Triangles[i];
            indices[j + 1] = Diagram.Triangulation.Triangles[i + 1];

            indices[j + 2] = Diagram.Triangulation.Triangles[i + 1];
            indices[j + 3] = Diagram.Triangulation.Triangles[i + 2];

            indices[j + 4] = Diagram.Triangulation.Triangles[i + 2];
            indices[j + 5] = Diagram.Triangulation.Triangles[i];

            j += 6;
        }

        LocationGraph.CreateEdges(indices, (p, q) => Vector3.Distance(p.transform.position, q.transform.position));
        DelaunayMesh = CreateTriangulationMesh(Diagram, indices);

        GraphScreen.CreateDistances(LocationGraph);
    }