/// <summary> /// Adds a edge where the node is connected to /// </summary> /// <param name="e"></param> public void AddEdge(Edge e) { if (ConnectedEdges.Contains(e)) { return; } ConnectedEdges.Add(e); }
public void AddUniqueConnectedEdge(Edge e) { foreach (Edge edge in ConnectedEdges) { Edge inverseEdge = e.getInverse(); if (edge.Vertex1.Location.Equals(e.Vertex1.Location) && edge.Vertex2.Location.Equals(e.Vertex2.Location)) { return; } else if (edge.Vertex1.Location.Equals(inverseEdge.Vertex1.Location) && edge.Vertex2.Location.Equals(inverseEdge.Vertex2.Location)) { return; } } ConnectedEdges.Add(e); }
public static List <List <Vector3> > ConnectEdges(List <Edge> edges) { var result = new List <List <Vector3> >(); var connected = new ConnectedEdges(edges, 0); var shouldConnectThings = true; while (shouldConnectThings) { var couldConnectAnything = true; var randomUnconnectedIndex = -1; while (couldConnectAnything) { couldConnectAnything = false; randomUnconnectedIndex = -1; for (int edgeIndex = 1; edgeIndex < edges.Count; ++edgeIndex) { if (!connected.Contains(edgeIndex)) { if (connected.TryConnect(edgeIndex)) { couldConnectAnything = true; } else { randomUnconnectedIndex = edgeIndex; } } } } result.Add(connected.GetVerts()); shouldConnectThings = false; if (randomUnconnectedIndex != -1) { connected.Start(randomUnconnectedIndex); shouldConnectThings = true; } } return(result); }