internal void Run() {
            foreach (GeometryGraph graph in GetGeometryGraphs()) {
                var br = new BundleRouter(graph, new SdShortestPath(transparentShapeSetter, null, null),
                    interactiveEdgeRouter.VisibilityGraph, bundlingSettings, interactiveEdgeRouter.LoosePadding, interactiveEdgeRouter.TightHierarchy,
                    interactiveEdgeRouter.LooseHierarchy, null, null, null);

                br.Run();
            }
        }
        void RouteBundles() {
            ScaleLooseShapesDown();

            CalculateEdgeEnterablePolylines();
            var looseHierarchy = GetLooseHierarchy();
            var cdt = BundleRouter.CreateConstrainedDelaunayTriangulation(looseHierarchy);
            // CdtSweeper.ShowFront(cdt.GetTriangles(), null, null,this.visGraph.Edges.Select(e=>new LineSegment(e.SourcePoint,e.TargetPoint)));

            var shortestPath = new SdShortestPath(MakeTransparentShapesOfEdgeGeometryAndGetTheShapes, cdt, FindCdtGates(cdt));
            var bundleRouter = new BundleRouter(geometryGraph, shortestPath, visGraph, BundlingSettings,
                                                         LoosePadding, GetTightHierarchy(),
                                                         looseHierarchy, enterableLoose, enterableTight,
                                                         port=>LoosePolyOfOriginalShape(portsToShapes[port]));

            bundleRouter.Run();
        }