开源、易扩展、方便集成的在线绘图(微服务架构图、网络拓扑图、流程图)工具

一个基于typescript + canvas 实现的开源在线绘图的引擎Topology。采用引擎 + 图形库中间件的思路能够方便、快速的扩展、集成到前端项目。目前暂时实现了基本图形、流程图图形库,能够满足微服务架构图、网络拓扑图和流程图的绘制。后面计划陆续实现活动图/时序图/类图等UML图。

在线体验(因为操作方便问题,暂时没有适配移动端)       产品介绍

为什么重复造轮子

  • 笔者工作中遇到比较多的微服务架构、云资源运维、部署与运维可视化方面的需求
  • 开源、满足自己需求的不多
  • typescript + 纯粹canvas架构的不多
  • 以中间件方式可定制满足不同场景的不多
  • 最重要的是,兴趣 + 不难

特点

  • 开源
  • 可定制化
  • 简单易用,方便集成
  • 较好的性能,非常流畅
  • 方便的数据导入导出
  • 图片保存/预览
  • typescript + canvas

使用场景

  • 微服务架构图
  • 运维时部署结构拓扑图
  • 流程图

后续会推出的:

  • 活动图
  • 时序图
  • 类图等

架构设计

主要由:层、节点、连线和箭头等组成。

层:

这里的层,主要是为了提升性能的逻辑层;与类似ps里面的用户图层无关。

离屏层:包含所有绘图数据,是最稳定的图层。

选中层:用户选中部分或全部节点/连线的高亮图层,并设置相关属性、缩放、和旋转等。

动画层:主要用于演示动画。

活动层:主要用于箭头鼠标交互事件,比如锚点和连线过程。

节点:

是画布的主要组成部分,节点内部还可以包含图标或文字。

连线和箭头:

连线和箭头是关联在一起的。连线两端可以选择设置或不设置箭头。

节点可以通过控制点进行整体缩放、旋转。

连线只表示节点描点间的连线,不存在缩放、旋转。节点缩放或旋转会造成控制点的重计算。连线形状可以由线的控制点改变。

绘画与属性

节点和连线各种有自身的绘画属性,同时还可以设置一个附加的自定义数据

快速集成使用

es6使用示例:

github.com/le5le-com/t…

typescript使用示例:

github.com/le5le-com/t…

安装

使用npm(或yarn)方式安装使用。

# 安装绘图引擎
npm install topology-core

# 安装图形库 - 流程图
npm install topology-flow-diagram
# ...其他图形库

创建基础画布

// 1. 导入绘画引擎
import { Topology } from ‘topology-core‘;

// 2. 创建画布
// 其中,第一个参数‘topo-canvas‘表示canvas的dom元素id;
// 第二个参数{}表示画布选项,这里表示全部使用默认值。具体选项请参考后面的api文档。
var canvas = new Topology(‘topo-canvas‘, {});

// 3. 渲染图形
// 其中,第一个参数{}表示图形数据
// 第二个参数true,表示打开一个新文件;否则在当前文件打开,覆盖已存在的图形数据
canvas.render({}, true);

常用画布方法

// 获取画布数据
const data = this.canvas.data();

// 保存为图片blob
// toImage函数参数:type, quality, callback
this.canvas.toImage(null, null, blob => {
  // Do sth.
});

// 下载为图片
// saveAsImage函数参数:filename, type, quality
this.canvas.saveAsImage(‘canvas.png‘);

// 编辑相关操作
this.canvas.cut();
this.canvas.copy();
this.canvas.parse();
this.canvas.undo();
this.canvas.redo();

引用第三方图形库

// 使用第三方图形库

// 1. 先导入注册函数
import { registerNode } from ‘topology-core/middles‘;

