/// <summary> /// returns all edges with are within the specified range of the input edge (either with or without the center itself) /// </summary> /// ![green = input edge , blue = result](GetEdges_WithinDistance.png) public static List <Vector3Int> WithinDistanceOfEdge(Vector3Int centerEdge, int maxDistance, bool includeCenter) { //there might be smarter ways but this should work. HashSet <Vector3Int> edgesInRange = new HashSet <Vector3Int>(); HashSet <Vector3Int> openEdges = new HashSet <Vector3Int>(); openEdges.Add(centerEdge); for (int i = 0; i <= maxDistance; i++) { HashSet <Vector3Int> edgesWithDistanceI = new HashSet <Vector3Int>(); foreach (var openEdge in openEdges) { edgesInRange.Add(openEdge); var adjacent = GetEdges.AdjacentToEdge(openEdge); foreach (var adj in adjacent) { if (!edgesInRange.Contains(adj)) { edgesWithDistanceI.Add(adj); } } } openEdges = edgesWithDistanceI; } if (!includeCenter) { edgesInRange.Remove(centerEdge); } return(edgesInRange.ToList()); }
/// <summary> /// returns all edges with are within the specified range of the input corner /// </summary> /// ![green = input corner , blue = result](GetEdges_WithinDistanceOfCorner.png) public static List <Vector3Int> WithinDistanceOfCorner(Vector3Int centerCorner, int maxDistance) { if (maxDistance == 0) { return(new List <Vector3Int>()); } //there might be smarter ways but this should work. HashSet <Vector3Int> edgesInRange = new HashSet <Vector3Int>(); HashSet <Vector3Int> openEdges = new HashSet <Vector3Int>(); var adjacentToCorner = GetEdges.AdjacentToCorner(centerCorner); adjacentToCorner.ForEach(x => openEdges.Add(x)); for (int i = 1; i <= maxDistance; i++) { HashSet <Vector3Int> edgesWithDistanceI = new HashSet <Vector3Int>(); foreach (var edge in openEdges) { edgesInRange.Add(edge); var adjacent = GetEdges.AdjacentToEdge(edge); foreach (var adj in adjacent) { if (!edgesInRange.Contains(adj)) { edgesWithDistanceI.Add(adj); } } } openEdges = edgesWithDistanceI; } return(edgesInRange.ToList()); }
public object Get(GetEdges query) { var edges = new List <SimpleEdge>(); foreach (Connection edge in ExprTree.Tree.Edges.ToArray()) { edges.Add(new SimpleEdge(edge)); } //Response.AddHeader("Access-Control-Allow-Origin", "*"); return(edges.ToArray()); }
/// <summary> /// returns all the border edges of a set of tiles. /// </summary> /// ![green = input tiles , blue = result](GetEdges_TileBorders.png) public static List <Vector3Int> TileBorders(IEnumerable <Vector3Int> tiles) { List <Vector3Int> edges = new List <Vector3Int>(); foreach (var tile in tiles) { List <Vector3Int> edgeCoordsOfCell = GetEdges.OfTile(tile); foreach (var c in edgeCoordsOfCell) { if (edges.Contains(c)) { edges.Remove(c); } else { edges.Add(c); } } } return(edges); }