会用这些的api,轻松绘制流程图——antv.g6流程图入门(一)

举报
一枚搬砖工 发表于 2021/08/09 09:44:44 2021/08/09
【摘要】 G6 是一个图可视化引擎。它提供了图的绘制、布局、分析、交互、动画等图可视化的基础能力。本文介绍了通过G6实现流程图绘制的常用方法。

常用graph属性和方法

graph属性

container

height

width

modes

属性 类型 描述
container string 放置canvas的div的id
height number 高度
width number 宽带
modes object 模式
graph = new G6.Graph({
    container: "container",
    height: 500,
    width: 500,
    modes: {
        default: [
            "drag-canvas",
            "hover-node",
            "select-node",
            "hover-edge",
            "keyboard",
            "customer-events"
        ],
        addEdge: ["add-edge"],
        moveNode: ["drag-item"]
    },
     renderer: 'svg'
     plugins: [grid]
});

graph方法

初始化数据

data(data)

const data = {
  nodes: [
    {
      id: 'node1',
      label: 'node1',
    },
    {
      id: 'node2',
      label: 'node2',
    },
  ],
  edges: [
    {
      source: 'node1',
      target: 'node2',
    },
  ],
};

// graph 是 Graph 的实例
graph.data(data);

节点和边的增删改查

add(type,model)

新增元素(节点和边)

如果是自定义节点或者边type为自定义节点或者边的名称

addItem(type, model, stack)

新增元素(节点和边)

名称 类型 是否必选 描述
type string true 元素类型,可选值为 ‘node’、‘edge’
model Object true 元素的数据模型,具体内容参见元素配置项。
stack boolean false 操作是否入 undo & redo 栈,当实例化 Graph 时设置 enableStack 为 true 时,默认情况下会自动入栈,入栈以后,就支持 undo & redo 操作,如果不需要,则设置该参数为 false 即可
this.edge = this.graph.addItem('edge', {
	source: item,
	target: item,
	start: startPoint,
	end: startPoint,
	type: 'link-edge'
});

remove(node/edge)

移除节点或边

const node = this.graph.findById(item.id)
this.graph.remove(node)

removeItem(item, stack)

删除元素,当 item 为 group ID 时候,则删除分组

名称 类型 是否必选 描述
item string / Object true 元素 ID 或元素实例
stack boolean false 操作是否入 undo & redo 栈,当实例化 Graph 时设置 enableStack 为 true 时,默认情况下会自动入栈,入栈以后,就支持 undo & redo 操作,如果不需要,则设置该参数为 false 即可
// 通过 ID 查询节点实例
const item = graph.findById('node');
graph.removeItem(item);

// 该操作不会进入到 undo & redo 栈,即 redo & undo 操作会忽略该操作
graph.removeItem(item, false);
//删除边
graph.removeItem(edge)

update(node/edge,nodeModel/edgeModel)

更新某个节点或者边的属性

参数 配置
node/edge node节点对象或者边节点对象
nodeModel/edgeModel model配置
graph.update(node, {name:1});
graph.update(edge, {name:1});

updateItem(item, model, stack)

更新元素,包括更新数据、样式等。若图上有 combo,使用该函数更新一个节点位置后,需要调用 updateCombo(combo) 以更新相关 combo 的位置。

名称 类型 是否必选 描述
item string / Object true 元素 ID 或元素实例
cfg Object false 需要更新的数据模型,具体内容参见元素配置项
stack boolean false 操作是否入 undo & redo 栈,当实例化 Graph 时设置 enableStack 为 true 时,默认情况下会自动入栈,入栈以后,就支持 undo & redo 操作,如果不需要,则设置该参数为 false 即可
graph.updateItem(edge, {
    routeName: response.routeName
});

find(type, fn)

根据具体规则查找单个元素。

名称 类型 是否必选 描述
type string true 元素类型,可选值为 ‘node’、‘edge’
fn Function true 查找的规则
const findNode = graph.find('node', (node) => {
  return node.get('model').x === 100;
});

