关于流程图:流程图之美手把手教你设计一个流程图

前言 流程图是一种图形化工具,次要用于示意实现一项工作的流程、工作流或具体方法。它通过箭头连贯各种符号来展现流程步骤,并且通常从一个明确的起始点登程,依照肯定的程序和门路进行开展。明天小编就以葡萄城公司的纯前端表格控件——SpreadJS为例,为大家介绍如何设计一个流程图。 环境筹备 SpreadJS在线表格编辑器 操作步骤 1、关上SpreadJS在线表格编辑器,新建一个工作簿。 2、点击【开始】,而后抉择【格局】,在格局下拉框中抉择【主动调整列宽】,将默认列宽设置为20。 3、点击菜单【设置】,抉择【惯例】,并将列数设置为200。 4、点击菜单【插入】,抉择【形态】,而后在形态下拉框中抉择【圆角矩形】。 5、在形态中,能够设置款式,如色彩,线条款式等,咱们先创立一个流程图中的开始节点,而后别离批改它的色彩、字体和文本。 设置颜色代码为61,113,250设置字体加粗设置文本居中6、插入矩形后,接下来插入线条,点击【插入】,抉择【形态】,而后在形态下拉框中抉择【线条】。 而后调整箭头的地位、色彩和粗细,如下所示: 7、最初调整箭头的格局,实现成果如下图所示: 总结 以上就是实现一个流程图的全过程,如果您想理解更多信息,欢送点击这篇参考资料查看。 扩大链接: 轻松构建低代码工作流程:简化繁琐工作的利器 优化估算治理流程:Web端实现预算编制的利器 如何在.NET电子表格应用程序中创立流程图

February 20, 2024 · 1 min · jiezi

关于流程图:竟然支持在流程图架构图中添加数学公式安利一款纯免费的画图工具真不错

1. 简介思考到在绘图中须要增加数学表达式的场景,PDDON提供了LaTeX表达式编辑能力,能够在任何能够编辑的组件上启用LaTeX性能,应用LaTeX语法编写数学公式即可。LaTeX表达式简介: LaTeX(LATEX,音译“拉泰赫”)是一种基于的排版系统,由美国计算机学家 莱斯利·兰伯特(Leslie Lamport)在20世纪80年代初期开发,利用这种格局,即便使用者没有排版和程序设计的常识也能够充分发挥由TeX所提供的弱小性能,能在几天、甚至几小时内生成很多具备书籍品质的印刷品。对于生成简单表格和数学公式,这一点体现得尤为突出。因而它十分实用于生成高印刷品质的科技和数学类文档。这个零碎同样实用于生成从简略的函件到残缺书籍的所有其余品种的文档。LaTex罕用语法材料参考https://www.latex-project.org/罕用但绝非史上最全的LATEX数学表达式Latex罕用公式整顿2. 应用示例简略数学表达式展现 流程图中增加数学表达式 3. 残缺示例在PDDON内任意类型绘图,新建可编辑组件右键菜单启用LaTeX表达式即可编辑数学表达式 4. 总结PDDON除了能够反对用来编写数学表达式,还反对UML建模、数据库建模、画流程图、架构图、思维导图、数据库模型图、鱼骨图、韦恩图、网络拓扑图、自在格调绘图等等一系列绘图,有了PDDON,再也不必放心找不到好用的画图工具了。 能够关注PDDON在线画图公众号,珍藏、点赞、不迷路哦,感谢您的浏览。

April 22, 2023 · 1 min · jiezi

关于流程图:这么好用的免费画流程图工具错过后悔一万年支持流程图UML活动图BPMN哦

