mxGraph 直线平行边?

mxGraph straight parallel edges?

有什么解决办法吗?我们需要平行边,但不是 ParallelEdgeLayout 的方式。

我试图重写平行布局的布局函数来移动边缘,但是边缘没有可用的几何图形:x,y,宽度,高度都是0。我无法移动它们到任何地方。

尝试使用 setStyle,但没有做任何事情:

var s = model.getStyle(parallels[i]) + 'entryX='+x0+';exitX='+x0+';'
console.log(s)
model.setStyle(parallels[i], s);

天呐!这是一个解决方案。不是梦想的边缘,但几乎......也许有更漂亮的解决方案(post 一个),但这是我的,用于显示真正的平行边缘:

var spx = 1 / 22;
var spy = 1 / 8;

var x0 = 0.5;
var y0 = 0.5;

for (var i = 0; i < parallels.length; i++) {
    var source = view.getVisibleTerminal(parallels[i], true);
    var target = view.getVisibleTerminal(parallels[i], false);

    var src = model.getGeometry(source);
    var trg = model.getGeometry(target);

    var srcx = src.x, srcy = src.y, trgx = trg.x, trgy = trg.y;

    if (parallels[i].getParent() != source.getParent()) {
        var pGeo = model.getGeometry(source.getParent());
        srcx = src.x + pGeo.x;
        srcy = src.y + pGeo.y;
    }

    if (parallels[i].getParent() != target.getParent()) {
        var pGeo = model.getGeometry(target.getParent());
        trgx = trg.x + pGeo.x;
        trgy = trg.y + pGeo.y;
    }

    var scx = srcx + src.width; // source element right
    var scy = srcy + src.height; // source element bottom

    var tcx = trgx + trg.width; // target element right
    var tcy = trgy + trg.height; // target element bottom

    var dx = tcx - scx; // len x
    var dy = tcy - scy; // len y

    var sourcePointX, sourcePointY, targetPointX, targetPointY;
    if (Math.abs(dx) > Math.abs(dy)) { // horizontal 
        sourcePointY = y0;
        targetPointY = y0;
        if (srcx < trgx) { // left to right
            sourcePointX = 1;
            targetPointX = 0;
        } else {
            sourcePointX = 0;
            targetPointX = 1;
        }
    } else {
        sourcePointX = x0;
        targetPointX = x0;
        if (srcy < trgy) { // top to bottom
            sourcePointY = 1;
            targetPointY = 0;
        } else {
            sourcePointY = 0;
            targetPointY = 1;
        }
    }

    this.graph.setConnectionConstraint(parallels[i], parallels[i].source, true, new mxConnectionConstraint(new mxPoint(sourcePointX, sourcePointY), true));
    this.graph.setConnectionConstraint(parallels[i], parallels[i].target, false, new mxConnectionConstraint(new mxPoint(targetPointX, targetPointY), true));

    if (i % 2) {
        x0 += spx * (i + 1);
        y0 += spy * (i + 1);
    } else {
        x0 -= spx * (i + 1);
        y0 -= spy * (i + 1);
    }
}