Antv X6中的markup和attr是如何配合使用的

  • markup的定义是:指定了渲染节点/边时使用的 SVG/HTML 片段,我理解就是页面上当前的节点或者边都有哪几个部分,比如我们最常用的矩形rect,我们能看到的就是一个矩形和里面的文字,而markup的默认也是只有这两个 ,所以Shape.Rect 后的markup是这样

  {
    markup: [
      // 这部分代表矩形
      {
        tagName: 'rect',
        selector: 'body',
      }, 
      // 这部分代表文字
      {
        tagName: 'text',
        selector: 'label',
      },
    ],
  }
  • attrs 选项定制节点样式,我认为其实attrs改的就是markup中的几部分,我们默认的写法里面有body和label,正好对应markup的两部分,我们既能使用tagName,也能使用selector,都能生效
  •   attrs: { 
          body: {
            fill: '#2ECC71',
            stroke: '#000',
          },
          label: {
            text: 'rect',
            fill: '#333',
            fontSize: 13,
          },
        }
    

一般情况下,我们建一个新矩形节点是这样的,如果没有特殊增加或者减少markup,markup基本都默认不写

  • 下面这是不隐藏markup的写法
  •   const rect = graph.addNode({
        shape: 'rect', // 指定使用何种图形,默认值为 'rect'
        x: 100,
        y: 200,
        width: 80,
        height: 40,
        angle: 30,
        markup: [
          {
            tagName: 'rect',
            selector: 'body',
          }, 
          {
            tagName: 'text',
            selector: 'label',
          },
        ],
        attrs: {
          body: {
            fill: 'blue',
          },
          label: {
            text: 'Hello',
            fill: 'white',
          },
        },
      })
    

  • 如果新增markup时,记得连默认的也写上,不然就会当成删除了默认的 

 举例

  • 比如我要实现一个两点之间连线,然后有一个点一直匀速移动
  • 首先新增两个点,然后连线,然后线中图中多了一个圆,创建过程就先不写了,按照官网写法就行了

  • 我们可以先获取到这个线,在线的markup上新增一个圆

  •   const edge = graph.addEdge({
          shape: 'edge', // 指定使用何种图形,默认值为 'edge'
          id: '1001',
          source: ball,
          target: ball1,
          markup: [
              {
                  "tagName": "path",
                  "selector": "wrap",
                  "groupSelector": "lines",
                  "attrs": {
                      "fill": "none",
                      "cursor": "pointer",
                      "stroke": "transparent",
                      "strokeLinecap": "round"
                  }
              },
              {
                  "tagName": "path",
                  "selector": "line",
                  "groupSelector": "lines",
                  "attrs": {
                      "fill": "none",
                      "pointerEvents": "none"
                  }
              },
              //上面两个是边的默认的markup,这个是我们新增的,而"tagName": "circle",也是默认的写法,
      证明我们新增的节点是一个圆。而selector的名字则是随便取的
              {
                  "tagName": "circle",
                  "selector": "ceshi"
              }
          ],
          attrs: {
           //attr和markup是配合使用的一一对应,只有markup或者attrs圆都是出不来的,
      使用markup创建出来圆的html,attrs给其加上样式,圆才能出来
              "lines": {
                  "connection": true,
                  "strokeLinejoin": "round"
              },
              "wrap": {
                  "strokeWidth": 10
              },
              "line": {
                  "stroke": "#333",
                  "strokeWidth": 2,
                  "targetMarker": "classic"
              },
              //我们新增了一个圆,这里设置样式
              "circle": {
                  "r": 5,
                  "fill": "#00FFFF",
                  // atConnectionRatio表示将指定元素移动到指定比例 [0, 1] 位置处,可以去官网上搜索
                  "atConnectionRatio": 0,
                  "refCy": -10
              }
          }
      })
      接下来我们将atConnectionRatio从0变成1就实现了匀速运动,我们使用动画,
      不过这是动画只运行一次的代码,如果想要循环一直运行,需要将动画运行完再次运行,循环进行
      edge1.transition(
      'attrs/circle/atConnectionRatio', 
      1, 
      {delay: 0, // 等待时间   duration: 3000}
      )
    

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用AntV X6的人工智能建模DAG图需要以下步骤: 1. 安装AntV X6库 可以使用npm进行安装,命令如下: ``` npm install @antv/x6 --save ``` 2. 创建画布 使用X6创建一个画布,将其添加到页面。代码如下: ```javascript import { Graph } from '@antv/x6'; const graph = new Graph({ container: document.getElementById('container'), width: 800, height: 600 }); ``` 3. 创建节点 使用X6创建一个节点,并设置其参数。代码如下: ```javascript const node = graph.addNode({ x: 40, y: 40, width: 80, height: 40, label: 'AI', shape: 'rect', attrs: { body: { rx: 5, ry: 5, fill: '#a0d911', stroke: '#096dd9', strokeWidth: 1, }, label: { textAnchor: 'left', refX: 10, fill: '#fff', fontSize: 14, fontFamily: 'Microsoft YaHei', }, }, }); ``` 4. 创建连线 使用X6创建两个节点之间的连线。需要设置起点、终点、样式等参数。代码如下: ```javascript const edge = graph.addEdge({ source: { cell: node1 }, target: { cell: node2 }, attrs: { line: { stroke: '#1890ff', strokeWidth: 1, targetMarker: { name: 'classic', size: 8, }, }, }, }); ``` 5. 添加交互 可以使用X6添加节点、连线的拖动、缩放等交互。代码如下: ```javascript graph.addNodeTool('my-custom-tool', MyCustomTool); graph.addEdgeTool('my-custom-tool', MyCustomTool); graph.bindKey('backspace', () => { const cells = graph.getSelectedCells(); if (cells.length) { graph.removeCells(cells); } }); graph.on('node:click', ({ e, x, y, node }) => { console.log(`click on node: ${node.id}`); }); ``` 以上就是使用AntV X6库创建人工智能建模DAG图的基本步骤。需要根据实际需求进行调整和完善。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值