PDDON在线画图作为最好用的收费画流程图工具,为用户绘制流程图、流动图、bpmn都提供了反对,还额定提供了很多智能辅助画图性能,更易于应用。 那么pddon与其余画图软件有哪些区别呢? 在线画图,关上浏览器就能用,无论windows、mac、linux零碎,反对市面上大部分浏览器:chrome、Firefox、edge、360平安/极速、Safari等浏览器,最好都应用新版本浏览器,画图体验更好,IE不提供反对,UC浏览器兼容性也比拟差,不倡议应用,而且手机上也能画图哦!PDDON完全免费,但不同于其余免费软件,PDDON十分好用,而且始终在迭代更新,致力于提供更简略高效好看的绘图软件服务pddon为每种类型绘图做了定制化性能加强,并非是纯图形绘制,在逻辑性能上进行加强,更易于应用对程序员和设计者更敌对,提供了低代码能力,主动生成SQL和代码节俭了编码的工夫,而且不易出错,能最大水平放弃设计稿与代码的一致性国人开发的,性能体验对国内用户更敌对提供了很多傻瓜式的智能操作性能,能疾速一键切换连线、绘图格调智能辅助绘图性能简化用户操作,对无绘图教训的用户更敌对性能简化用户操作,对无绘图教训的用户更敌对近期刚推出1.0版本,广受用户青睐,好评一直PDDON反对以下个性: 创立绘图可选类型反对:流程图、架构图、UML图、网络拓扑图、bpmn、思维导图、韦恩图 、鱼骨图、自在格调绘图等等每种绘图都提供了合乎各自个性的辅助画图能力,让你的画图更轻松,绘图更丑陋 如果你找不到适合的绘图类型,能够抉择自在绘图类型,反对白板作图,不做任何限度,任何绘图都反对,当然也失去了已有绘图类型提供的一些辅助画图能力,所以只举荐在零碎未提供类型的状况下应用哦。画图工作区反对多个绘图同时编辑,绘图间能够通过快捷键共享和复用数据同一画图工作区关上多个绘图,绘图间数据能够共享,便于绘图间数据交换反对一键转手绘、草图格调能够调整手绘芜杂度、填充格调、线条格调,绘制各式各样的草图格调。反对LaTeX表达式编写数学公式可用于任何可输出的组件,均反对增加数学公式为各类型绘图提供了特定辅助绘图性能比方地位主动吸附对齐、格调追随、连线门路主动优化、嵌套组件 主动吸附关联、组件性能加强等等反对一键丑化绘图PDDON为不同类型的绘图指定了合乎绘图格调类型的丑化能力,主动计算并调整组件、连线地位、款式等。以辅助画图人员更便捷的画图反对对象建模、数据库建模UML类图能够进行对象建模,实时代码预览,可打包下载 数据库ER图反对数据库建模,实时SQL预览,可打包下载 UML类图和ER图之间能够疾速互转,便于二次细化设计 指标类型、命名等等能够主动转换,无需手动批改 组件库丰盛,且可自定义组件为不同类型绘图提供了专有组件库反对抉择应用零碎预置的泛滥组件库,现已反对cisco、阿里云、aws云、bpmn等组件库,还在一直裁减中 反对DIY手动设计绘图 组件、也可上传本地图片、在线图片等反对搜寻网络图片连线款式灵便丰盛预置了大量连线款式,抉择即可应用 还具备一键切换所有连线款式格调反对罕用快捷键反对操作有:复制、剪切、粘贴、删除、分组、挪动、对齐、下载、导入导出、保留等等。而且所有操作均反对多选,反对多个绘图间共享数据,快捷键都是可用的。提供了组件分组、对齐、尺寸调整、挪动、抉择、组件/连线格调调整、层叠程序调整、撤销/复原、导航预览、组件类型替换、旋转等等根本绘图性能拖动组件地位有参考线主动对齐和吸附性能提供了很多高级组件,具备各自的超能力提供了大量优质模板和教程模板核心提供了大量可克隆的绘图模板,一键应用即可,完全免费! 新建绘图也能够抉择应用模板 社区内提供了大量繁难入门教程,不便您的应用 数据安全,导入导出性能为你的绘图数据安全保驾护航PDDON不收集您的用户信息、云端不会保留您的画图数据,仅仅为您提供绘图能力服务。 如果须要把数据存储到云端,后续会推出第三方受权存储服务,您只管欢快的画图,其余的交给PDDON。反对跨端跨平台无论应用手机、电脑,无论在何地,只须要认准网址:http://pddon.com,用浏览器关上它,就能够画图了关上微信搜寻:PDDON在线画图,关注我,不迷路哦 浏览器搜寻:PDDON ,也可找到我画图工作空间架构图 流程图 状态图/流动图 用例图 时序图 类图 韦恩图 自在格调 上面就带大家看看PDDON绘制的精美绘图吧架构图 流程图 UML图 其余绘图 总结PDDON除了能够用来画流程图,还反对架构图、思维导图、UML建模、数据库模型图、鱼骨图、韦恩图、网络拓扑图、自在格调绘图等等一系列绘图,关注PDDON在线画图公众号,再也不必放心找不到好用的画图工具了。 PDDON申明:提供的画图性能绝不免费,欢送大家收费应用。 喜爱的敌人能够关注我,定期分享画图教程和绘图模板。 ...

April 20, 2023 · 1 min · jiezi

关于流程图:Mac综合图示制图软件edraw-max-9

十分弱小的综合图示绘制软件edraw max,能够帮忙您轻松创立流程图、网络拓扑图、组织结构图、商业图表、工程图,思维导图、软件设计图和立体布局图等等!而且edraw max mac版应用的范畴十分的宽泛,蕴含了3D 图形、方向图、软件设计、UML等,亿图图示mac宽泛使用于各大商业,企业,教育事业,以及集体工作需要。 edraw max for mac装置

August 8, 2022 · 1 min · jiezi

