コード例 #1
0
        private ProximityOverlapRemoval RunOverlapRemoval(GeometryGraph graphCopy, GeometryGraph graphOriginal, HashSet <Tuple <int, int> > proximityEdges,
                                                          HashSet <Tuple <int, int, int> > proximityTriangles, List <Tuple <string, double> > statistics, OverlapRemovalSettings settings)
        {
            ProximityOverlapRemoval prism = new ProximityOverlapRemoval(graphCopy);

            prism.Settings = settings;
            Timer timer = new Timer();

            timer.Start();
            prism.RemoveOverlaps();
            timer.Stop();
            var cpuTimeSpan    = TimeSpan.FromSeconds(timer.Duration);
            var statCpuTime    = Tuple.Create("CPUTime", cpuTimeSpan.TotalSeconds);
            var statIterations = Tuple.Create("Iterations", (double)prism.LastRunIterations);

            var statEdgeLength = Statistics.Statistics.EdgeLengthDeviation(graphOriginal, graphCopy, proximityEdges);
            var statProcrustes =
                Statistics.Statistics.ProcrustesStatistics(graphOriginal.Nodes.Select(v => v.Center).ToList(),
                                                           graphCopy.Nodes.Select(v => v.Center).ToList());
            var statTriangleOrient = Statistics.Statistics.TriangleOrientation(graphOriginal, graphCopy, proximityTriangles);
            var statArea           = Statistics.Statistics.Area(graphCopy);


            statistics.Add(statCpuTime);
            statistics.Add(statIterations);
            statistics.Add(statEdgeLength);
            statistics.Add(statProcrustes);
            statistics.Add(statArea);
            statistics.Add(statTriangleOrient);
            return(prism);
        }
コード例 #2
0
 /// <summary>
 /// generate and load tiles
 /// </summary>
 public void GenerateTiles() {
     var timer = new Timer();
     timer.Start();
     var renderTransform = _graphCanvas.RenderTransform.Clone();
     bool normalFlow = false;
     try {
         Debug.Assert(!string.IsNullOrEmpty(TileDirectory));
         Clear();
         CreateTileDirectoryIfNeededAndRemoveEverythingUnderIt();
         MakeAllNodesVisible();
         UpdateAllNodeBorders();
         RemoveAllVisibleRails();
         var fitFactor = GetFitFactor(new Size(800, 800));
         var w = GeomGraph.Width * fitFactor;
         var h = GeomGraph.Height * fitFactor;
         var renderBitmap = new RenderTargetBitmap((int)w, (int)h, 96, 96, PixelFormats.Pbgra32);
         var tileList=new List<Tuple<int, int>> {new Tuple<int, int>(0, 0)};
         var nextLevelTileList = new List<Tuple<int, int>>();
         for (int iLevel = 0; iLevel < _lgLayoutSettings.Interactor.GetNumberOfLevels() - 1 && tileList.Count>0;) {
             GridTraversal grid = new GridTraversal(GeomGraph.BoundingBox, iLevel);
             Console.WriteLine("Drawing tiles on level {0} ...", iLevel);
             DrawTilesOnLevel(tileList, grid, renderBitmap, w, h, fitFactor*Math.Pow(2, iLevel), iLevel,
                 nextLevelTileList);
             iLevel++;
             if (iLevel == _lgLayoutSettings.Interactor.GetNumberOfLevels() - 1) break;
             tileList = SwapTileLists(tileList, ref nextLevelTileList);
         }
         Console.WriteLine("Done");
         normalFlow = true;
     }
     catch (Exception e) {
         Console.WriteLine(e.Message);
         Console.WriteLine("did not succeeed to save all tiles");
     }
     finally {
         // restore the original state
         foreach (
             var node in
                 _drawingGraph.Nodes.Concat(_drawingGraph.RootSubgraph.AllSubgraphsDepthFirstExcludingSelf())) {
             HideVNode(node);
         }
         Clear();
         _graphCanvas.RenderTransform = renderTransform;
         if (normalFlow) 
             InitTiles();
         if (ViewChangeEvent != null)
             ViewChangeEvent(null, null);
     }
     timer.Stop();
     Console.WriteLine("tiles for {0}", timer.Duration);            
 }