void CalculateTightObstaclesForBundle(RectangleNode <Polyline> tightTree, Set <Polyline> obstaclesToIgnore)
        {
            double sRadius = SourceBase.Curve.BoundingBox.Diagonal / 2;
            double tRadius = TargetBase.Curve.BoundingBox.Diagonal / 2;

            //Polyline bundle = Intersections.Create4gon(SourceBase.CurveCenter, TargetBase.CurveCenter, sRadius * 2, tRadius * 2);
            Polyline bundle = Intersections.Create4gon(SourceBase.Position, TargetBase.Position, sRadius * 2, tRadius * 2);

            tightObstaclesInTheBoundingBox = tightTree.AllHitItems(bundle.BoundingBox,
                                                                   p => !obstaclesToIgnore.Contains(p) && Curve.ClosedCurveInteriorsIntersect(bundle, p)).ToList();
        }
        IEnumerable <DebugCurve> IdealBundles()
        {
            List <DebugCurve> dc = new List <DebugCurve>();

            foreach (var edge in mgd.VirtualEdges())
            {
                var node = edge.Item1;
                var adj  = edge.Item2;

                double width = mgd.GetWidth(node, adj, bundlingSettings.EdgeSeparation);
                dc.Add(new DebugCurve(0.1, "black", Intersections.Create4gon(node.Position, adj.Position, width, width)));
            }

            return(dc);
        }