关于流程图:哪个绘图软件最好用

ioDraw 劣势:反对流程图,思维导图,甘特图,能够实时保留到百度网盘,高清图片导出,无文件数量限度,无需注册,开源收费 缺点:不反对协同办公 腾讯文档 劣势:反对流程图,思维导图,能够协同办公 缺点:高清图片导出需开明VIP ProcessOn 劣势:反对流程图,思维导图 缺点:有文件数量限度 迅捷画图 劣势:反对流程图,思维导图 缺点:开明会员才是爸爸 Visio 劣势:功能强大 缺点:须要购买正版装置软件 Xmind 劣势:反对思维导图 缺点:不能画流程图 金山文档 劣势:反对流程图,思维导图,不限度文件数量 缺点:非会员不能插入图片 亿图图示 劣势:反对流程图,思维导图 缺点:开明会员才是爸爸

December 12, 2021 · 1 min · jiezi

关于流程图:从0到1实现流程图应用01开篇

开始一个图能够简略的解释一个简单的思维,同样,一个流程图能够清晰的可视化展现组织、工作流等简单层次结构。在前面的一系列文章中,将会从 0 到 1 实现一个流程图利用的开发。如果对你的工作有帮忙或者你对图编辑引擎感兴趣,请静下心来读完这一系列文章,置信会有惊喜。 技术选型提到绘图能力,web次要有两种实现形式:Canvas 和 SVG,咱们看看这两种有什么差别: 计划图形定制能力上手难度性能Canvas定制图形比较复杂较高大数据量场景性能突出SVG基于 DOM,图形定制能力强较低大数据量场景性能较差再来看看前端社区开源解决方案: jTopo简介:jTopo 是一款齐全基于HTML5 Canvas的关系、拓扑图形化界面开发工具包官网:http://www.jtopo.com/长处:国产,文档简略,性能优越毛病:没有凋谢源代码,2015 年曾经进行更新,在 Vue/React/Angular 等古代框架中应用老本高 Vis.js简介:Vis.js 是基于 HTML5 Canvas 开发的动静可视化库。该库被设计为易于应用,解决大量的动态数据官网:https://visjs.org/长处:开源收费,性能优越,性能比拟丰盛毛病:英文文档,上手老本较高,节点定制能力较弱 LogicFlow简介:专一流程可视化的前端解决方案官网:http://logic-flow.org/长处:具备流程图利用的罕用性能,扩展性强毛病:内置连线性能较弱,定制简单节点比拟麻烦 Jsplumb简介:jsPlumb 是一个比拟弱小的绘图组件官网:https://jsplumbtoolkit.com/长处:功能丰富,反对各种自定义操作毛病:分免费版和社区版,社区版性能较弱 Joint简介:JointJS 是一个开源前端框架,反对绘制各种各样的流程图、工作流图等。Rappid 是 Joint 的商业版,提供了一些更强的插件官网:https://www.jointjs.com/长处:性能非常欠缺,上手比拟容易毛病:布局能力较弱,节点定制能力个别 AntV G6简介:G6 是一个图可视化引擎。它提供了图的绘制、布局、剖析、交互、动画等图可视化的根底能力官网:https://g6.antv.vision/zh/长处:性能齐备,扩展性强,性能好,反对大量布局算法毛病:节点定制能力个别 AntV X6简介:X6 是 AntV 旗下的图编辑引擎,提供了一系列开箱即用的交互组件和简略易用的节点定制能力,不便咱们疾速搭建 DAG 图、ER 图、流程图等利用官网:https://x6.antv.vision/zh长处:节点极易定制,反对 React/Vue 节点,上手成本低,反对大量布局算法毛病:基于 SVG,性能个别 最初图形定制能力强、上手成本低是咱们须要重点思考的中央,另外一方面流程图场景,不须要渲染大量的节点,所以 X6 更适宜来实现咱们的流程图利用。 源码:传送门记得给 X6 仓库加星

June 17, 2021 · 1 min · jiezi

关于流程图:程序流程图-规范与画图

