Exemple #1
0
        static Dictionary <Edge, EdgeTris> GenerateEdgeConnections(IReadOnlyList <Tri> triangles)
        {
            Dictionary <Edge, EdgeTris> connections = new Dictionary <Edge, EdgeTris>();

            for (int i = 0; i < triangles.Count; i++)
            {
                var tri = triangles[i];
                var e0  = new Edge(tri.p0, tri.p1);
                var e1  = new Edge(tri.p1, tri.p2);
                var e2  = new Edge(tri.p2, tri.p0);

                if (!connections.ContainsKey(e0))
                {
                    connections.Add(e0, new EdgeTris(-1, -1));
                }
                if (!connections.ContainsKey(e1))
                {
                    connections.Add(e1, new EdgeTris(-1, -1));
                }
                if (!connections.ContainsKey(e2))
                {
                    connections.Add(e2, new EdgeTris(-1, -1));
                }

                if (e0.p0 == tri.p0)
                {
                    connections[e0] = new EdgeTris(i, connections[e0].Right);
                }
                else
                {
                    connections[e0] = new EdgeTris(connections[e0].Left, i);
                }
                if (e1.p0 == tri.p1)
                {
                    connections[e1] = new EdgeTris(i, connections[e1].Right);
                }
                else
                {
                    connections[e1] = new EdgeTris(connections[e1].Left, i);
                }
                if (e2.p0 == tri.p2)
                {
                    connections[e2] = new EdgeTris(i, connections[e2].Right);
                }
                else
                {
                    connections[e2] = new EdgeTris(connections[e2].Left, i);
                }
            }

            return(connections);
        }
Exemple #2
0
 static int GetNeighborTriangle(int currTriangle, EdgeTris et)
 {
     if (currTriangle == et.Left)
     {
         return(et.Right);
     }
     else if (currTriangle == et.Right)
     {
         return(et.Left);
     }
     else
     {
         throw new Exception("currTriangle not contained in edge tringles.");
     }
 }