internal bool Intersects(RealNumberSpan a) {
     return !(a.Max < Min || a.Min > Max);
 }
        void StretchHeight() {
            var desiredSpan = new RealNumberSpan();
            foreach (Node node in originalGraph.Nodes) {
                desiredSpan.AddValue(node.BoundingBox.Height/2);
                desiredSpan.AddValue(sugiyamaSettings.MinimalHeight - node.BoundingBox.Height/2);
            }

            var currentSpan = new RealNumberSpan();
            foreach (Anchor anchor in NodeAnchors())
                currentSpan.AddValue(anchor.Y);

            if (currentSpan.Length > ApproximateComparer.DistanceEpsilon) {
                double stretch = desiredSpan.Length/currentSpan.Length;
                if (stretch > 1)
                    foreach (Anchor a in anchors)
                        a.Y *= stretch;
            }
        }
 double GetCurrentWidth() {
     var span = new RealNumberSpan();
     foreach (Anchor anchor in NodeAnchors()) {
         span.AddValue(anchor.Left);
         span.AddValue(anchor.Right);
     }
     return span.Length;
 }
 double GetCurrentHeight() {
     var span = new RealNumberSpan();
     foreach (Anchor anchor in NodeAnchors()) {
         span.AddValue(anchor.Top);
         span.AddValue(anchor.Bottom);
     }
     return span.Length;
 }
        /// <summary>
        /// </summary>
        void StretchWidth() {
            //calculate the desired span of the anchor centers and the current span of anchor center
            var desiredSpan = new RealNumberSpan();
            foreach (Node node in originalGraph.Nodes) {
                desiredSpan.AddValue(node.BoundingBox.Width/2);
                desiredSpan.AddValue(sugiyamaSettings.MinimalWidth - node.BoundingBox.Width/2);
            }

            var currentSpan = new RealNumberSpan();
            foreach (Anchor anchor in NodeAnchors())
                currentSpan.AddValue(anchor.X);

            if (currentSpan.Length > ApproximateComparer.DistanceEpsilon) {
                double stretch = desiredSpan.Length/currentSpan.Length;
                if (stretch > 1)
                    foreach (Anchor a in anchors)
                        a.X *= stretch;
            }
        }
Exemple #6
0
 internal bool Intersects(RealNumberSpan a)
 {
     return(!(a.Max < Min || a.Min > Max));
 }
 DebugCurve DebugSweepLine(RealNumberSpan range) {
     var ls = new LineSegment(Z * SweepDirection + DirectionPerp * range.Min, Z * SweepDirection + DirectionPerp * range.Max);
     return new DebugCurve(100,0.1,"magenta", ls);
 }
        void ShowLeftTree(params ICurve[] curves) {
            var l = Obstacles.Select(p => new DebugCurve(100, 0.01,"green", p)).ToList();
            var range = new RealNumberSpan();
            var ellipseSize = 0.01;

            foreach (var s in leftConeSides) {
                var curve = ExtendSegmentToZ(s);
                range.AddValue(curve.Start*DirectionPerp);
                range.AddValue(curve.End * DirectionPerp);
                l.Add(new DebugCurve(100, 0.1, "red", curve));
                l.Add(new DebugCurve(200,0.1, "black", new Ellipse(ellipseSize,ellipseSize, curve.End)));
                ellipseSize += 2;
            }
            l.Add(DebugSweepLine(range));

            //            foreach (VisibilityEdge edge in visibilityGraph.Edges)
            //                l.Add(BezierOnEdge(edge));

            l.AddRange(curves.Select(c => new DebugCurve(100, 0.5, "brown", c)));
            LayoutAlgorithmSettings.ShowDebugCurvesEnumeration(l);
        }