// 2. 导入图形库图形及其相关元素
import {
  flowData,
  flowDataAnchors,
  flowDataIconRect,
  flowDataTextRect,
  flowSubprocess,
  flowSubprocessIconRect,
  flowSubprocessTextRect,
  flowDb,
  flowDbIconRect,
  flowDbTextRect,
  flowDocument,
  flowDocumentAnchors,
  flowDocumentIconRect,
  flowDocumentTextRect,
  flowInternalStorage,
  flowInternalStorageIconRect,
  flowInternalStorageTextRect,
  flowExternStorage,
  flowExternStorageAnchors,
  flowExternStorageIconRect,
  flowExternStorageTextRect,
  flowQueue,
  flowQueueIconRect,
  flowQueueTextRect,
  flowManually,
  flowManuallyAnchors,
  flowManuallyIconRect,
  flowManuallyTextRect,
  flowDisplay,
  flowDisplayAnchors,
  flowDisplayIconRect,
  flowDisplayTextRect,
  flowParallel,
  flowParallelAnchors,
  flowComment,
  flowCommentAnchors
} from ‘topology-flow-diagram‘;

// 3. 向引擎注册图形库图形及其相关元素
registerNode(‘flowData‘, flowData, flowDataAnchors, flowDataIconRect, flowDataTextRect);
registerNode(‘flowSubprocess‘, flowSubprocess, null, flowSubprocessIconRect, flowSubprocessTextRect);
registerNode(‘flowDb‘, flowDb, null, flowDbIconRect, flowDbTextRect);
registerNode(‘flowDocument‘, flowDocument, flowDocumentAnchors, flowDocumentIconRect, flowDocumentTextRect);
// ...

// 下面是简单的注册函数介绍,详情请参考api文档
// registerNode: 注册一个自定义图形节点node.
// name - node名称.
// drawFn - node渲染函数。传入canvas ctx和node数据,自己决定如何绘画node
// anchorsFn - 计算node的锚点,如果为null,表示使用缺省计算锚点方法
// iconRectFn - 计算node的图标区域,如果为null,表示使用缺省计算图标区域方法
// textRectFn - 计算node的文字区域,如果为null,表示使用缺省计算文字区域方法
// force - 如果已经存在同名node,是否覆盖.
export function registerNode(
  name: string,
  drawFn: (ctx: CanvasRenderingContext2D, node: Node) => void,
  anchorsFn?: (node: Node) => void,
  iconRectFn?: (node: Node) => void,
  textRectFn?: (node: Node) => void,
  force?: boolean
);

开发自己的图形库

参考开发文档: www.yuque.com/alsmile/top…

项目地址

结语

个人周末开发,还有很多需要提升的空间,欢迎提出意见和交流。

微信:alsmile123

个人服务器资源非常非常非常小,打开慢请耐心等待。欢迎资助 : )。

原文地址:https://www.cnblogs.com/Alsmile/p/11459152.html

时间: 2024-07-31 04:59:30

开源、易扩展、方便集成的在线绘图(微服务架构图、网络拓扑图、流程图)工具的相关文章

基于开源,强于开源,轻舟微服务解决方案深度解读

本文来自网易云社区. 2018年7月31日,由杭州市政府.赛迪以及网易主办的"2018中国杭州云创大会"于杭州国际博览中心如期举办,大会以"开放·生态·赋能"为主题,汇聚行业领袖.技术大咖及产业链从业者.随着数字经济的时代到来,企业数字化创新对新一代云计算服务的需求日渐迫切.在下午的云计算专题会中,网易云邀请了来自各行业的新老客户,深度研讨云计算赋能企业数字化创新的探索和实践. 网易云副总经理 陈谔 网易云副总经理陈谔认为:"IT已经从成本中心提升到创新中

网络拓扑图:网络拓扑图介绍及在线制作

什么是网络拓扑图 网络拓扑图就是指用传输媒体互联各种各样机器设备的物理布局,即哪种方法把互联网中的电子计算机等机器设备相互连接.拓扑绘画出云端服务器.服务中心的互联网配备和相互之间的联接.互联网的拓扑结构有很多种多样,关键有星形构造.环型构造.总线 用网络拓扑图软件的优点和缺点 网络拓扑图往往是由网络拓扑图软件绘制,网络拓扑图软件可以让使用者方便地对网络拓扑图进行添加,修改.保存.复制等操作.这些事情如果是由手工绘制来操作的话,会麻烦许多.但对于网络拓扑图软件来说,都不是问题.另外对于有条件上网

SpringCloud微服务:阿里开源组件Nacos,服务和配置管理

