六、LogicFlow 自定义业务边 Edge

server/2024/10/23 0:08:38/

前言

经过前面的文章讲解,目前已经实现了节点拖拽到画布中,并且也实现了节点之间的基础连线,到这里也算是入了门,接下来继续探究新学习新的功能,以满足新的需求,那么这一章就会学习如何更改两节点之间的连线问题,让线条变得更加好看,更加的形象生动,增加用户在使用过程中的体验。

边的介绍

根据官方介绍当前支持如下三种内置边:

  • 直线(line)
  • 直角折线(polyline)
  • 贝塞尔曲线(bezier)

边引入方式

javascript">// 直线
import { LineEdge, PolylineEdgeModel } from "@logicflow/core";
// 折线
import { PolylineEdge, PolylineEdgeModel } from "@logicflow/core";
// 贝塞尔曲线
import { BezierEdge, BezierEdgeModel } from "@logicflow/core";

改造边(线)

基于之前的配置,mock两个节点和边的数据,如下所示:

在这里插入图片描述

实现效果如下:

在这里插入图片描述

然后我们这次的目标就是通过修改边的一些属性来优化连线的样式,让其变得更加的好看舒适,符合系统的整体视觉效果。

自定义边目录介绍

在合适的位置创建曲线文件,我这里还是跟创建自定义节点同一目录层级,如下所示:

在这里插入图片描述

这次需要改动的就是上图中圈起来的文件,这里按照引入的顺序简单介绍一下:

  1. Edges 自定义的线条
  2. Register.js 注册线条
  3. index.vue 引入并使用线条

创建自定义边目录文件

Edges 目录下创建 Bezier.js 文件, 根据官网介绍引入贝塞尔曲线(bezier)相关内置。

