/// <summary> /// calculates maximum possible edge separation for the computed routing /// if it is greater than bundlingSettings.EdgeSeparation, then proceed /// if it is smaller, then either /// stop edge bundling, or /// reduce edge separation, or /// move obstacles to get more free space /// </summary> bool AnalyzeEdgeSeparation() { Dictionary <EdgeGeometry, Set <CdtEdge> > crossedCdtEdges = new Dictionary <EdgeGeometry, Set <CdtEdge> >(); shortestPathRouter.FillCrossedCdtEdges(crossedCdtEdges); Dictionary <CdtEdge, Set <EdgeGeometry> > pathsOnCdtEdge = GetPathsOnCdtEdge(crossedCdtEdges); double es = CalculateMaxAllowedEdgeSeparation(pathsOnCdtEdge); // TimeMeasurer.DebugOutput("opt es: " + es); if (es >= bundlingSettings.EdgeSeparation) { return(true); //we can even enlarge it here } if (es <= 0.02) { TimeMeasurer.DebugOutput("edge bundling can't be executed: not enough free space around obstacles"); foreach (var e in regularEdges) { e.Curve = null; } return(false); } // reducing edge separation // TimeMeasurer.DebugOutput("reducing edge separation to " + es); bundlingSettings.EdgeSeparation = es; shortestPathRouter.RouteEdges(); return(true); }