jtopo的项目实战(二)

article/2025/8/14 19:11:38

 

话接上回,继续实现jtopo本身不具有的一些功能,有讲的不对的地方,欢迎大家留言提出,我们一起进步,奥利给,还有,码字不易,如果觉得博主写的不错的欢迎打赏哈!

2.美化节点之间连线的文字标识

        jtopo自带的连线只允许添加一个文字标识,如果想要在一根连线上添加多个描述,要怎么实现呢?首先,需要修改连线(link)的构造函数,增加想要的文字字段属性,方便文字的设置和读取。因为我们项目中需要显示三段文字,所以我新增了两个文字属性,分别是textA和textZ:

 

这样就可以在json文件中定义这个字段,并通过json文件来赋值,当然这只是实现了数据源,有了数据源还要让文字显示到拓扑图中来,这就需要改动连线绘制部分的代码,需要注意的是,我们画的是一个有向的箭头,出发点都是nodeA,结束点永远是nodeZ,不管nodeZ处于nodeA的哪一个方位,最终的箭头始终指向nodeZ,而HTML5画图时通常先把上下文旋转一个角度,使上下文和我们要绘制的对象水平,源代码中使用的是Math.atan来计算反正切来旋转的,如果我们忽略掉这个细节,而直接去绘制textA、textZ,那么最终的效果是,在拓扑图上拖动节点旋转时,随着角度的变化,textA、textZ的位置会周期性的互换,这是因为Math.atan的取值区间是-π/2~π/2,也就是说,当nodeZ旋转到绝对坐标系第一(nodeZ 的坐标x、y都是正数)、四象限(nodeZ的坐标x是正数,y是负数)时,绘制的textA、textZ是正确的,其余象限绘制的textA、textZ有可能位置颠倒,具体什么意思呢?比如说textA本来应该在靠近nodeA的地方绘制,结果绘制到了nodeZ 的旁边,说的更形象一点吧,就是箭羽长到了箭头的位置,那么如何解决呢?其实还有另外一个函数Math.atan2,它的取值范围是-π~π之间,通过测试后发现Math.atan2的值在大于π/2和小于-π/2时textA、textZ的位置是反的,既然有规律可循就有解决问题的办法,既然在这两种情况下是反的,那么我刻意在这两种情形下让它再反一次,负负得正不就ok了,事实证明是对的:

 

 

有人肯定好奇了,textA、textZ的位置是怎么确定的,这还不简单么,源代码只显示一个text,它是这样确定绘制位置的:

var e = (d.x + c.x) / 2 + this.textOffsetX,

    f = (d.y + c.y) / 2 + this.textOffsetY;

a.fillText(this.text, e, f)

 

很简单,他是在连线的最中间绘制的文字,我们需要绘制三段,其他两个点分别是1/4和3/4处,再减去对应文字长度的一半,就能精确定位,对应上图应该很好理解了。好了文字绘制完了,但不美观,需要绘制有一个底色,上图中函数fillRoundRect就是绘制矩形框(底色)的,矩形框的位置确定参考文字的位置,这里不再累述,fillRoundRect函数具体实现如下:

        /**该方法用来绘制一个有填充色的圆角矩形 

         *@param cxt:canvas的上下文环境 

        *@param x:左上角x轴坐标 

        *@param y:左上角y轴坐标 

        *@param width:矩形的宽度 

        *@param height:矩形的高度 

        *@param radius:圆的半径 

        *@param fillColor:填充颜色 

        **/

        function fillRoundRect(cxt, x, y, width, height, radius, /*optional*/ fillColor) {

            //圆的直径必然要小于矩形的宽高          

            if (2 * radius > width || 2 * radius > height) { return false; }

    

            cxt.save();

            cxt.translate(x, y);

            //绘制圆角矩形的各个边  

            drawRoundRectPath(cxt, width, height, radius);

            cxt.fillStyle = fillColor || "#000"; //若是给定了值就用给定的值否则给予默认值  

            cxt.fill();

            cxt.restore();

        }

 

最终的效果如下:

 

最终在生产环境中的效果如下;

 

最后,博主有一个小小的心愿,就是希望大家点一下下方的点赞、分享和收藏,博主希望大家都支持下,后期有好的东西我会继续分享给大家。

 


http://chatgpt.dhexx.cn/article/ImjU9cIN.shtml

相关文章

vue、jtopo绘制鱼骨图

效果如下图所示: 一、文件目录结构: 二、绘制png的鱼头、鱼尾图片 fish_head.png: fish_tail.png: 三、下载js文件 jquery、jtopo请到官网下载。 四、编写鱼骨图核心文件:MakFishBone.js let MakFishBo…

通过JTopo.js在网页绘制网络拓扑图

项目中遇到要在网页中绘制网络拓扑图的需求,要求节点具备点击、拖拽、缩放等交互功能,并且可以显示/隐藏详细信息,数据是设备实时上报来的。 综上,用画拓扑图的工具画一张固定的图片偷懒显然是不行的,最好是找到一个封…

JTopo添加动态连线

效果如下 先在 JTopo 的 link 原型上定义一个方法 window.requestAnimationFrame window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame JTopo.Link.prototype.drawanimepic functi…

JTopo + Vue 实现自定义拖拽流程图

JTopo Vue 实现自定义拖拽流程图 进入体验效果 进入github 市场上做流程图的插件比较多,这里介绍一种基于canvas编写的js插件,结合vue框架做出精美的流程图 首先搭建vue框架,这里就不做介绍,由于jtopo官方demo里用到了jquery&am…