javascript">// 贝塞尔曲线
import { BezierEdge, BezierEdgeModel } from '@logicflow/core'// 贝塞尔曲线
class customBezierEdgeModel extends BezierEdgeModel {constructor (data, graphModel) {super(data, graphModel);}// 。。。其他属性配置}/*** 和节点一样,LogicFlow 的边也支持基于继承的自定义机制。* 同样也只需同时继承view和model。 * 但是和节点不一样的是,由于边的编辑复杂度问题,绝大多数情况下,自定义边时不推荐自定义view。 * 只需要在自定义edgeModel中样式类即可。
*/
export default {// 自定义曲线类型type: 'EDGE_BEZIER',view: BezierEdge,model: customBezierEdgeModel,
};

注册

这里的注册跟前面章节中注册节点的方式一样,在 Register.js 文件中如下配置:

javascript">
// 自定义贝塞尔曲线
import Bezier from './Edges/Bezier';export const RegisterCustomElement = (lf) => {// 。。。注册的节点// 自定义贝塞尔曲线lf.register(Bezier);
};

使用

基于前一章节在 index.vue 文件中,基本不用做什么改动,为了记忆,这里再次描述一下。

javascript"><script>// 引入LogicFlow核心包
import LogicFlow from '@logicflow/core';
import '@logicflow/core/dist/style/index.css';// 引入组件
import LeftMenu from './components/LeftMenu';// 注册自定义节点
import { RegisterCustomElement } from './lf_omponents/Register';export default ({name: 'demo',data () {return {lf: null,taskDetail: {},// 模拟数据mockData: {nodes: [{ id: "1", type: "rect", x: 100, y: 100, text: "节点1" },{ id: "2", type: "circle", x: 500, y: 300, text: "节点2" },],edges: [{sourceNodeId: "1",targetNodeId: "2",type: "EDGE_BEZIER",  // 此处改为自定义曲线类型text: "连线",startPoint: {x: 140,y: 100,},endPoint: {x: 450,y: 300,},},],}}},components: {LeftMenu,},mounted () {const that = this;// 创建实例const lf = new LogicFlow({container: this.$refs.diagram,// ... 其他的一些配置background: {// 画布背景配置}});// 存储全局对象,便于其他地方使用到 LogicFlow 实例对象that.lf = lf;// *********** 重点:注册自定义节点和边 ***************RegisterCustomElement(lf);/* 开启渲染如果不要模拟数据,直接使用 lf.render() 即可。**/lf.render(this.mockData);// 渲染到视图中心为止,否则在左上角显示lf.translateCenter();},methods: {// 拖拽节点$_dragInNode(data) {const that = this;that.lf.dnd.startDrag({...data,});},}
})</script>

基础效果

稍微修改一下之前的mock数据,如下所示:
在这里插入图片描述

到这里的时候,就能够看得出效果了,左测是之前的边(polyline),右侧是自定义边(EDGE_BEZIER

在这里插入图片描述

到这里,我们的目的基本就达成了,接下来修改线条的颜色等配置

接下来的所有的改动都是基于 Bezier.js 文件内容进行修改。

Bezier.js 配置修改

启动动画

Bezier.js 文件中通过 setAttributes 函数让边动起来,形成有流动效果,因为这里是截图,所以看不出来,自己可以在项目中尝试。

javascript">class Model extends BezierEdgeModel {constructor (data, graphModel) {super(data, graphModel);}setAttributes() {// 启动动画this.isAnimation = true;}}

如下效果:
在这里插入图片描述

结语

其他的一些配置修改,这里就不过多赘述,自己根据官网描述自行尝试。
如果对你还有点作用,请点赞,收藏


http://www.ppmy.cn/server/134030.html

相关文章

云开发的力量:腾讯云产品在业务项目中的最佳实践分享

全文目录&#xff1a; &#x1f4a1; 前言&#xff1a;技术如何助力业务成功&#x1f31f; 目录&#x1f50d; 应用背景&#xff1a;业务痛点与挑战&#x1f4ca; 高并发场景中的挑战 &#x1f6e0; 腾讯云云开发解决方案&#xff1a;最佳实践与接入方式&#x1f310; 云开发如…

苍穹外卖--开发记录day08

目录 苍穹外卖day08一&#xff1a;导入地址簿代码二&#xff1a;用户下单三&#xff1a;微信支付 苍穹外卖day08 一&#xff1a;导入地址簿代码 很简单就是单表的增删改查&#xff0c;这里不做过多的赘述了&#xff1b; 二&#xff1a;用户下单 这里用户下单所涉及到的参数比较…

【FAQ】HarmonyOS SDK 闭源开放能力 —Map Kit(3)

1.问题描述&#xff1a; compatibleSdkVersion升级到5.0.0&#xff08;12&#xff09;之后&#xff0c;调用坐标系转换API&#xff1a;map.convertCoordinate(mapCommon.CoordinateType.WGS84, mapCommon.CoordinateType.GCJ02, { longitude: location.longitude, latitude:…

设计模式-模板方法

模板方法&#xff08;Template Method&#xff09;是行为型设计模式的一种&#xff0c;它在一个抽象类中定义了一个算法的骨架&#xff0c;而将算法的一些步骤延迟到子类中实现。通过这种方式&#xff0c;模板方法使得子类可以在不改变算法整体结构的情况下&#xff0c;重新定义…

最全面的Mac到手检查方向整理,新Mac如何自检

如果的Mac刚刚到手&#xff0c;那么一定要仔细检查&#xff0c;而不是直接就用&#xff0c;这样有问题也能及时返厂换新或者退款&#xff0c;不然时间长了发现问题后只能吃闷亏了 一、外观检查 1、整体外观 仔细查看 MacBook 的外壳是否有划痕、磕碰或凹陷。尤其注意机身的边…

PHP中的ReflectionClass常见用法

ReflectionClass是 PHP 中的一个类&#xff0c;它提供了有关类的信息的反射。 使用ReflectionClass可以在运行时获取关于类的各种信息&#xff0c;例如类的名称、方法、属性、注释等。 以下是一些常见的用法&#xff1a; 获取类的名称&#xff1a; $reflection new Reflec…

如何使用Java爬虫处理API接口返回的JSON数据?

处理API接口返回的JSON数据是Java爬虫开发中的一个常见任务。在Java中&#xff0c;有多个库可以帮助我们解析JSON数据&#xff0c;其中最流行的是Jackson和Gson。以下是使用这两个库处理JSON数据的基本步骤和示例代码。 使用Jackson处理JSON Jackson是一个功能强大的JSON处理…

【随记】吉布斯(Gibbs)不等式证明!

创建时间&#xff1a;2024-10-22 首发时间&#xff1a;2024-10-22 最后编辑时间&#xff1a;2024-10-22 作者&#xff1a;Geeker_LStar 顾名思义&#xff0c;【随记】这个专栏没有固定的主题。它可能会包含一些有趣的数学问题&#xff08;咳咳咳&#xff0c;论我的突发奇想&…