摘自:https://www.cnblogs.com/cicada-smile/p/12355994.html 源码地址:GitHub·点这里||GitEE·点这里 一.阿里微服务简介 1.基础描述 Alibaba-Cloud致力于提供微服务开发的一站式解决方案.此项目包含开发分布式应用微服务的必需组件,方便开发者通过SpringCloud编程模型轻松使用这些组件来开发分布式应用服务.只需要添加一些注解和少量配置,就可以将SpringCloud应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建

ProcessOn -在线绘图

插件介绍: 在工作中常常会用到绘图工具,说道绘图工具,那么大家一定想到的都是第三方工具,今天就为大家推荐一款在浏览器上在线绘图的插件.ProcessOn是一款免费易用,功能强大的在线作图工具,支持共享和实时协作.基于HTML5和Javascript技术,ProcessOn设计器大大提高了作图的流畅度和高效性.只要拥有网络设备,任何人都能随时随地使用ProcessOn作图. 使用说明: 在谷歌应用商店中安装ProcessOn,并在应用中启动它. ProcessOn的专业社交网络聚集了不同领域的专家

易扩展的办公流程化管理核心模型(第2版)

前言 关于办公管理系统升级思考.规划工作,已经一年有余(2013年11月<使用云技术升级改造现有应用系统的思考>).从2014年3月开始,我开始协助用户完成规划.可研.立项,直至今年(2015年)1月份做为项目经理承接此项目,建设思路也组建清晰. 刚开始更多的是以云计算视角,通过技术手段来支撑用户,为用户画了一张大饼,可是用户投资有限,其结果好比买小餐包充饥都不够,这样,只能按二八原则,提供核心业务支撑平台,或者叫做最小核心化的办公生产运营能力产品,预留将来扩容及增加预算的接口和架构. 传统办

一款用于绘制状态机转换图和流程图的web在线绘图工具

大型软件系统中离不开各类状态机的处理,日常工作中也涉及到各类事务处理流程:从表现力看文不如表,表不如图:因此日常工作中经常需要绘制各种状态机的状态转换图和流程图,以协助理解代码逻辑和各类事务处理流程等. 绘制此类图形的常用工具有visio,liberoffice draw等,这些软件采用"所见即所得"的设计思想,完全由手动放置形状.填充文本.绘制线条.拖动箭头指向关系.调整文本格式.调整布局等等.此类工具优点是绘图直观.布局可控:缺点一是需要安装专门的软件:二是过于繁琐,以状态机状态转

易扩展的办公流程化管理核心模型(第1版)

前言 关于办公管理升级思考.规划,已经一年有余(2013年11月<使用云技术升级改造现有应用系统的思考>),从2014年3月开始,协助用户完成规划.可研.立项. 刚开始更多的是以云计算视角,通过技术手段来支撑用户,为用户画了一张大饼,可是用户投资有限,买小餐包充饥都不够,这样,只能按二八原则,提供核心业务支撑平台,或者叫做最小核心化的办公生产运营能力产品. 传统办公管理及其业务现状 从办公自动化开始,传统办公系统逐步升级到以工作流.协同办公.知识管理为一体的知识型协同办公系统,为企事业单位提供

?Postgres-XL:基于PostgreSQL的开源可扩展数据库集群

?Postgres-XL:基于PostgreSQL的开源可扩展数据库集群 最近这一年业界去"IOE"越叫越响,很多传统企业也把去"IOE"计划摆上了桌面.我老是想不明白这些非互联网企业(比如:银行)做这种事的动力何在? 高大上的"自主可控"."振兴民族科技"等空洞口号先不去管,真正的动力在哪里? "安全"."成本"."互联网架构".......等等.等等, 唯一看起来

网站集成支付宝在线支付

摘要 项目中需要集成支付宝在线支付.关于这里简单说明一下,操作步骤. 步骤 1.进入开放平台,地址;https://openhome.alipay.com/developmentDocument.htm,选择支付类型.这里选择电脑网站支付. 2.下载对应语言demo 3.查看demo,填写必要参数. /// <summary> /// config 的摘要说明 /// </summary> public class config { public config() { // //