g6学习笔记二(元素)

g6提供了提供了图的绘制、布局、分析、交互、动画等基础的图可视化能力。

元素 :节点、边、节点分组 Combo, 元素属性 :样式属性、其他属性

每一个元素是一个 item 实例,而实例中的数据模型 model 定义了该元素的样式、配置

1.数据结构(配置项)

元素共有数据结构(配置项)(id,style,type,label,labelCfg)

  节点的数据结构 (配置项)

{
  //继承元素属性

  id: 'node0',          // 元素的 id
  type: 'circle',       // 元素的图形
  style: {              // 元素样式
    fill: '#000',       // 样式属性,元素的填充色
    stroke: '#888',     // 样式属性,元素的描边色
    // ...              // 其他样式属性
  },
  label: 'node0'        // 标签文字
  labelCfg: {           // 标签文字配置属性
    positions: 'center',// 标签文字在元素中的位置
    style: {            // 标签文字样式
      fontSize: 12      
      // ...            
    }
  },

  //节点私有属性

  x: '',                //x 坐标
  y: '',                //y 坐标
  size: 40,             // 元素的大小
              

}

  边的数据结构(配置项)

与节点的数据结构相似,添加source和target字段,代表起始和终止节点的 id。

{
  //继承元素属性

  id: 'edge0',          // 边的 id
  type: 'line',         // 边的图形
  style: {              // 边样式             
  },
  label: 'node0'        // 边文字
  labelCfg: {           // 文字配置属性
    positions: 'center',
    style: {            
      fontSize: 12      
      // ...            
    }
  },

  //边私有属性

  source: '',           //起始点 id 
  target: '',           //结束点 id 
  sourceAnchor: '',     //边的起始节点上的锚点的索引值。
  targetAnchor: ''        //边的终止节点上的锚点的索引值。
}

  combo的数据结构(配置项)

{
  //继承元素属性

  id: 'node0',          // 元素的 id
  type: 'circle',       // 元素的图形
  style: {              // 元素样式
    fill: '#000',       // 样式属性,元素的填充色
    stroke: '#888',     // 样式属性,元素的描边色
    // ...              // 其他样式属性
  },
  label: 'node0'        // 标签文字
  labelCfg: {           // 标签文字配置属性
    positions: 'center',// 标签文字在元素中的位置
    style: {            // 标签文字样式
      fontSize: 12      
      // ...            
    }
  },

  //Combo私有属性

  parentId: '',         //该 Combo 的父 Combo 的 ID
  size: '',             //Combo 的最小大小
  padding: ''           //该 Combo 内边距。     

}

2.实例方法

元素的方法大致分为元素的更新、销毁、通用、状态, 每一个元素是一个 item 实例

更新

item.update(model)     

根据元素数据项,更新元素,model就是元素的数据结构(配置项)

item.refresh()         

刷新元素,包括更新元素位置,更新元素样式,清除之前的缓存。

item.updatePosition(cfg)       

更新元素位置,避免整体重新绘制。更新xy

销毁

item.destroy()         

销毁元素,主要包括停止动画、删除 group 中的所有元素、清空配置项、设置 destroyed 为 true 等操作。

通用

item.getBBox()

获取元素的包围盒。包括x,y,width,height,centerX,centerY

item.getContainer()

获取元素的容器。

item.getKeyShape()

获取元素的关键形状,用于计算节点大小、连线截距等。

item.getModel()

获取元素的数据模型。

item.getType()

获取元素类型,如‘node’或‘edge’

item.enableCapture(enable)

是否拾取及触发该元素的交互事件。  enable为布尔型,是否允许元素响应事件

item.clearCache()

更新或刷新等操作后,清除缓存。

状态

item.show() 

只显示元素本身,若想显示相关边调用graph.showItem(item)

item.hide()

只隐藏元素本身,若想显示相关边调用graph.hideItem(item)

item.changeVisibility(visible)

更改元素是否显示。visible为布尔值

item.isVisible()

查询元素显示状态。

item.toFront()

将元素的层级设置到最上层

item.toBack()

将元素的层级设置到最下层

item.setState(state, enable)

