介绍几种antvX6常用的方法或配置(使用数据渲染节点和连线、图像居中完整展示、节点不可移出画布、节点图片和标签变化)

前言

接本专栏的上一篇antv X6新手教程,补充一些新的需求实现,丰富巩固antv X6的使用。此篇是以上一篇为基础的,如有初学者可以看本专栏的上一篇。

需求1:将编辑好的拓扑图展示在其他页面

一般在编辑完拓扑图或者流程图之后,前端需要把antv X6编辑的数据传给后端,然后再在其他页面去展示。比如我之前做过的一个业务逻辑:用户在拓扑编辑页面编辑好拓扑图之后,首页需要展示用户编辑好的那个拓扑图。

实现步骤

1、因为这是个demo案例,我就在同一个页面再放一个框当做首页的一个div做展示哈,先写一个div在下面,上面那个蓝色的div就是我们编辑的,下面绿色的用来展示。

2、因为绿色框里面也是要渲染节点数据的,只是不用自己拖进来,所以也需要初始化成antv X6的画布,先给下面那个盒子先加个id

<div id="containerDraw"></div>

 再在data(){}里面定义一个实例对象

graphDraw: null, // 展示的画布实例对象

3、给绿色框的初始化函数,代码如下:

initGraphDraw() {const containerDraw = document.getElementById("containerDraw");this.graphDraw = new Graph({container: containerDraw, // 画布容器width: containerDraw.offsetWidth, // 画布宽height: containerDraw.offsetHeight, // 画布高background: false, // 背景(透明)snapline: true, // 对齐线// 配置连线规则connecting: {snap: true, // 自动吸附allowBlank: false, // 是否允许连接到画布空白位置的点allowMulti: true, // 是否允许在相同的起始节点和终止之间创建多条边allowLoop: true, // 是否允许创建循环连线,即边的起始节点和终止节点为同一节点highlight: true, // 拖动边时,是否高亮显示所有可用的节点highlighting: {magnetAdsorbed: {name: "stroke",args: {attrs: {fill: "#5F95FF",stroke: "#5F95FF",},},},},router: {// 对路径添加额外的点name: "orth",},connector: {// 边渲染到画布后的样式name: "rounded",args: {radius: 8,},},},panning: {enabled: false,},mousewheel: {enabled: true, // 支持滚动放大缩小zoomAtMousePosition: true,modifiers: "ctrl",minScale: 0.5,maxScale: 3,},grid: {type: "dot",size: 20, // 网格大小 10pxvisible: true, // 渲染网格背景args: {color: "#a0a0a0", // 网格线/点颜色thickness: 2, // 网格线宽度/网格点大小},},});},

最后别忘记了在mounted()里面调用初始化函数

做到这里页面就如下图所示:

可以看到绿色框里面也有了网格,证明画布已经初始化好了。

4、渲染节点和连线数据

该专栏上篇文章最后写了保存画布的save() 函数,可以输出画布内的节点和连线数据,现在只需要再加一句话,就可以将上面蓝色框内的图像复制到绿色框内,代码如下:

    //保存画布,并提交save() {console.log(this.graph.toJSON(), "graph");console.log(this.graph.getNodes(), "node");this.graphDraw.fromJSON(this.graph.toJSON());},

this.graphDraw.fromJSON(this.graph.toJSON());就是将graph的数据导出,拿到graphDraw内渲染。 

效果展示

 bug1

这里有一个bug,因为上下两个div是不一样大的,如果节点的xy坐标严格按照当时编辑的那样渲染就会发生以下现象:

可见渲染节点时需要适应当前画布的大小,只需要再加一句:

this.graphDraw.zoomToFit({ maxScale: 1 });

zoomToFit方法可以缩放画布内容,使画布内容充满视口。

效果展示:

bug2

做到这里突然发现一个问题,节点移动时可以移出画布:

查官方文档后找到解决办法,在画布配置项里加入以下代码,节点就不能被移动到画布之外了

translating: {restrict: true,
},

需求2:根据节点数据来改变节点的图片和标签等

比如我之前做过的一个业务:拓扑图上的节点有些时候需要告警,告警时节点的图片需要更改,节点下的文字也要更改。

实现步骤

1、先写一个按钮,用来触发更改事件:

      <el-button@click="changeNode"style="background-color: #00cbd8"class="btnNormal">改变节点1</el-button>

2、定义改变节点的函数:

    changeNode() {let cellData = this.graph.toJSON().cells;cellData.forEach((item) => {if (item.shape === "image" &&item.attrs.label.textWrap.text == "节点1") {this.graphDraw.getCellById(item.id).setAttrs({image: {["xlink:href"]: require("@/assets/img/virus.png"),},label: {textWrap: {text: "改变了!!",},},});}});},

这里的逻辑是,先获取到画布内的所有数据,然后循环判断形状是image并且是节点2的时候就更改图片路径和label标签,这里使用了getCellById()和setAttrs()两个方法。

效果展示

 这里改变节点1就是举个例子,实际开发中可能需要根据data里面的数据去判断,通常将某些业务数据要存在节点/边的 data 上。如不懂可以看官方文档,其实antv X6的操作就是学会如何使用文档上的配置和方法,熟悉了就可以灵活使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/502143.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Typora快捷键设置详细教程(内附每个步骤详细截图)

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公粽号&#xff1a;程序员洲洲。 &#x1f388; 本文专栏&#xff1a;本文…

2_SQL

文章目录 SQL数据完整性实体完整性域完整性参照完整性default&#xff08;默认值&#xff09;comment&#xff08;注释&#xff09; 多表设计一对一一对多多对多数据库三大范式第一范式&#xff1a;原子性第二范式&#xff1a;唯一性第三范式&#xff1a;数据的冗余 多表查询连…

面试经典 150 题 ---- 轮转数组

面试经典 150 题 ---- 轮转数组 轮转数组方法一&#xff1a;使用额外的数组方法二&#xff1a;数组翻转 轮转数组 方法一&#xff1a;使用额外的数组 我们可以使用额外的数组来将每个元素放至正确的位置。用 n 表示数组的长度&#xff0c;我们遍历原数组&#xff0c;将原数组…

[AutoSar]BSW_Com07 CAN报文接收流程的函数调用

目录 关键词平台说明一、背景二、顺序总览三、函数说明3.1 Com_RxIndication&#xff08;&#xff09; 关键词 嵌入式、C语言、autosar、OS、BSW 平台说明 项目ValueOSautosar OSautosar厂商vector &#xff0c;芯片厂商TI 英飞凌编程语言C&#xff0c;C编译器HighTec (GCC)…

Python实现双向链表:从基础到应用

一、引言 双向链表是一种比单向链表更复杂的数据结构&#xff0c;每个节点除了包含数据和指向下一个节点的指针外&#xff0c;还包含一个指向前一个节点的指针。这种结构使得我们可以从链表的任何节点开始&#xff0c;向前或向后遍历链表。 目录 一、引言 二、节点定义 三、…

CDN原理探究

来源于百度&#xff1a; https://baike.baidu.com/item/%E5%86%85%E5%AE%B9%E5%88%86%E5%8F%91%E7%BD%91%E7%BB%9C/4034265?frge_ala 通过上图&#xff0c;我们可以了解到&#xff0c;使用了CDN缓存后的网站的访问过程变为&#xff1a; 用户向浏览器提供要访问的域名&#xff…

模型练习史

文章目录 肌肉光头vikingtorso死侍蓝毒液卡通girlwalletdog headman anatomy总结 肌肉光头 viking torso 死侍 蓝毒液 卡通girl wallet dog head man anatomy 总结 zbrush 与 blender 结合使用, 善 !

【QT+QGIS跨平台编译】之五十五:【QGIS_CORE跨平台编译】—【qgsmeshcalcparser.cpp生成】

文章目录 一、Bison二、生成来源三、构建过程一、Bison GNU Bison 是一个通用的解析器生成器,它可以将注释的无上下文语法转换为使用 LALR (1) 解析表的确定性 LR 或广义 LR (GLR) 解析器。Bison 还可以生成 IELR (1) 或规范 LR (1) 解析表。一旦您熟练使用 Bison,您可以使用…

多线程万字详解

进程和线程是计算机程序执行的两个重要概念。 1.进程&#xff1a; 进程是操作系统分配资源的基本单位&#xff0c;每个进程都有自己独立的地址空间&#xff0c;每启动一个进程&#xff0c;系统就会为它分配内存。进程间通信比较复杂&#xff0c;需要用到IPC&#xff08;InterP…

动态规划--(算法竞赛、蓝桥杯)--二维费用背包

1、B站视频链接&#xff1a;E15 背包DP 二维费用背包_哔哩哔哩_bilibili #include <bits/stdc.h> using namespace std; int f[101][101]; //f[j][k]第i件物品&#xff0c;体积<j,重量<k的最大价值int main(){int n,V,W;//物品、容量、承重int v,w,val;//体积、重…

信息收集2.0版本

内网渗透之信息收集 whois查询 1.1.1.1. 在线网站查询 输入相关的域名即可进行查询。 &#xff08;1&#xff09;站长之家&#xff1a;whois域名查询&#xff1a;http://whois.chinaz.com/ &#xff08;2&#xff09;爱站工具网&#xff1a;whois域名查询&#xff1a;站长…

ventoy制作启动U盘

Ventoy新一代多系统启动U盘解决方案。国产开源U盘启动制作工具&#xff0c;支持Legacy BIOS和UEFI模式&#xff0c;理论上几乎支持任何ISO镜像文件&#xff0c;支持加载多个不同类型的ISO文件启动&#xff0c;无需反复地格式化U盘。把ISO系统文件拷贝到U盘&#xff0c;U盘插入电…