jtopo连线绘制脉冲动画效果

随着需求的日益精细化,人们越来越多的关注到了画面的美观,单纯的节点间连线已经不满足人们的审美观念了,那么能不能让节点间的连线动起来呢?答案是可以的,老规矩,先上图,再说怎么实现。 同样&am…

jTopo入门 简单实现拓扑图

最近项目中需要绘制拓扑图,于是研究了下绘制拓扑图的组件,jtopo是一款比较简单易上手的开发工具包,分享给大家。 jtopo特点 1、完全基于HTML5 Canvas开发,API平易近人、几乎简单到了极致。 2、不依赖任何其他库、执行仅需一个Ca…

jtopo 实现一键布局

最近很忙、也很懒,一堆烦心事,jtopo后面不准备再深究了,本身东西也不多,做出的新功能,新特效也都写到博客中来了,今天给大家分享最近研究的一个新技能——jtopo一键布局,写给大家、也写给自己。…

jtopo简单实例

原贴地址 http://cn-arthurs.iteye.com/blog/2009345 说明: jtopo是一个基于canvas的js拓扑图形组件.比canvasexpress容易多了. 可以方便地加点,加连线,加鼠标事件,拖曳. 号称跨浏览器,不过实际上不支持ie678,加上excanvas.js也没用,除非像canvasexpress那样使用chrome插件. …

Vue — jTopo

近期在Vue项目中使用jTopo来制作集群节点拓扑图,官网http://www.jtopo.com/ 使用vue-cli搭建的模块化开发项目,使用第三方库最好的方式就是通过npm install xxx安装,然后在项目 里import xxx来使用;但是在JTopo官网上并没有发现有…

【Vue引入JTopo及所遇到的问题】

Vue引入JTopo及所遇到的问题 前言一、方案选型二、使用步骤三、总结 前言 项目过程中总是会遇到稀奇古怪的需求,这不,咱老大又让我画一个系统拓扑图放在首页,要求部分数据需从后端获取,动态展示在页面上。对于一个后端人猿来说&a…

Vue+JTopo(一)

1.下载js jtopo 更新下载 (不知道为什么网站被封禁了……在这提供下我现在用的 jtopo-1.4.4_trial-esm-min.js) 链接:https://pan.baidu.com/s/18V1HKwAuxzWM19RD4axGOg 提取码:0304 2.引用 文件放在public/js文件夹下,在index.hml内引用。…

jTopo(一)

jTopo(一) 一、jTopo是什么 jTopo(Javascript Topology library)是一款完全基于HTML5 Canvas的关系、拓扑图形化界面开发工具包。 jTopo关注于数据的图形展示,它是面向开发人员的,需要进行二次开发。 使用jTopo很简单,可以快速…

windows10下安装MSYS2+MinGW64

1.下载msys2,官方地址:http://www.msys2.org/,这里选择64位的安装器 2.安装完成之后,先别启动msys2,在 安装根目录/etc/pacman.d/ 下找到mirrorlist.mingw32、mirrorlist.mingw64和mirrorlist.msys并进行修改。 mirr…

Win10 下安装 MSYS2

什么是 MSYS2 MSYS2 (Minimal SYStem 2) 是一个MSYS的独立改写版本,主要用于 shell 命令行开发环境。同时它也是一个在Cygwin (POSIX 兼容性层) 和 MinGW-w64(从"MinGW-生成")基础上…

【msys2】使用msys2下载工具的旧版本

背景 苯人在计组实验中使用了msys2来安装verilator工具,结果最新版本的verilator有bug,几经探索找到了利用msys2下载旧版本工具的方法(还可以将现有工具更新为旧版本) 步骤 现以安装旧版本的verilator为例讲解方法。 这是msys…

【Window环境下使用MSYS2搭建CMake + MinGW环境】

目录标题 安装CMakecmake 测试 MSYS2下载MSYS2安装MSYS2修改软件下载源 MSYS2下安装MinGW配置MinGW配置到环境变量 hello world测试 安装CMake Cmake下载地址:https://cmake.org/download/,下一个windows压缩包就好了,因为我比较喜欢自己来配置,免得不知…

用MSYS2安装mingw

文章目录 前言卸载mingw安装MSYS2 前言 安装MSYS2的原因是,在windows安装protobuf时,想用mingw编译protobuf的库,而protobuf的官方手册只给出一句: To build from source using Cygwin or MinGW, follow the Unix installation i…

【VSCode】【msys2】VS Code + msys2配置Windows下C/C++开发环境

【VSCode】【msys2】VS Code msys2配置Windows下C/C开发环境 一、Msys2配置 1. 下载msys2, 网址:https://www.msys2.org/ 2. 安装msys2-x86_64-xxxx.exe 这里没什难度,记住安装路径就好,一路next就装好了。 3. 安装gcc 3.1. 更新msys2…

Msys2记录

MSYS2 ​ MSYS2是MSYS的升级版,集成了pacman和Mingw-w64的Cygwin升级版,提供了Mingw-w64的GNU工具,包括GCC,同时移植了Arch Linux的软件包管理系统pacman,具备了Cygwin的POSIX API,理论上在Linux上的程序使…

msys2在windows10系统的安装

测试系统: windows 10 首先需要msys2的安装包,可以去官网下载安装包 官网地址: http://www.msys2.org/ 本次下载的是 msys2-x86_64-20180531.exe 注意:1.msys2不可以安装在FAT*分区    2.msys2不能安装在win XP系统上 1.双击msys2-x86_64-20180531.exe,并点击下一步选择安…