private void CreateInterClusterEdges(Cluster cluster) { foreach (var point1 in cluster.EntrancePoints) foreach (var point2 in cluster.EntrancePoints) { if (point1 == point2) continue; if (cluster.AreConnected(point1, point2)) { var absTilingEdgeInfo1 = new AbsTilingEdgeInfo(cluster.GetDistance(point1.EntranceLocalIdx, point2.EntranceLocalIdx), 1, false); HierarchicalMap.AbstractGraph.AddEdge( point1.AbsNodeId, point2.AbsNodeId, absTilingEdgeInfo1); } } }
private void CreateEntranceEdges(Entrance entrance, AbsType type, Dictionary<int, AbsTilingNodeInfo> absNodes) { int level; switch (entrance.Orientation) { case Orientation.HORIZONTAL: level = DetermineLevel(entrance.Coord1.Y); break; case Orientation.VERTICAL: level = DetermineLevel(entrance.Coord1.X); break; default: level = -1; break; } var abstractNodeId1 = absNodes[entrance.Coord1Id].Id; var abstractNodeId2 = absNodes[entrance.Coord2Id].Id; switch (type) { case AbsType.ABSTRACT_TILE: case AbsType.ABSTRACT_OCTILE_UNICOST: // Inter-edges: cost 1 var absTilingEdgeInfo1 = new AbsTilingEdgeInfo(Constants.COST_ONE, level, true); var absTilingEdgeInfo2 = new AbsTilingEdgeInfo(Constants.COST_ONE, level, true); HierarchicalMap.AbstractGraph.AddEdge(abstractNodeId1, abstractNodeId2, absTilingEdgeInfo1); HierarchicalMap.AbstractGraph.AddEdge(abstractNodeId2, abstractNodeId1, absTilingEdgeInfo2); break; case AbsType.ABSTRACT_OCTILE: { int unitCost; switch (entrance.Orientation) { case Orientation.HORIZONTAL: case Orientation.VERTICAL: unitCost = Constants.COST_ONE; break; case Orientation.HDIAG2: case Orientation.HDIAG1: case Orientation.VDIAG1: case Orientation.VDIAG2: unitCost = (Constants.COST_ONE * 34) / 24; break; default: unitCost = -1; break; } var absTilingEdgeInfo3 = new AbsTilingEdgeInfo(unitCost, level, true); var absTilingEdgeInfo4 = new AbsTilingEdgeInfo(unitCost, level, true); HierarchicalMap.AbstractGraph.AddEdge(abstractNodeId1, abstractNodeId2, absTilingEdgeInfo3); HierarchicalMap.AbstractGraph.AddEdge(abstractNodeId2, abstractNodeId1, absTilingEdgeInfo4); } break; default: break; } }