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); }
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."); } }