auto-workflow

用于快速构建各种关系图的库,比如流程图,可视化执行流等

github地址:https://github.com/auto-workflow/AWorkflow

快速开始

npm install aworkflow

或者引用dist文件夹下的产出文件

访问demo

npm install

npm run dev

默认模版:http://localhost:9999/

动画:http://localhost:9999/demo/animate

自动排列:http://localhost:9999/demo/autosort

自定义模版:http://localhost:9999/demo/custom

也可以访问在线demo:

默认模版:http://zhoushengfe.com/flow/dist/index.html

动画:http://zhoushengfe.com/flow/dist/demo/animate/index.html

自动排列:http://zhoushengfe.com/flow/dist/demo/autosort/index.html

自定义模版:http://zhoushengfe.com/flow/dist/demo/custom/index.html

技术文档

快速开始

1,定义node:

let node1 = {
// 唯一标识,必须
id: '123',
// 自定义数据,用于填充模版,nodeName为组件文案
defineData: {
nodeName: '数据拆分'
},
// 画布中位置
position: [100, 100],
// 输入圈,对象数组,每个对象表示一个输入,以下标区分
input: [
{
}
],
// 输出圈,对象数组,每个对象表示一个输出,allInputs:能链接到所有node的输入,enbaleInputs:对象数组,每个对象定义可以输入的圈信息(id对应节点,inputIndex对应输入点下标)
output: [
{
allInputs: true,
enbaleInputs: [{
id: '124',
inputIndex: 0
}]
}
]
};
let node2 = {
// 使用的模版,默认使用defaultTemplate
templateName: 'iconTemplate',
id: '124',
defineData: {
nodeName: '随机采样',
imgSrc: 'base64...'
},
// 画布中位置
position: [300, 100],
// 输入
input: [
{
}
],
// 输出
output: [
]
};

2,定义节点关系:

let edges = [
{
// 输出节点及输出圈,‘123:0’表示id为123的node的下标为0的输出点
src: '123:0',
// 输入节点及输入圈,'124:0'表示id为124的node的下标为0的输入点
to: '124:0'
}
];

3,实例化:

// 全局配置
let globalConfig = {
// 是否静态图片,true:节点和连线都不可拖动,false:可以添加事件监听
isStatic: false,
// 整个图默认模版,默认为defaultTemplate
templateName: 'defaultTemplate',
// templateName: 'iconTemplate',
// 是否需要自动排序,true: 程序智能计算每个node的位置,false: 根据node position来定位
autoSort: true,
// 自动排序时,true: 水平排序,false: 垂直排序
horizontal: false,
// 可选,node对齐方式,start: 水平排列时表示上对齐,垂直排列时表示左对齐 middle: 中间对齐 end: 水平排列时表示下对齐,垂直排列时表示右对齐
align: 'middle',
// 可选,beginX 起点X坐标,默认10
beginX: 30,
// 可选,beginY 起点Y坐标,默认10
beginY: 30,
// 可选,spaceX 横向间距,默认200
spaceX: 200,
// 可选,spaceY 纵向间距,默认100
spaceY: 60
};
// 实例化
let workflow = new AWrokflow(document.getElementById('aw'), {nodes, edges}, globalConfig);

API

接口文档:http://zhoushengfe.com/flow/api/index.html

基础概念

模版

模版是形状和样式的结合体,定义了节点(node)和连线(edge)的具体形状和样式 默认为defaultTemplate,由矩形和文案组成 系统还提供了iconTemplate模版,由一个icon和文案组成 当然还可以自定义模版,可以参考demo,定义了一个红色模版 定义的模版可以在node和edge中使用,这样就可以画出不同的节点和连线了

node

节点,可以定义使用的模版,模版中参数,输入,输出圈信息

edge

连线,可以定义模版,连线信息

高级用法,自定义node和edge的基础绘制方法

DrawView

在渲染工作流中,为了方便地处理缩放,所以整个工作流的图形集合是一个对象,对应zrender中的Group类,默认情况下是Aworkflow中的DrawView类,在DrawView中包含了NodeViewEdgeViewNodeViewEdgeView是由不同的Shape组成的Group。
如果想自定义一个渲染规则,可以参考src/draw/basicdraw/DrawView.js中的代码,使用Draw.extend()实现一个自定义的类,需要设置type字段,并且实现render()方法,render()方法中需要将最终使用的zrender的形状实例对象return出去,以便于在Aworkflow中add到zrender对象中。
(这个地方实现的好像不太好)

NodeView

Node是工作流中的节点,默认的实现类是src/draw/basicDraw/NodeView,父类是src/draw/Node,Node也是一个Group,包含了像文字(Text),图标(Image),矩形(Rect)等基本形状。在NodeView中render输入输出点的时候,会根据点的个数和Node的position来计算出每个点的坐标来绘制,同时可以在config中配置input或者output在node中的位置,如top、right、bottom、left。
同样,如果想要自定义一个Node,需要使用Node.extend()方法,需要定义type和实现render()方法,render()方法中需要将最终使用的zrender的形状实例对象return出去,以便于在DrawView或者父集合对象中add到对应的Group对象中。

EdgeView

Edge是工作流中的连线,默认的实现类是src/draw/basicDraw/EdgeView,父类是src/draw/Edge,Edge也是一个Group,包含了像贝塞尔曲线和三角形箭头基本形状。渲染连线需要在渲染节点之后进行,因为连线的信息只有节点信息没有坐标信息,所以需要在节点渲染后,根据起止节点来计算处连线的起始点坐标,同时会根据箭头的位置对终点坐标进行细微的调整。
同样,如果想要自定义一个Edge,需要使用Edge.extend()方法,需要定义type和实现render()方法,render()方法中需要将最终使用的zrender的形状实例对象return出去,以便于在DrawView或者父集合对象中add到对应的Group对象中。