Typora 反对应用 mermaid 进行绘图,其中就包含流程图。 日常生活中利用流程图的场景并不算太多,在写代码的过程中也更偏差应用伪代码。近期读《计算机程序设计艺术》卷一,上来就是一张流程图,不知怎的,忽然感觉流程图不可或缺。或者流程图搭配伪代码更好。 以上是我强行扯出的写本文的理由。 对于 mermaidmermaid 泛滥代码绘图工具之一。最先接触的是 PlantUML,过后为了画类图交软件文档,但又不想手动画,于是搜寻到了这个工具。PlantUML 如其名,次要是 UML图,反对的图较少,且依赖较多,配置的步骤较多。 mermaid 尽管没有 PlantUML 那样残缺反对 UML,但根本的图形都能绘制,且感激大前端的倒退,其只是一个“简略”的 .js 文件,导入浏览器导出应用,在 Markdown 这种兼容 HTML 的标记语言下,真心流程。 它反对简略的程序流程图,之所以说简略,是因为残缺的流程切实太过于简单。如果用不上,简单的就搁置吧,mermaid 曾经足够应用了。 装置 mermaid参考 装置教程。 接触 mermaid 次要是 Typora 自身反对应用 mermaid,我的计划是在 Typora 实现编辑,随后导出 HTML,再到某个反对 Markdown 的平台进行公布。局部网站本身反对 mermaid。 绘制到简略流程图如下: graph LRA([开始]) --> B[/编辑文章/]B --> C{内容实现?}C -->|是| D{再编辑?}C -->|否| BD -->|否| Save[保留]Save --> E{导出?}D -->|是| BE -->|否| End([完结])E -->|是| ExportHTML[/导出HTML/]ExportHTML --> Publish[公布]Publish --> EndMarkdown 中应用 mermaid在 Typora 应用 mermaid 很简略,间接引入代码即可: ...

May 30, 2021 · 4 min · jiezi

drawio-一款媲美Visio的免费流程绘制工具

推荐一款功能强大好用的免费绘图工具 draw.io,可以绘制流程图、架构图、网络拓扑图、E-R图、PPT商务图表等,支持在线绘制和桌面版。使用步骤非常简单,以在线绘制为例: 1. 打开网站 https://www.draw.io/2. 创建图表(可以切换语言) 3. 选择需要绘制的图表 4. 开始画图 5. Export 导出图片格式Save/Save as可以保存源文件,以便下次导入编辑。 diboot 简单高效的轻代码开发框架 (欢迎star)

November 5, 2019 · 1 min · jiezi

流程图制作-BPMN流程图在线绘制

bpmnBPMN(业务流程建模符号) 是业务流程建模现代化的标准,由BPMI符号工作组五月制定2004年版的2.0 BPMN发布于2010年在英国最初的规范写由对象管理组。 BPMN的目标是: 负责流程实施的技术专家;创建和改进流程的业务分析师;监控和控制流程的经理。通过这种方式,BPMN可以作为业务流程及其实现之间的链接。 bpmn 作用业务流程模型和表示法(BPMN)提供了任何人都可以轻松理解的业务工作流程的图形表示;帮助进行业务流程分析和业务流程改进。当以图表形式呈现时,复杂的业务流程和工作流更容易理解。 使用在线制图工具绘制 BPMNFreedgo Design具有完整的BPMN图标和简单易用的绘制方法,使业务流程图制作的用户可以轻松识别元素绘制美观大方的BPMN图。 以下是通过Freedgo 制作的图例 BPMN 图标:BPMN通用 BPMN网关 BPMN事件 如何制作在线绘图_BPMN?下面列出了如何使用Freedgo Design制作轻松创建BPMN的步骤。借助拖放式图标和直观的界面,使用在线可视化视图制作BPMN既快速又简单。 现在,一起开看如何使用Freedgo Design制作好看的BPMN。 步骤一:访问 https://www.freedgo.com ,先注册一个用户,注册成功后,登录到 首页 步骤二:访问 https://www.freedgo.com/draw_... ,进入制图页面,或者从 首页 页面 顶部菜单点击开始制作。 进入制图页面后 点击 文件 -> 从类型中新建 -> 业务设计 -> BPMN图 或者点击图例,在图例中找到 业务设计 -> BPMN图,选择一个类似的图例进行改动 步骤三:从左侧符号栏拖拽合适的几何图形至画布,松手后,椭圆图形就被固定画布上,双击几何图形,还可输入文字。当鼠标放置在图形上时,图形四周会显示“小三角形”,是为了方便用户点击后能够快速生成新的图形。 步骤四:软件提供多种连接样式,在该在线绘图BPMN中,可以选择普通的直角连接线。在连接线上,还可以输入文字做进一步的说明。 步骤五:在线绘图制作工具拥有一套功能丰富的样式,用户可以对图形进行单色填充、渐变填充、文本大小位置颜色调整。经过图案填充后颜值提升了不少。 步骤六:按照绘图要求,一步一步的地完成在线绘图_BPMN的绘制。最终完成了整幅的绘制任务。 更多基本流程的例子 请参考 [图例] (https://www.freedgo.com/showc... 或者直接访问 : https://www.freedgo.com/showc...

June 4, 2019 · 1 min · jiezi

基本流程图的制作通过在线制图工具绘制

流程图流程图是工作中常见的图示,主要由线条、几何图框以及文字构成。按照功能的不同,流程图又分为基本流程图、散页流程图、跨职能流程图、数据流程图以及事件流程图等。基本流程图是其中较为常用的,可用于描述一个项目或事件的流程,直观的图表样式有助于读图者理解。 流程图是由表示过程或计划的连接形状构成的图表。下面是一个简单流程图的例子,说明客户服务的过程。 流程图定义传统上,流程图起源于计算机科学,作为表示算法和计算机程序的工具,但是流程图的使用已经扩展到所有其他类型的过程的表示。如今,流程图在显示信息和辅助推理方面发挥着极其重要的作用。它们帮助我们可视化复杂的过程,或者明确问题和任务的结构。流程图也可以用来定义要实现的过程或项目。 流程图常用符号在标准流程图中,不同的形状有不同的传统意义。一些更常见形状的含义如下: 开始、结束节点代表系统的起点或终点。 起点(start): 终点(end) 流程(process): 代表某种特定的操作 文档(document)代表某些特定的输出,如说明或者报告 判断器(Decision) 菱形代表条件或分支。菱形连接的分支的线条表示不同的可能情况,导致不同的子过程。 数据(data) 它代表进入或离开系统的信息。输入可能是客户的订单。输出可以是要交付的产品。 子流程&预定义流程 内部存储 页面引用(On-Page Reference) 这个符号里面会有一个字母。它表示流程在同一页面上包含相同字母的符号上继续。 页面外部引用(Off-Page Reference) 这个符号里面会有一个字母。它表示流程在不同页面的其他地方包含相同字母的匹配符号上继续。 延迟或瓶颈 (Delay or Bottleneck) 识别延迟或瓶颈。 流程运动方向(flow) 线条代表流程的顺序和方向。 流程图的益处将工作过程的复杂性、有问题的地方、重复部分、多余环节以及可以简化和标准化的地方都显示出来;将实际的和想象的过程流程进行比较和对照、以便寻求改进过程的机会;提供了一个直观而通俗地展示复杂过程的工具流程图的制作创建流程图的方式有很多,若选择在线绘制流程图,推荐使用在线制图网站: freedgo Design。 freedgo Design ,其访问地址为: https://www.freedgo.com 。freedgo design 在线制图网站是一款多类型的图形图表设计软件,软件内容自带丰富的几何图形模板,可以用于绘制专业的流程图,泳道图、影响图、SDL图、审批图、会计流程图等。 在具体的流程图中需要把业务逻辑分解成更小、更具体的步骤。 然后,考虑流程中任何可能的异常,如果是,为备选路径添加决策节点。 继续重复这个过程,直到你达到了每个人都能完全理解的简单步骤。 现在,一起开看如何使用Freedgo Design制好看的流程图。 步骤一:访问 https://www.freedgo.com ,先注册一个用户,注册成功后,登录到 首页 步骤二:访问 https://www.freedgo.com/draw_... ,进入制图页面,或者从 首页 页面 顶部菜单点击开始制作。 进入制图页面后 点击 文件 -> 从类型中新建 -> 流程图 -> 一般流程图 ...

May 28, 2019 · 1 min · jiezi

初见 g6 图表库

