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));
        }
Exemplo n.º 2
0
 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
        }