void AddTileChildren(int i, int j, List<Tuple<int, int>> nextLevelTileList, GridTraversal grid,int iLevel) { var tileBox = grid.GetTileRect(i, j); i *= 2; j *= 2; var center = tileBox.Center; var rect = new Rectangle(tileBox.LeftBottom, center); if (!RectIsEmptyAfterLevel(rect, iLevel)) nextLevelTileList.Add(new Tuple<int, int>(i, j)); rect = new Rectangle(tileBox.RightBottom, center); if (!RectIsEmptyAfterLevel(rect, iLevel)) nextLevelTileList.Add(new Tuple<int, int>(i + 1, j)); rect = new Rectangle(tileBox.LeftTop, center); if (!RectIsEmptyAfterLevel(rect, iLevel)) nextLevelTileList.Add(new Tuple<int, int>(i, j + 1)); rect = new Rectangle(tileBox.RightTop, center); if (!RectIsEmptyAfterLevel(rect, iLevel)) nextLevelTileList.Add(new Tuple<int, int>(i + 1, j + 1)); }
static void ShowTiles(List<Tuple<int, int>> tiles, GridTraversal grid, Point p1, Point p2) { var ll = tiles.Select(t => grid.GetTileRect(t.Item1, t.Item2)).Select(r => new DebugCurve("black", r.Perimeter())).ToList(); ll.Add(new DebugCurve("red", new LineSegment(p1, p2))); LayoutAlgorithmSettings.ShowDebugCurves(ll.ToArray()); }
void DrawTilesOnLevel(List<Tuple<int, int>> tileList, GridTraversal grid, RenderTargetBitmap renderBitmap, double w, double h, double scale, int iLevel, List<Tuple<int, int>> nextLevelTileList) { InvalidateNodesForTilesOnLevel(iLevel); foreach (var tile in tileList) { int i = tile.Item1; int j = tile.Item2; var rect = grid.GetTileRect(i, j); bool tileIsAlmostEmpty = DrawImageOfTile(rect, i, j, renderBitmap, (int) w, (int) h, scale, grid); if (tileIsAlmostEmpty) continue; if (iLevel < _lgLayoutSettings.Interactor.GetNumberOfLevels() - 1) AddTileChildren(i, j, nextLevelTileList, grid, iLevel); } }
private void ShowDebugInsertedSegments(GridTraversal grid, int zoomLevel, LgNodeInfo nodeToAdd, IEnumerable<SymmetricSegment> newToAdd, IEnumerable<SymmetricSegment> allOnNewEdges) { #if DEBUG && !SILVERLIGHT && !SHARPKIT && PREPARE_DEMO var edges = _pathRouter.GetAllEdgesVisibilityEdges(); var ll = new List<DebugCurve>(); foreach (var ni in _insertedNodes) { ll.Add(new DebugCurve(5, "green", ni.BoundaryCurve)); } if (nodeToAdd != null) { var curve = _insertedNodes.Last().BoundaryCurve.Clone(); curve.Translate(nodeToAdd.Center - _insertedNodes.Last().Center); ll.Add(new DebugCurve(5, "red", curve)); } foreach (var e in edges) { ll.Add(new DebugCurve(new LineSegment(e.SourcePoint, e.TargetPoint))); } int n = zoomLevel; int maxNodes = MaxNodesPerTile(zoomLevel); for (int ix = 0; ix < n; ix++) { for (int iy = 0; iy < n; iy++) { var tile = new Tuple<int, int>(ix, iy); var r = grid.GetTileRect(ix, iy); if (_nodeTileTable.ContainsKey(tile) && _nodeTileTable[tile] >= maxNodes) { ll.Add(new DebugCurve(5, "yellow", CurveFactory.CreateRectangle(r))); } else if (_segmentTileTable.ContainsKey(tile) && _segmentTileTable[tile] >= MaxAmountRailsPerTile) { ll.Add(new DebugCurve(5, "orange", CurveFactory.CreateRectangle(r))); } else { ll.Add(new DebugCurve(5, "blue", CurveFactory.CreateRectangle(r))); } } } if (allOnNewEdges != null) { foreach (var seg in allOnNewEdges) { ll.Add(new DebugCurve(5, "yellow", new LineSegment(seg.A, seg.B))); } } if (newToAdd != null) { foreach (var seg in newToAdd) { ll.Add(new DebugCurve(5, "red", new LineSegment(seg.A, seg.B))); } } LayoutAlgorithmSettings.ShowDebugCurves(ll.ToArray()); PrintInsertedNodesLabels(); #endif }