如何为控制系统图定位带点的元素?

How position elements with dot for a control system diagram?

我想控制以下示例中某些元素的定位:

digraph {
        graph [splines=ortho];

        /* Node customization. */
        node [shape=box];
        join [shape=point];
        set [label="set\npoint"];

        /* Define node levels; driving elements on top, feed back below. */
        { rank = min; set; PID; P1; P2; join; OUT;}
        { rank = max; M1;}

        /* Edges */
        set -> PID -> P1 -> P2;
        P2-> join [arrowhead=none];
        join -> {OUT; M1};
        PID -> M1 [dir=back];
}

  1. 如果我向 M1 等级添加更多元素,则边连接到随机点(north/top 边)。我想让它们水平连接。这可以做到吗?
  2. 如何增加 PID/P1/P2 之间的间距(边长) ?
  3. 最好将P1/M1垂直对齐。这可以做到吗?
  4. 传统控制系统图没有join节点,一条边从另一条边出来。这可能吗? 我为此删除了箭头。

也许有些问题是无关紧要的,因为适当定位一个问题会使其他问题自然发生。

  1. 一般可以通过headport属性来控制箭头进入节点的点。但是对于 ortho 样条曲线,这很少起作用。正交样条有自己的生命,会导致各种不同的问题,包括边缘标签消失。所以你的第一个问题没有确定的答案,具体情况要具体处理。

  2. 您可以通过设置 nodesep 图形属性来增加 所有 节点之间的距离。但是如果你只需要增加特定节点之间的距离,你可以使用一个技巧:为值添加一个带有大量空格的标签。

  3. 你可以用不可见的边缘来完成它。

第 2 点和第 3 点在下面的编辑示例中进行了说明:

digraph {
        graph [splines=ortho];

        /* Node customization. */
        node [shape=box];
        join [shape=point];
        set [label="set\npoint"];

        /* Define node levels; driving elements on top, feed back below. */
        { rank = min; set; PID; P1; P2; join; OUT;}
        { rank = max; M1;}

        /* Edges */
        set -> PID;
        P2-> join [arrowhead=none];
        join -> {OUT; M1}
        PID -> M1 [dir=back];


        PID -> P1 -> P2 [label="               "] /* #2 increase space between specific nodes */
        P1 -> M1 [style=invis] /* #3 align P1 an M1 */
}

结果: