Example #1
0
        static void DrawEdgeWithPort(Edge edge, InteractiveEdgeRouter portRouter, double par0, double par1)
        {
            var port0 = new CurvePort(edge.Source.BoundaryCurve, par0);
            var port1 = new CurvePort(edge.Target.BoundaryCurve,par1);

            SmoothedPolyline sp;
            var spline = portRouter.RouteSplineFromPortToPortWhenTheWholeGraphIsReady(port0, port1, true, out sp);

            Arrowheads.TrimSplineAndCalculateArrowheads(edge.EdgeGeometry,
                                                         edge.Source.BoundaryCurve,
                                                         edge.Target.BoundaryCurve,
                                                         spline, true,
                                                         false);
        }
Example #2
0
        static IEnumerable<Edge> CreateEdgesForGroupRouting(IEnumerable<Cluster> clusters) {
            var c = GetClusterById(clusters, "c");
            var f = GetClusterById(clusters, "f");
            var a = c.Clusters.Single(s => s.UserData.Equals("a"));
            var b = c.Clusters.Single(s => s.UserData.Equals("b"));
            var d = f.Clusters.Single(s => s.UserData.Equals("d"));
            var e = f.Clusters.Single(s => s.UserData.Equals("e"));
            var h = GetClusterById(clusters, "h");
            var g = GetClusterById(clusters, "g");
            var l = GetClusterById(clusters, "l");
            var k = GetClusterById(clusters, "k");
            var ports = new Dictionary<Cluster, Set<Port>>();
            AddPortToShape(k, ports, new CurvePort(k.BoundaryCurve, 0.4*(k.BoundaryCurve.ParEnd + k.BoundaryCurve.ParStart)));
            AddPortToShape(l, ports);
            AddPortToShape(a, ports);
            AddPortToShape(b, ports);
            AddPortToShape(d, ports);
            AddPortToShape(e, ports);
            AddPortToShape(h, ports);
            AddPortToShape(g, ports);
            var hSecondPort = new CurvePort(h.BoundaryCurve, 0.1);

            ports[h].Insert(hSecondPort);
            var hFreePort = new FloatingPort(null, new Point(-129, -55));
            var kFreePort = new FloatingPort(null, new Point(137, -51));
            ports[h].Insert(hFreePort);
            ports[k].Insert(kFreePort);

            var fFreePort = new FloatingPort(null, new Point(3, 3));
            var kFreePort0 = new FloatingPort(null, new Point(106, 8));
            AddPortToShape(f,ports, fFreePort);
            AddPortToShape(k, ports, kFreePort0);

            AddPortToShape(c,ports,new CurvePort(c.BoundaryCurve, 0));
            AddPortToShape(f, ports,new FloatingPort(f.BoundaryCurve, f.BoundingBox.Center));
            var freePort0 = new FloatingPort(null, new Point(72, -1.3));

            var halfFreeEdge = new EdgeGeometry(freePort0, ports[a].First());
            var freePort1 = new FloatingPort(null, new Point(-122, 110));
            var freeEdge = new EdgeGeometry(freePort0, freePort1);
            var ab = new EdgeGeometry(ports[a].First(), ports[b].First());
            var abE = new Edge(a, b) {EdgeGeometry = ab};
            var ae = new EdgeGeometry(ports[a].First(), ports[e].First());
            var aeE = new Edge(a, e) {EdgeGeometry = ae};
            var de = new EdgeGeometry(ports[d].First(), ports[e].First());
            var deE = new Edge(d, e) {EdgeGeometry = de};
            var ad = new EdgeGeometry(ports[a].First(), ports[d].First());
            var adE = new Edge(a, d) {EdgeGeometry = ad};
            var he = new EdgeGeometry(ports[h].First(), ports[e].First());
            var heE = new Edge(h, e) {EdgeGeometry = he};
            var gd = new EdgeGeometry(ports[g].First(), ports[d].First());
            var gdE = new Edge(g, d) {EdgeGeometry = gd};
            var lg = new EdgeGeometry(ports[l].First(), ports[g].First());
            var lgE = new Edge(l, g) {EdgeGeometry = lg};
            var le = new EdgeGeometry(ports[l].First(), ports[e].First());
            var leE = new Edge(l, e) {EdgeGeometry = le};
            var ca = new EdgeGeometry(ports[c].First(), ports[a].First());
            var caE = new Edge(c, a) {EdgeGeometry = ca};
            var cd = new EdgeGeometry(ports[c].First(), ports[d].First());
            var cdE = new Edge(c, d) {EdgeGeometry = cd};
            var hl = new EdgeGeometry(hSecondPort, ports[l].First());
            var hlE = new Edge(h, l) {EdgeGeometry = hl};
            var lh = new EdgeGeometry(ports[l].First(), hSecondPort);
            var lhE = new Edge(l, h) {EdgeGeometry = lh};
            var ha = new EdgeGeometry(hSecondPort, ports[a].First());
            var haE = new Edge(h, a) {EdgeGeometry = ha};
            var hk = new EdgeGeometry(hSecondPort, ports[k].First());
            var hkE = new Edge(h, k) {EdgeGeometry = hk};

            var hk0 = new EdgeGeometry(hFreePort, kFreePort);
            var hk0E = new Edge(h, k) {EdgeGeometry = hk0};

            var fk = new EdgeGeometry(fFreePort, kFreePort0);
            var fkE = new Edge(f, k) {EdgeGeometry = fk};

            var hThirdPort = new CurvePort(h.BoundaryCurve, 0.5);
            var halfFreeInside = new EdgeGeometry(ports[b].First(), freePort1);
            //var halfFreeInside = new Edge(b, d) { EdgeGeometry = ad };

            ports[h].Insert(hThirdPort);
            var lSecondPort = new CurvePort(l.BoundaryCurve, 0);
            ports[l].Insert(lSecondPort);
            var hThirdLSecond = new EdgeGeometry(hThirdPort, lSecondPort);
            var hThirdLSecondE = new Edge(h, l) {EdgeGeometry = hThirdLSecond};
            //            return new[] {
            //                             /*halfFreeInside, freeEdge,*/ halfFreeEdge, lh
            //                         };
            return new[] {
                             lhE, abE, aeE, deE, adE, heE, gdE, lgE, leE, cdE, hlE,
                             hThirdLSecondE, caE, haE, hkE, hk0E, fkE
                         };
        }
 bool InsideOfTheAllowedConeOfBoundaryPort(Point pointToTest, CurvePort port) {
     ICurve boundaryCurve = port.Curve;
     bool curveIsClockwise = InteractiveObstacleCalculator.CurveIsClockwise(boundaryCurve,
                                                                            PointInsideOfConvexCurve(
                                                                                boundaryCurve));
     Point portLocation = port.Location;
     Point pointOnTheRightConeSide = GetPointOnTheRightBoundaryPortConeSide(portLocation, boundaryCurve,
                                                                            curveIsClockwise, port.Parameter);
     Point pointOnTheLeftConeSide = GetPointOnTheLeftBoundaryPortConeSide(portLocation, boundaryCurve,
                                                                          curveIsClockwise, port.Parameter);
     return Point.GetTriangleOrientation(portLocation, pointOnTheRightConeSide, pointToTest) !=
            TriangleOrientation.Clockwise &&
            Point.GetTriangleOrientation(portLocation, pointToTest, pointOnTheLeftConeSide) !=
            TriangleOrientation.Clockwise;
 }