1. 安装
参考前面《安装》
2. 创建基础画布
// 1. 导入绘画引擎import { Topology } from '@topology/core';// 图形库import { register as registerFlow } from '@topology/flow-diagram';import { register as registerActivity } from '@topology/activity-diagram';import { register as registerClass } from '@topology/class-diagram';import { register as registerSequence } from '@topology/sequence-diagram';import { register as registerChart } from '@topology/chart-diagram';// 注册图形库registerFlow();registerActivity();registerClass();registerSequence();registerChart();// 2. 创建画布// 其中,第一个参数'topo-canvas'表示canvas所在的父dom元素id,通常为<div class="canvas" id="topo-canvas"></div>;// 第二个参数{}表示画布选项,这里表示全部使用默认值。具体选项请参考后面的api文档。var canvas = new Topology('topo-canvas', {});// 3. 渲染图形// 画布图形数据,可以来自于官网下载的jsonconst json = {pens:[xxxx]};canvas.open(json);// 或 用window.topology对象 === 上面的canvastopology.open(json);// 4. 如果json发送变化,重绘canvas.render();
new Topology()后,同时会在浏览器window下面创建一个topology引擎对象。
topology属性和api函数参考:API文档
例如:topology.pureData()表示获取引擎画布数据。
3. 左边图形库和右边属性栏
核心库已经支持拖曳事件,我们实现左边拖拉拽的时候,只需要:
- 在html上定义ondragstart函数 (html拖曳详细教程请百度)
- 定义ondrag函数:
onDrag(event) {// @topology/core >= 0.2.26,解决浏览器手势插件命名冲突event.dataTransfer.setData('Topology', JSON.stringify(json));}// @topology/core < 0.2.26event.dataTransfer.setData('Text', JSON.stringify(json));
{text: '圆角矩形',rect: {width: 200,height: 50},paddingLeft: 10,paddingRight: 10,paddingTop: 10,paddingBottom: 10,borderRadius: 0.1,name: 'rectangle'}
https://www.yuque.com/alsmile/topology/faq#O7ntD
4. 示例
一分钟快速使用: https://www.yuque.com/alsmile/topology/odiyyq
topology-vue 使用指南:https://www.yuque.com/alsmile/topology/ay411e
es5使用示例: https://github.com/le5le-com/topology-es5-demo
es6简单使用示例: https://github.com/le5le-com/topology-demo-es6
typescript使用示例: https://github.com/le5le-com/topology/tree/master/src/app/home
附. 常用画布方法
// 获取画布数据const data = this.canvas.data;// 保存为图片blob// toImage函数参数:type, quality, callbackthis.canvas.toImage(null, null, blob => {// Do sth.});// 下载为图片// saveAsImage函数参数:filename, type, qualitythis.canvas.saveAsImage('canvas.png');// 编辑相关操作this.canvas.cut();this.canvas.copy();this.canvas.paste();this.canvas.undo();this.canvas.redo();