hello world// 1. 准备好数据// node(节点)let nodes = [ { id: 1, // 节点 id x: 0, // 节点 x 坐标 y: 0 // 节点 y 坐标 }, { id: 2, x: 100, y: 0 }]// edge(边)let edges = [ { source: ‘2’, // 节点 id,从哪里出发 target: ‘1’ // 节点 id,到哪里结束 }]// 2. 初始化对象let g6 = new G6.Graph({ container: ‘container’, // 容器 id fitView: ‘cc’, // 渲染位置,cc 表示渲染到图表的中间位置(center center) height: window.innerHeight // 画布高})// 3. 渲染数据g6.read({ edges, nodes })这是渲染出来的效果。Demo源码, 官方文档。自定义节点可以看到默认的节点是一个蓝色的圈,如果要想改变节点的样子,就需要用到自定义节点。// 1. 准备好数据// node(节点)let nodes = [ { id: 1, // 节点 id x: 0, // 节点 x 坐标 y: 0, // 节点 y 坐标 name: ‘张三’ // 自定义数据 }, { id: 2, x: 100, y: 0, name: ‘李四’ // 自定义数据 }]// edge(边)let edges = [ { source: ‘2’, // 节点 id,从哪里出发 target: ‘1’ // 节点 id,到哪里结束 }]// 2. 初始化对象let g6 = new G6.Graph({ container: ‘container’, // 容器 id renderer: ‘svg’, fitView: ‘cc’, // 渲染位置,cc 表示渲染到图表的中间位置(center center) height: window.innerHeight // 画布高})// 3. 注册节点G6.registerNode(‘rect’, { draw (item) { const group = item.getGraphicGroup() const model = item.getModel() let size = 50 let center = size / 2 // 绘制文本节点 let rect = group.addShape(‘rect’, { attrs: { x: 0, y: 0, width: size, height: size, fill: ‘#6cf’ } }) // 绘制圆形 let circle = group.addShape(‘circle’, { attrs: { x: center, y: center, r: center, fill: ‘#ddd’, stroke: ‘#f06’ } }) // 绘制文本节点 let text = group.addShape(’text’, { attrs: { x: 0, y: 0, fontSize: 20, fill: ‘#000’, stroke: ‘orange’, text: id:${model.id} } }) // 绘制 dom 元素 let dom = group.addShape(‘dom’, { attrs: { x: 0, y: 0, width: size, height: size, html: <div>你好呀${model.name},你好呀${model.name}</div> } }) return group }})// 4. 使用节点g6.node({ shape: ‘rect’})// 5. 渲染数据g6.read({ edges, nodes })下图是渲染出来的效果。Demo源码,官方文档。自定义节点的时候有以下现象:添加 shape 有先后顺序,后面会覆盖前面的。像是 dom 的 z-index添加 text 节点的时候,其它 shape 会避让。同样坐标设置的都是 [0, 0],文字会渲染在顶部。链接线会以 return 元素为基准。如果 return text,线会连在 text 节点那里;如果 return group,就是整体的中间。model 里可以取出定义 node 的时候的其它数据,比如例子里的 name。绘制的元素大小指定后,超出的部分会被裁切,比如例子里的 dom。绘制 dom 元素时,需要在初始化对象的时候,指定 new G6.Graph({ renderer: ‘svg’ }) 。自定义边自定义边的使用方法跟自定义节点的使用方式类似。// 1. 准备好数据// node(节点)let nodes = [ { id: 1, x: 0, y: 0 }, { id: 2, x: 100, y: 0 }, { id: 3, x: 100, y: 50 }]// edge(边)let edges = [ { source: 1, // 节点 id,从哪里出发 target: 2 // 节点 id,到哪里结束 }, { source: 1, // 节点 id,从哪里出发 target: 3 // 节点 id,到哪里结束 }]// 2. 初始化对象let g6 = new G6.Graph({ container: ‘container’, // 容器 id fitView: ‘cc’, // 渲染位置,cc 表示渲染到图表的中间位置(center center) height: window.innerHeight // 画布高})// 3. 自定义边G6.registerEdge(’line’, { // 路径 getPath (item) { const points = item.getPoints() const start = points[0] const end = points[points.length - 1] return [ [ ‘M’, start.x, start.y ], [ ‘L’, end.x, end.y ] ] }, // 起始(圆形)箭头 startArrow: { path () { const r = 5 const x = -5 const y = 0 return [ [ ‘M’, x, y - r ], [ ‘a’, r, r, 0, 1, 1, 0, 2 * r ], [ ‘a’, r, r, 0, 1, 1, 0, -2 * r ], [ ‘z’ ] ] }, shorten () { return 10 }, style (item) { const keyShape = item.getKeyShape() const { strokeOpacity, stroke } = keyShape.attr() return { fillOpacity: strokeOpacity, fill: ‘#fff’, stroke } } }})// 4. 使用边g6.edge({ shape: ’line’, startArrow: true, // 添加头部箭头 color: ‘red’, endArrow: true // 添加尾部箭头})// 5. 渲染数据g6.read({ edges, nodes })这是渲染出来的效果。Demo源码,官方文档。自定义节边的时候有以下现象:自带的边是有透明度灰色的线。设置 { endArrow: true } 之后就会在结束点加上箭头。颜色可以直接设置 color,也可以是同 style 绘制。添加事件// 1. 准备好数据// node(节点)let nodes = [ { id: 1, x: 0, y: 0 }, { id: 2, x: 100, y: 0 }, { id: 3, x: 100, y: 50 }]// edge(边)let edges = [ { source: 1, // 节点 id,从哪里出发 target: 2 // 节点 id,到哪里结束 }, { source: 1, // 节点 id,从哪里出发 target: 3 // 节点 id,到哪里结束 }]// 2. 初始化对象let g6 = new G6.Graph({ container: ‘container’, // 容器 id fitView: ‘cc’, // 渲染位置,cc 表示渲染到图表的中间位置(center center) height: window.innerHeight // 画布高})// 3. 添加事件监听g6.on(’node:click’, (e) => { const { item } = e const { id, x, y } = item.getModel() alert(id:${id}, x:${x}, y:${y})})// 4. 渲染数据g6.read({ edges, nodes })事件的监听是组合的,组合方式就是 [对象]:[事件],’node’,’edge’,‘group’, ‘guide’,都可以自由组合使用,如 node:click, edge:dbclick。Demo源码,官方文档。 ...

March 25, 2019 · 4 min · jiezi

JointJS中文文档

