1. 安装

参考前面《安装

2. 创建基础画布

  1. // 1. 导入绘画引擎
  2. import { Topology } from '@topology/core';
  3. // 图形库
  4. import { register as registerFlow } from '@topology/flow-diagram';
  5. import { register as registerActivity } from '@topology/activity-diagram';
  6. import { register as registerClass } from '@topology/class-diagram';
  7. import { register as registerSequence } from '@topology/sequence-diagram';
  8. import { register as registerChart } from '@topology/chart-diagram';
  9. // 注册图形库
  10. registerFlow();
  11. registerActivity();
  12. registerClass();
  13. registerSequence();
  14. registerChart();
  15. // 2. 创建画布
  16. // 其中,第一个参数'topo-canvas'表示canvas所在的父dom元素id,通常为<div class="canvas" id="topo-canvas"></div>;
  17. // 第二个参数{}表示画布选项,这里表示全部使用默认值。具体选项请参考后面的api文档。
  18. var canvas = new Topology('topo-canvas', {});
  19. // 3. 渲染图形
  20. // 画布图形数据,可以来自于官网下载的json
  21. const json = {pens:[xxxx]};
  22. canvas.open(json);
  23. // 或 用window.topology对象 === 上面的canvas
  24. topology.open(json);
  25. // 4. 如果json发送变化,重绘
  26. canvas.render();

new Topology()后,同时会在浏览器window下面创建一个topology引擎对象。
topology属性和api函数参考:API文档
例如:topology.pureData()表示获取引擎画布数据。

3. 左边图形库和右边属性栏

核心库已经支持拖曳事件,我们实现左边拖拉拽的时候,只需要:

  1. 在html上定义ondragstart函数 (html拖曳详细教程请百度)
  2. 定义ondrag函数:
  1. onDrag(event) {
  2. // @topology/core >= 0.2.26,解决浏览器手势插件命名冲突
  3. event.dataTransfer.setData('Topology', JSON.stringify(json));
  4. }
  5. // @topology/core < 0.2.26
  6. event.dataTransfer.setData('Text', JSON.stringify(json));

上面json格式为 API文档 中的节点格式,例如:

  1. {
  2. text: '圆角矩形',
  3. rect: {
  4. width: 200,
  5. height: 50
  6. },
  7. paddingLeft: 10,
  8. paddingRight: 10,
  9. paddingTop: 10,
  10. paddingBottom: 10,
  11. borderRadius: 0.1,
  12. name: 'rectangle'
  13. }

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

附. 常用画布方法

  1. // 获取画布数据
  2. const data = this.canvas.data;
  3. // 保存为图片blob
  4. // toImage函数参数:type, quality, callback
  5. this.canvas.toImage(null, null, blob => {
  6. // Do sth.
  7. });
  8. // 下载为图片
  9. // saveAsImage函数参数:filename, type, quality
  10. this.canvas.saveAsImage('canvas.png');
  11. // 编辑相关操作
  12. this.canvas.cut();
  13. this.canvas.copy();
  14. this.canvas.paste();
  15. this.canvas.undo();
  16. this.canvas.redo();