更新元素的状态。state为元素状态名,enable为是否启用

item.clearStates(states)

清除指定的状态,如果不传 states ,则默认清除第一个状态

item.getStates()

获取当前元素的所有状态

item.hasState(state)

判断元素是否具有某种指定的状态。

item.getStateStyle(state)

获取元素指定状态的样式

item.getOriginStyle()

获取元素 keyShape 的样式。

item.getCurrentStatesStyle()

获取当前元素的所有状态的样式。

node实例方法

Node 继承自 Item,上面元素的实例方法都可以调用,除此之外,node私有实例

node.lock()

锁定当前节点,不再响应拖动节点

node.unlock()

解锁锁定的节点。

node.hasLocked()

检测节点是否处于锁定状态。

node.getNeighbors(type)

type为'source' / 'target' / undefined,获取邻居节点

node.getEdges()

获取与当前节点有关联的所有边。

node.getInEdges()

获取与当前节点关联的所有入边。

node.getOutEdges()

获取与当前节点关联的所有出边。

node.getAnchorPoints()

获取节点上面定义的锚点。

node.getLinkPoint(point)

获取距离指定坐标最近的一个锚点。

node.getLinkPointByAnchor(index)

根据锚点索引获取连接点的 x、y 坐标。

node.addEdge(edge)

添加指定的边到当前节点上。

node.removeEdge(edge)

移除与当前节点相关的指定边。

edge实例方法

edge 继承自 Item,上面元素的实例方法都可以调用,除此之外,edge私有实例

edge.setSource(source)

设置边的起始节点。source类型为node

edge.setTarget(target)

设置边的终止节点。target类型为node

edge.getSource()

获取当前边的起始节点。

edge.getTarget()

获取当前边的终止节点。

combo实例方法

Combo 继承自 Node,具有 Node 的所有特性。,除此之外,Combo 私有实例

combo.getChildren()

获取 Combo 中所有的子元素

combo. getNodes() 

获取 Combo 中所有子节点。

combo. getCombos()

 获取 Combo 中所有子 combo。

combo. addChild(item: INode | ICombo)  

向 Combo 中添加子 Node 或子 Combo。参数为节点 ID 或节点实例

combo. addNode(node: string | INode)  

向 combo 中添加节点。

combo. addCombo(combo: ICombo)

向 combo 中添加 combo。

combo. removeChild(item: ICombo | INode)

移除子元素(子节点或子 combo)

combo. removeCombo(combo: ICombo)

移除指定的子 combo

combo. removeNode(node: INode)

移除指定的子 Node

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我理解了你的问题。针对你的问题,我可以给出以下的解答: 首先,我们需要明确一下什么是 Ant G6 和 Combo。Ant G6 是一个基于 G6 开发的图可视化引擎,而 Combo 则是 G6 中的一种元素类型,它可以将多个节点组合成一个整体。 在 Ant G6 中,我们可以通过监听节点的点击事件来为节点添加 Combo。具体的实现步骤如下: 1. 在初始化 G6 图实例时,需要开启 Combo 功能: ```javascript const graph = new G6.Graph({ container: 'container', ... enabledCombo: true, ... }); ``` 2. 监听节点的 click 事件: ```javascript graph.on('node:click', (evt) => { const { item } = evt; const model = item.getModel(); const comboId = `combo-${model.id}`; // 判断该节点是否已经被包含在某个 Combo 中 const comboItem = graph.findById(comboId); if (comboItem) { // 如果已经被包含,则将节点从 Combo 中移除 graph.updateCombo(comboId, [item]); } else { // 如果未被包含,则创建一个新的 Combo 并将节点加入其中 graph.createCombo({ id: comboId, padding: 10, children: [item], }); } }); ``` 在上面的代码中,我们首先获取到被点击的节点的 model,然后根据节点的 id 创建一个对应的 Combo id。接着,我们在图中查找是否已经存在该 Combo,如果存在,则将该节点从 Combo 中移除;如果不存在,则创建一个新的 Combo 并将该节点加入其中。 以上就是通过点击事件为节点添加 Combo 的具体步骤。希望这个回答能够帮到你!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值