gojs实现节点只允许一个上级节点指向自己

需求:

    存在节点:  节点A,节点B,节点C      (其中A,B是上一级节点,C是下一级节点)

    原来的逻辑:gojs默认情况下是节点A和节点B都可以指向节点C,且可以同时指向节点C。

    我想要的结果:节点C只能被节点A或节点B指向。

    话不多比,上代码:

// 定义链接数据模型
myDiagram.linkTemplate =
  goObj(go.Link,
    { routing: go.Link.Orthogonal, corner: 5 },
    goObj(go.Shape, { stroke: "gray", strokeWidth: 2 })
  );

// 约束条件:一个节点只能连接到另一个节点
myDiagram.toolManager.linkingTool.linkValidation = (fromNode, fromPort, toNode, toPort) => {
  //toNode.linksConnected.count 是你这个节点有几条连接线,指和被指都算
  if (toNode && toNode.linksConnected.count > 0) {
    // 当目标节点已连接时,不允许链接
    return false;
  }
  return true;
};

注意:通过上边这种逻辑限制的是只能有一个对外链接的线,进出都算,而且所有的节点都会被限制,不太对,得改。

改进:

在此基础上在做一层限制

只有在某一种节点才会限制对外连接的线。

使用的时判断toNode.Vd.className

// 定义链接数据模型
myDiagram.linkTemplate =
  goObj(go.Link,
    { routing: go.Link.Orthogonal, corner: 5 },
    goObj(go.Shape, { stroke: "gray", strokeWidth: 2 })
  );

// 约束条件:一个节点只能连接到另一个节点
myDiagram.toolManager.linkingTool.linkValidation = (fromNode, fromPort, toNode, toPort) => {
  //toNode.linksConnected.count 是你这个节点有几条连接线,指和被指都算
  if (toNode && toNode.linksConnected.count > 0 && toNode.Vd.className = '你要限制节点的标识') {
    // 当目标节点已连接时,不允许链接
    return false;
  }
  return true;
};

把这个加上就可以单独限制某一个节点了。至于原理emmmm

 话不多比,结束。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值