Shape

Shape是一些基本形状,目前实现了的有BezierCurve、CirCle、Image、Text、React、Triangle,是对zrender中Displayable中的简单封装。在使用Shape的时候,需要先实例化,然后调用shape.init()方法实例化对应的zrender对象,init之后shape.dom中存储便是对应的zrender对象。 需要自定义Shape的时候,需要使用Shape.extend()方法。和上面几个类似,具体可参考src/draw/shape目录中的代码。

测试

npm run test

如何贡献

讨论

qq群:869605396

js关系图库:aworkflow的更多相关文章

  1. 几个js 拓扑图库

    计划做一个元数据平台, 因为要包含血缘分析功能, 所以要调研一下js 拓扑图库, 候选对象主要参考知乎上的问答, javascript 有哪些适合做网络拓扑图形展示的包? https://www.zh ...

  2. js流程图:aworkflow.js

    auto-workflow 用于快速构建各种关系图的库 github地址:https://github.com/auto-workflow/AWorkflow 快速开始 npm install awo ...

  3. 推荐一个很棒的JS绘图库Flot

    Flot是Ole Laursen开发的基于JQuery的纯JavaScript实现的绘图库,Flot使用起来非常简单,绘图效果相当绚丽,而且还支持一些图片的操作功能,例如图片的缩放.可以看一下Flot ...

  4. vis.js绘图库的一个BUG以及源码修正

    1. BUG 1.1 BUG触发情况 在使用vis.js绘图时,加入两个节点A和B之间既存在一条从A指向B的边,同时也存在一条从B指向A的边,那么这个绘图库就会崩溃. 1.2 BUG解析 vis.js ...

  5. 开源轻量级移动端友好的JS地图库——leaflet学习教程

    Leaflet 是一个为建设交互性好适用于移动设备地图,而开发的现代的.开源的 JavaScript 库.代码仅有 33 KB,但它具有开发在线地图的大部分功能.Leaflet设计坚持简便.高性能和可 ...

  6. js 关系运算符

    1.大于  >   (小于 效果一样) > //true > //false //false,如果有一个字符串,字符串转换成数值在比较 ' //true,如果两个都是字符串,则比较第 ...

  7. js关系运算符的用法和区别

    var num = 1;   var str = '1';   var test = 1;   test == num   //true 相同类型 相同值   test === num  //true ...

  8. JS获取元素CSS值的各种方法分析

    先来看一个实例:如何获取一个没有设置大小的字体? <!DOCTYPE html> <html lang="en"> <head> <met ...

  9. 【转载】《Ext JS 4 First Look》翻译之一:新特性

    免责声明:     本文转自网络文章,转载此文章仅为个人收藏,分享知识,如有侵权,请联系博主进行删除.     原文作者:^_^肥仔John      原文地址:http://www.cnblogs. ...

随机推荐

  1. 重载(overload),覆盖(override),隐藏(hide)的区别

    写正题之前,先给出几个关键字的中英文对照,重载(overload),覆盖(override),隐藏(hide).在早期的C++书籍中,可能翻译的人不熟悉专业用语(也不能怪他们,他们不是搞计算机编程的, ...

  2. 关于最大传输单元(MTU)的整理

    MTU设置不当,可能会导致许多网络问题,如某些网络应用无法使用,某些网站无法访问等.下面是在网上搜索整理的关于MTU设置的东西,某些可能未作验证,仅供参考. 1. 如何确定网络MTU 某些ISP接入的 ...

  3. 查看Unix/Linux的CPU个数和内存大小,系统位数(转载)

    一.AIX 1.查看CPU数: (1) smtctl 从AIX5.3起,对于power5的机器,系统引入了SMT(Simultaneousmulti-threading)的功能,其允许两个处理线程在同 ...

  4. TCP 三次握手 四次握手

    http://blog.chinaunix.net/uid-22312037-id-3575121.html http://www.centos.bz/2012/08/tcp-establish-cl ...

  5. Python极其简单的分布式异步作业管理系统RQ入门

    Python极其简单的分布式异步作业管理系统RQ入门 原创 2017-08-19 lixing 生信人 Python极其简单的分布式异步作业管理系统RQ入门 1. 什么是Job? Job直译过来就是工 ...

  6. Embarcadero RAD Studio 2016 Product Approach and Roadmap

    delphi  2016 路线图 http://community.embarcadero.com/article/news/16211-embarcadero-rad-studio-2016-pro ...

  7. malloc()与calloc区别 (转)

    另外说明: 1.分配内存空间函数malloc 调用形式: (类型说明符*) malloc (size) 功能:在内存的动态存储区中分配一块长度为"size" 字节的连续区域.函数的 ...

  8. idea使用jrebel热部署插件

    首先通过idea下载JReble插件 访问http://idea.lanyus.com/网站 跟着弹出框的步骤走就可以实现了: 在idea中使用tomcat部署项目 不要使用war:使用下面的文件

  9. 关于StringUtils类isEmpty、isNotEmpty、isBlank、isNotBlank针对null、空字符串和空白字符(如空格、制表符)的区别

    isEmpty | null | 空字符串("")|空白字符(空格.制表符)| | isEmpty | true | true | false | | isNotEmpty | f ...

  10. Texture Format全解析

    [Texture Format全解析] What internal representation is used for the texture. This is a tradeoff between ...