关于Jtopo图连线重合问题

主要原因是因为 jtopo 4.8源码里面有一个地方连线判断错了,把那个源码改了就好。

先看看效果
在这里插入图片描述
网上也有类似的,但是下载需要收费,最后终于在github上看到了一个
https://github.com/wenyuan/jtopo_topology

/*
 如果存在点之间存在多条线 那么每条线应该相互之间有间距
 TODO 调整 原代码 在2个点之间有连续的环形线(A_Z,Z_A...)会产生计算不正确的BUG
 因为A_Z会进行一次paint紧接着Z_A也会进行一次,虽然正确的计算出了偏移量,但是角度确是计算相反了
 所以当f为负数时 应该交换 b与c的坐标
 */
// 获得线的路线 返回 顶点按顺序排列的坐标数组
this.getPath = function () {
    var a = [], b = this.getStartPosition(), c = this.getEndPosition();
    if (this.nodeA === this.nodeZ)
        return [b, c];
    var d = e(this.nodeA, this.nodeZ);//点之间的线的条数
    if (1 >= d) return [b, c];
    var f = Math.atan2(c.y - b.y, c.x - b.x);//计算线的角度系数
    //发出点的拐点坐标
    var g = {
            x: b.x + this.bundleOffset * Math.cos(f),//半径(斜边)* Math.cos(f) = 偏移横坐标  + b.x = 发出点的拐点横坐标
            y: b.y + this.bundleOffset * Math.sin(f)//半径(斜边)*Math.sin(f) = 偏移纵坐标   + b.y = 发出点的拐点横坐标
        },
        //终止点的拐点坐标
        h = {
            x: c.x + this.bundleOffset * Math.cos(f - Math.PI),//由于-PI 所以角度相反
            y: c.y + this.bundleOffset * Math.sin(f - Math.PI)//由于-PI 所以角度相反
        },
        i = f - Math.PI / 2,
        j = f - Math.PI / 2;
    var k = (d - 1) * this.bundleGap / 2,
        l = this.bundleGap * this.nodeIndex,
        m = {
            x: g.x + l * Math.cos(i),
            y: g.y + l * Math.sin(i)
        },
        n = {
            x: h.x + l * Math.cos(j),
            y: h.y + l * Math.sin(j)
        };
    m = {
        x: m.x + k * Math.cos(i - Math.PI),
        y: m.y + k * Math.sin(i - Math.PI)
    },
        n = {
            x: n.x + k * Math.cos(j - Math.PI),
            y: n.y + k * Math.sin(j - Math.PI)
        };

    var ft = Math.atan2(b.y - c.y, b.x - c.x);
    var it = ft - Math.PI / 2;
    var jt = ft - Math.PI / 2;
    var temp1x = c.x + this.bundleOffset * Math.cos(ft) + l * Math.cos(it) + k * Math.cos(it - Math.PI);
    var temp1y = c.y + this.bundleOffset * Math.sin(ft) + l * Math.sin(it) + k * Math.sin(it - Math.PI);
    var temp2x = b.x + this.bundleOffset * Math.cos(f) + l * Math.cos(jt) + k * Math.cos(jt - Math.PI);
    var temp2y = b.y + this.bundleOffset * Math.sin(f) + l * Math.sin(jt) + k * Math.sin(jt - Math.PI);
    a.push({x: b.x, y: b.y});
    if ((i * f > 0) && i < 0) {
        a.push({x: m.x, y: m.y});
        a.push({x: n.x, y: n.y});
    } else {
        a.push({x: temp2x, y: temp2y});
        a.push({x: temp1x, y: temp1y});
    }
    a.push({x: c.x, y: c.y});
    return a
},

最主要的是这段代码
在源码中找到这个方法,将我这个方法替换成源码中的那个方法就OK了

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值