首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mxGraph直线平行边?

mxGraph直线平行边?
EN

Stack Overflow用户
提问于 2020-04-03 22:07:05
回答 1查看 130关注 0票数 0

对此有什么解决方案吗?我们需要并行的边,但不是ParallelEdgeLayout实现的方式。

我试着重写平行布局的布局函数来移动边,但是边没有可用的几何: x,y,width,height都是0。我不能把它们移到任何地方。

尝试使用setStyle,但未执行任何操作:

代码语言:javascript
复制
var s = model.getStyle(parallels[i]) + 'entryX='+x0+';exitX='+x0+';'
console.log(s)
model.setStyle(parallels[i], s);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-06 22:14:16

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

代码语言:javascript
复制
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);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61013700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档