JointJS中文文档JointJS是一款功能强大的图形可视化交互工具,可用来开发流程图,思维导图等复杂图形交互应用核心概念paper和graphpaper即画布,图形将在paper上绘制 graph即图形数据,可与paper进行绑定,对graph的修改会即时反映到paper上一个graph可与多个paper绑定cellView和cellcellView: 视图元素,是paper的基本元素,用来处理UI交互cell: 图形元素,是graph的基本元素,用来存储图形元素数据cellView可以通过.model属性获取它的cellgraph其实就是cell的集合link和elementcell有两种类型,link是连线,element是节点他们的视图元素对应为linkView和elementViewsource和target即连线的起点和终点port端口,依附于图形节点,可以被连线连接坐标系统client - 相对于浏览器窗口page - 相对于bodylocal - 图形绝对坐标paper - 图形画布坐标 (画布是可以移动的,当画布移动时paper坐标会改变,而local坐标不会改变)The joint namespacejoint.dia模型(类)库,包含: Paper Graph Cell CellView Element Link 等等joint.shapes图形元素样式库,包含多个分组(basic standard custom …)以basic为例,其下有Circle Ellipse Rect Text等多个图形元素APIPaper option实例化参数 new joint.dia.Paper(option)el: 图形容器model: 图形数据,此处可绑定graphwidth: 图形宽度height: 图形高度drawGrid: 栅格参考线gridSize: 参考线密度background: 背景defaultLink: 默认连线样式interactive: 控制元素的交互属性(例如是否可以移动)Paper prototype methodpaper实例方法findViewByModel(model)通过model(即cell)寻找到对应的cellViewgetContentBBox()获取paper内图形实体(不包含空白)的边界(client坐标)getContentArea()获取paper内图形实体(不包含空白)的边界(local坐标)paperToLocalPoint(point) or (x, y)将paper坐标的point转换成local坐标类似的转换: localToPaperPoint pageToLocalPoint 等等paperToLocalRect(rect)将paper坐标的rect转换成local坐标类似的: localToPaperRect pageToLocalRect 等等scale(scale) or (sx, sy)将paper缩放至指定倍数如果参数为空,将返回paper当前的缩放倍数translate(x, y)将paper原点移动到指定坐标(原点在左上角)如果参数为空,将返回paper当前的位移Graph prototype methodgraph实例方法addCell(cell)添加一个元素addCells(cells)添加一组元素getCell(modelId)获取指定id的元素getCells()获取所有元素getElements()获取所有节点getLinks()获取所有连线clear()清空所有元素getNeighbors(element [, opt])获取与某节点相连的所有连线toJSON()导出JSONfromJSON(json)导入JSONCell模型Cell.prototype.define(type [, properties])定义一个新的图形元素,或继承一个已有的元素// Define a new Ellipse class in joint.shapes.examples namespace// Inherits from generic Element classvar Ellipse = joint.dia.Element.define(’examples.Ellipse’, { // default attributes markup: [{ tagName: ’ellipse’, selector: ’ellipse’ // not necessary but faster ], attrs: { ellipse: { fill: ‘white’, stroke: ‘black’, strokeWidth: 4, refRx: .5, refRy: .5, refCx: .5, refCy: .5 } }});// Instantiate an elementvar ellipse = (new Ellipse()).position(100, 100).size(120, 50).addTo(graph);// Define a new ColoredEllipse class// Inherits from Ellipsevar ColoredEllipse = Ellipse.define(’examples.ColoredEllipse’, { // overridden Ellipse default attributes // other Ellipse attributes preserved attrs: { ellipse: { fill: ’lightgray’ } }}, { // prototype properties // accessible on this.(...) - as well as, more precisely, this.prototype.(...) // useful for custom methods that need access to this instance // shared by all instances of the class randomizeStrokeColor: function() { var randomColor = ‘#’ + (‘000000’ + Math.floor(Math.random() * 16777215).toString(16)).slice(-6); return this.attr(’ellipse/stroke’, randomColor); }}, { // static properties // accessible on this.constructor.(...) // useful for custom methods and constants that do not need an instance to operate // however, a new set of static properties is generated every time the constructor is called // (try to only use static properties if absolutely necessary) createRandom: function() { return (new ColoredEllipse()).randomizeStrokeColor(); }});// Instantiate an elementvar coloredEllipse = ColoredEllipse.createRandom().position(300, 100).size(120, 50).addTo(graph);markupmarkup(标签)是用来生成svg元素的模板,可以接收XML标签或JSON对象markup: ‘<rect class=“rectangle”/>‘markup: [{ tagName: ‘rect’, selector: ‘body’}]attrsattrs(属性)用来定义svg元素的样式,通过selector或标签名查找对应的元素attrs: { ellipse: { fill: ’lightgray’ }, body: { fill: ‘white’ }}Cell.prototype.attr()设置cell的attrs属性Cell.prototype.prop()设置cell的属性,包括自定义属性cell.attr(‘body/fill’, ‘black’)cell.prop(‘attrs/body/fill’, ‘black’)cell.prop(‘attrs’, {body: {fill: ‘black’}})cell.prop(‘custom’, ‘data’)Cell.prototype.isElement()判断元素是否是节点Cell.prototype.isLink()判断元素是否是连线Cell.prototype.addTo(graph)添加到graphCell.prototype.remove()移除元素Element图形节点模型,继承自CellElement模型示例{ id: ‘3d90f661-fe5f-45dc-a938-bca137691eeb’,// Some randomly generated UUID. type: ‘basic.Rect’, attrs: { ‘stroke’: ‘#000’ }, position: { x: 0, y: 50 }, angle: 90, size: { width: 100, height: 50 }, z: 2, embeds: [ ‘0c6bf4f1-d5db-4058-9e85-f2d6c74a7a30’, ‘cdbfe073-b160-4e8f-a9a0-22853f29cc06’ ], parent: ‘31f348fe-f5c6-4438-964e-9fc9273c02cb’ // … and some other, maybe custom, data properties}Geometry 几何属性position 坐标,可通过.position()方法设置angle 旋转,可通过.rotate()方法设置size 尺寸,可通过.resize()方法设置Presentation 外观attrs 同Cell,通过.attr()方法设置z 层级Nesting 嵌套embeds 子节点idsparent 父节点idElement prototype methodgetBBox() 获取节点的bounding box(边界,rect)portProp(portId, path, [value]) 设置端口属性element.portProp(‘port-id’, ‘attrs/circle/fill’, ‘red’);element.portProp(‘port-id’, ‘attrs/circle/fill’); // ‘red’element.portProp(‘port-id’, ‘attrs/circle’, { r: 10, stroke: ‘green’ });element.portProp(‘port-id’, ‘attrs/circle’); // { r: 10, stroke: ‘green’, fill: ‘red’ }Ports端口,依附于图形节点,可以被连线连接Port API on joint.dia.Element以下是与port相关的Element的实例方法hasPort / hasPortsaddPort / addPortsremovePort / removePortsgetPort / getPortsportPropgetPortPositionsPort示例// Single port definitionvar port = { // id: ‘abc’, // generated if id value is not present group: ‘a’, args: {}, // extra arguments for the port layout function, see layout.Port section label: { position: { name: ‘right’, args: { y: 6 } // extra arguments for the label layout function, see layout.PortLabel section }, markup: ‘<text class=“label-text” fill=“blue”/>’ }, attrs: { text: { text: ‘port1’ } }, markup: ‘<rect width=“16” height=“16” x="-8" strokegit =“red” fill=“gray”/>’};// a.) add a port in constructor.var rect = new joint.shapes.standard.Rectangle({ position: { x: 50, y: 50 }, size: { width: 90, height: 90 }, ports: { groups: { ‘a’: {} }, items: [port] }});// b.) or add a single port using APIrect.addPort(port);Port属性group 类似于css的class,定义一组port的属性args 布局参数label 文字Link图形连线模型,继承自CellLink示例var link = new joint.dia.Link();link.source({ id: sourceId }, { anchor: defaultAnchor });link.target({ id: targetId, port: portId });link.addTo(graph)Link属性anchor 锚点,link与element的连接点connectionPoint 视图邻接点例如,当anchor在节点元素中心时,我们并不需要把连线真的画到中心,而只要连到节点的边界上即可vertices 连线上的折点connector 线型’normal’ - 普通’jumpover’ - 连线交叉时显示一个bridge’rounded’ - 转折处显示为圆角’smooth’ - 贝塞尔曲线router 路径,设置router之后连线不再呈直线连接,而是通过一条设定的路线’normal’ - 普通线’orthogonal’ - 基础版的正交折线’manhattan’ - 优化版的正交折线’metro’ - 另一种正交折线’oneSide’ - 单侧正交折线Link实例方法source(source [, opt]) 设置起点target(target [, opt]) 设置终点// opt示例link.source({ id: sourceId }, {anchor})connector() 设置线型router() 设置路径vertices() 设置折点事件Paperpointerclick点击事件可以添加前缀,以区分不同的点击区域(blank是空白区域):cell:pointerdblclick link:pointerdblclick element:pointerdblclick blank:pointerdblclickpointerdown鼠标按下pointermove鼠标拖拽pointerup鼠标松开link:connect连线连接时触发Graphadd新建图形remove移除图形change图形属性改变change可以添加后缀,以区分不同的属性改变:change:position 节点位置改变change:vertices 连线折点改变change:custom 节点自定义属性改变 ...

January 31, 2019 · 3 min · jiezi