исходный / целевой порт ребра не работают правильно - PullRequest
0 голосов
/ 13 апреля 2020

Я опубликовал это на форуме MSAGL (Microsoft Automati c Graphi c Layout), но он кажется старым. Я использую только DLL компоновки, а не DLL для рисования, потому что я хочу использовать только возможность компоновки пакета автоматизированного c и рисовать самостоятельно, используя собственные возможности graphi c (в будущем это будет заменено третьим сторонний механизм рисования).

Я использую макет Sugiyama с прямолинейной маршрутизацией кромок (RER).

Кроме того, поскольку компоновка Sugiyama размещает узел снизу вверх> и так как я хотел слева - > Правильно, я применил PlaneTransformation в layoutsettings, чтобы повернуть макет на 90 градусов по часовой стрелке, чтобы нижняя часть стала левой, а верхняя - правой. Ниже приведен код:

var settings = new SugiyamaLayoutSettings {
        Transformation = PlaneTransformation.Rotation(Math.PI / 2),
        EdgeRoutingSettings = { EdgeRoutingMode = EdgeRoutingMode.Rectilinear },
};

Я хочу подключить узел A к узлу B, и каждый узел представляет собой прямоугольник. Я специально хочу, чтобы исходный порт края исходил от нижней границы A. Я соответственно устанавливаю исходный и целевой порты следующим образом

    Node n1 = graph.FindNodeByUserData("A");
    Node n2 = graph.FindNodeByUserData("B");
    Edge myedge = new Edge(n1, n2);
    Microsoft.Msagl.Core.Geometry.Rectangle rect= n1.BoundingBox;
    double midx = rect.LeftBottom.X + (rect.Width/ 2); //find the midpoint of the bottom edge of the rect
    double midy = rect.LeftBottom.Y;
    Microsoft.Msagl.Core.Geometry.Point P=new Microsoft.Msagl.Core.Geometry.Point(midx,midy);
    myedge.SourcePort = new FloatingPort(n1.BoundaryCurve,P); //assign the port to the rectangle's boundary curve at point P
    myedge.TargetPort = new FloatingPort(n2.BoundaryCurve, n2.Center);
    graph.Edges.Add(myedge);

Однако край не появляется там, где это необходимо.

Вы можете мне здесь помочь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...