findById(id)

根据 ID,查询对应的元素实例

名称 类型 是否必选 描述
id string true 元素 ID

findAllByState(type,state)

查找所有处于指定状态的元素

名称 类型 是否必选 描述
type string true 元素类型,可选值为 ‘node’、‘edge’
state string true 状态名称
graph.findAllByState('node', 'selected')

getNodes()

获取图中所有节点的实例。

⚠️ 注意: 这里返回的是节点的实例,而不是节点的数据项。

返回值类型:Array;

节点和边的状态相关

setItemState(item, state, value)

设置元素状态,当你使用自定义node节点时,setItemState方法为该方法内的setState方法。

名称 类型 是否必选 描述
item string / Item true 元素 ID 或元素实例
state string true 状态值,支持自定义,如 selected、hover、actived 等。
value Boolean / string true 是否启用状态
graph.setItemState(item, 'normal', true);

坐标转化

getPointByClient(clientX, clientY)

由于从屏幕获取的位置与canvas的位置不同,所以这个方法是减去了canvas的left和top后的位置

名称 类型 是否必选 描述
clientX Number true 屏幕 x 坐标
clientY Number true 屏幕 y 坐标

视野相关

getZoom()

获取当前视口的缩放比例

zoomTo(toRatio, center)

名称 类型 是否必选 描述
toRatio Number true 固定比例值
center Object false 以 center 的 x、y 坐标为中心缩放,如果省略了 center 参数,则以元素当前位置为中心缩放
// 以 (100, 100) 为中心点,放大3倍
graph.zoomTo(3, { x: 100, y: 100 });

// 以当前元素位置为中心,缩小到 0.5
graph.zoomTo(0.5);

属性相关

get(key)

名称 类型 是否必选 描述
key string true 属性的键
// 获取 group
const group = graph.get('group');

// 获取 canvas 实例
const canvas = graph.get('canvas');

// 获取 autoPaint 值
const autoPaint = graph.get('autoPaint');
const width = graph.get("width");
const height = graph.get("height");

画布相关

destroy()

删除画布就是canvas

graph.destroy()

setAutoPaint(auto)

设置是否在更新/删除后自动重绘,一般搭配 paint() 方法使用。
与setItemState搭配使用,在改变元素状态前后调用,当你使用自定义node节点时,setItemState方法为该方法内的setState方法,调用setItemState其实就是调用该node的setState方法。

名称 类型 是否必选 描述
auto Boolean true 是否自动重绘
const item = e.item;
const graph = this.graph;

const autoPaint = graph.get('autoPaint');
graph.setAutoPaint(false);

graph.setItemState(item, 'selected', true);

graph.paint();
graph.setAutoPaint(autoPaint);

paint()

仅重新绘制画布。当设置了元素样式或状态后,通过调用 paint() 方法,让修改生效。

refresh()

当源数据中现有节点/边/ Combo 的数据项发生配置的变更时,根据新数据刷新视图

graph.refresh();

setMode(mode)

切换模式,指的是在自定义行为中所定义的模式
这里的模式指的是graph的配置项modes

名称 类型 是否必选 描述
mode string true 模式的名称
graph = new G6.Graph({
    modes: {
        default: [
            "drag-canvas",
            "hover-node",
            "hover-edge",
            "keyboard",
        ],
        addEdge: ["add-edge"],
        moveNode: ["drag-item"]
    },
});
const behavors = {
    'hover-node': hoverNode,
    'add-edge': addLine,
    'drag-item': dragItem,
    'select-node': selectNode,
    'hover-edge': hoverEdge,
    'keyboard':keyboard
};
export function initBehavors() {
    for (let key in behavors) {
        G6.registerBehavior(key, behavors[key])
    }
}
this.graph.setMode('default')

想了解更多的AI技术干货,欢迎上华为云的AI专区,目前有AI编程Python等六大实战营供大家免费学习。(六大实战营link:http://su.modelarts.club/qQB9)

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。