mxGraph прямые параллельные края? - PullRequest
0 голосов
/ 03 апреля 2020

Есть ли решение для этого? Нам нужны параллельные ребра, но не так, как это делает ParallelEdgeLayout.

enter image description here

Я пытался переписать функцию макета параллельного макета, чтобы переместить края, но у краев нет используемой геометрии: x, y, ширина, высота 0. Я не мог их никуда переместить.

Пытался использовать setStyle, но ничего не делал:

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

1 Ответ

0 голосов
/ 06 апреля 2020

Боже мой! Вот решение. Не края мечты, но почти ... Может быть, есть более красивые решения (пост один), но это мое для того, чтобы показать реальные параллельные края:

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);
    }
}
...