如何使 mxCompactTreeLayout 从右到左?反转不工作

How to make mxCompactTreeLayout right to left? invert not working

更新#1:

这里有一些新的线索,看起来invert只是交换了sourcetarget的边,但没有改变树的方向。

交换root和v1的效果和set invert to true

是一样的
const root = graph.insertVertex(parent, 'root', 'Root', 0, 0, 60, 40);

const v1 = graph.insertVertex(parent, 'child-2', 'Child 1', 0, 0, 60, 40);

graph.insertEdge(parent, null, null, root, v1);

const v2 = graph.insertVertex(parent, 'child-1', 'Child 2', 0, 0, 60, 40);

graph.insertEdge(parent, null, null, root, v2);

新演示:https://codepen.io/hungtcs/pen/eYpRGNg

有没有办法改变树的方向(从右到左)?


来源:

我想创建一个从右到左的紧凑树布局,最后我找到了 mxCompactTreeLayoutinverted 变量,但是它不起作用,我的 live demo

mxCompactTreeLayout.invert Specifies if edge directions should be inverted

这是inverted为false的情况

inverted为真时是这样的,布局被破坏

我认为开箱即用是不可能的,但如果您更改 mxCompactTreeLayout 的一些内部结构,它可能会起作用:

有这个attachParent函数:

mxCompactTreeLayout.prototype.attachParent = function(node, height)
{
    var x = this.nodeDistance + this.levelDistance;
    var y2 = (height - node.width) / 2 - this.nodeDistance;
    var y1 = y2 + node.width + 2 * this.nodeDistance - height;

    node.child.offsetX = x + node.height;
    node.child.offsetY = y1;

    node.contour.upperHead = this.createLine(node.height, 0,
        this.createLine(x, y1, node.contour.upperHead));
    node.contour.lowerHead = this.createLine(node.height, 0,
        this.createLine(x, y2, node.contour.lowerHead));
};

不知道为什么 offsetX 取决于高度,但是如果您将那个赋值更改为 -(x + node.height),您的示例将如下所示:

只需添加:

layout.attachParent = function(node, height)
{
    var x = this.nodeDistance + this.levelDistance;
    var y2 = (height - node.width) / 2 - this.nodeDistance;
    var y1 = y2 + node.width + 2 * this.nodeDistance - height;

    node.child.offsetX = -(x + node.height);
    node.child.offsetY = y1;

    node.contour.upperHead = this.createLine(node.height, 0,
        this.createLine(x, y1, node.contour.upperHead));
    node.contour.lowerHead = this.createLine(node.height, 0,
        this.createLine(x, y2, node.contour.lowerHead));
};

或检查示例https://codepen.io/godric3/pen/rNOwRxK