1.编写CustomPalette.js代码

// CustomPalette.js
export default class CustomPalette {constructor(bpmnFactory, create, elementFactory, palette, translate) {this.bpmnFactory = bpmnFactory;this.create = create;this.elementFactory = elementFactory;this.translate = translate;palette.registerProvider(this);}// getPaletteEntries这个函数就是绘制palette的核心getPaletteEntries(element) {}
}
CustomPalette.$inject = ['bpmnFactory','create','elementFactory','palette','translate'
]
  1. 定义一个类CustomPalette,导出时可以随意取,引用时候不能随意取
  2. 使用$inject注入一些需要的变量
  3. 在类中使用palette.registerProvider(this)指定这是一个palette

2.编写核心函数getPaletteEntries代码

getPaletteEntries这个函数名称不能变,它返回的是一个对象,对象中指定的就是我们自定义的项

// CustomPalette.js
getPaletteEntries(element) {return {'create.zihong-task': {group: 'model', // 分组名className: 'icon-custom zihong-task', // 样式类名title: '创建一个类似task的任务节点',action: { // 操作dragstart: createTask(), // 开始拖拽时调用的事件click: createTask() // 点击时调用的事件}}}
}

create.lindaidai-task是自定义一项的名称,它有几个固定的属性:

  1. group:属于哪个分组, 比如tools、event、gateway、activity等等,用于分类;
  2. className:样式类名,可以通过它给元素改名称
  3. title:鼠标移动到元素上面给出的提示信息
  4. action:用户操作时会触发的事件

接下来我们要做的是:

  1. 通过className设置样式
  2. 通过action来定义要触发的事情

a. 编写class样式

// 在main.js中引入全局的css
import './css/app.css'
//main.css
.icon-custom {border-radius: 50%;background-size: 65%;background-repeat: no-repeat;background-position: center;
}
.icon-custom.zihong-task {background-image: url("./images/huangguan.png");
}

b.编写action代码

我们期望的是点击或者拖拽它能够在画布上画出一个lindaidai-task,也就是编写一个函数来创建bpmn:Task这个元素

// CustomPalette.jsfunction createTask() {return function(event) {const businessObject = bpmnFactory.create('bpmn:Task');businessObject['custom'] = 1const shape = elementFactory.createShape({type: 'bpmn:Task',businessObject});console.log(shape) // 只在拖动或者点击时触发create.start(event, shape);}}

核心还是利用bpmn.js提供的一些方法创建shape然后将其添加到画布上,我们还可以添加bpmn:StartEvent、bpmn:ServiceTask、bpmn:ExclusiveGateway等

3.导出CustomPalette

//在同级的index.js将他导出
import CustomPalette from './CustomPalette'
export default {__init__: ['customPalette'],customPalette: ['type', CustomPalette]
}

这里的__init__ 中的名字必须是CustomPalette,还有下面的属性名

4. 在页面中配置使用CustomPalette

import customPalette from './custom'
this.bpmnModeler = new BpmnModeler({...additionalModules: [// 自定义的左侧边栏customPalette ]
})

5.结果展示图

6.完整的CustomPalette.js

export default class CustomPalette {constructor(bpmnFactory, create, elementFactory, palette, translate) {this.bpmnFactory = bpmnFactory;this.create = create;this.elementFactory = elementFactory;this.translate = translate;palette.registerProvider(this);}// getPaletteEntries这个函数就是绘制palette的核心getPaletteEntries(element) {const { bpmnFactory, create, elementFactory, translate } = this;function createTask() {return function (event) {const businessObject = bpmnFactory.create("bpmn:Task");businessObject["custom"] = 1;const shape = elementFactory.createShape({type: "bpmn:Task",businessObject,});create.start(event, shape);};}return {"create.zihong-task": {group: "model", // 分组名className: "icon-custom zihong-task", // 样式类名title: "创建一个类似task的任务节点",action: {// 操作dragstart: createTask(), // 开始拖拽时调用的事件click: createTask(), // 点击时调用的事件},},};}
}
CustomPalette.$inject = ["bpmnFactory","create","elementFactory","palette","translate",
];

自定义Palette(二)相关推荐

  1. vue2.0 自定义 生成二维码(QRCode)组件

    1.自定义 生成二维码组件 QRCode.vue <!-- 生成二维码 组件 --> <template><canvasclass="qrcode-canvas ...

  2. Android自定义视图二:如何绘制内容

    这个系列是老外写的,干货!翻译出来一起学习.如有不妥,不吝赐教! Android自定义视图一:扩展现有的视图,添加新的XML属性 Android自定义视图二:如何绘制内容 Android自定义视图三: ...

  3. 自定义ZXing二维码扫描界面并解决取景框拉伸等问题

    自定义ZXing二维码扫描界面并解决取景框拉伸等问题 参考文章: (1)自定义ZXing二维码扫描界面并解决取景框拉伸等问题 (2)https://www.cnblogs.com/tommylemon ...

  4. 条码软件如何自定义条码二维码的样式

    在生活中我们见到最多的条码二维码基本上都是以方形的黑白效果显示,虽然可能不是很美观,但是这确实是标准的显示方式,不过在中琅条码软件中,却可以自定义条码二维码样式,让条码二维码在保证扫描效果的前提下更加 ...

  5. Android中 自定义logo二维码绘制(仿微信QQ二维码)

    自定义Logo二维码绘制(追加上一篇简单二维码绘制) 1.实现思路 2.实现(新增拍照以及相册上传logo以及分享和保存二维码) 简单绘制二维码地址: Android 实现简单绘制二维码(包含带LOG ...

  6. android下雨动画效果,Android 自定义View(二) 下雨效果

    Rain.gif Android 自定义View(二) 下雨效果 一 实现思路, 雨点用线段表示,通过控制线段的大小和宽度来表示不同的线段. 一个雨点下雨的过程可以表示为一条直线,一次雨点在下雨的过程 ...

  7. Java自定义生成二维码(兼容你所有的需求)

    1.概述 作为Java开发人员,说到生成二维码就会想到zxing开源二维码图像处理库,不可否认的是zxing确实很强大,但是实际需求中会遇到各种各样的需求是zxing满足不了的,于是就有了想法自己扩展 ...

  8. 微信小程序生成自定义参数二维码

    微信小程序生成自定义参数二维码 前言 实现 尾巴 前言 最近项目中要用到二维码分享功能,需要封装一些自定义的参数通过二维码分享.查看官方文档,发现系统提供了生成二维码的功能,但是细看才发现官方提供的接 ...

  9. vue中使用bpmn-js绘制流程图,并实现汉化、自定义Palette及ContextPad。

    一.认识bpmn-is bpmn-js是一个BPMN2.0渲染工具包和web建模器, 使得画流程图的功能在前端来完成. 效果图如下(改造后): 二.在vue基本使用 安装bpmn-js npm ins ...

最新文章

  1. mysql %type_mysql 存储过程 %type
  2. Matlab中imagesc用法
  3. Caffe学习系列(14):初识数据可视化
  4. git rebase -i 修改提交
  5. C++ Primer 5th笔记(chap 10)泛型算法 :特定容器算法list
  6. 重启sshd_调整linux服务器sshd的MaxStartups,确保可以并行登录
  7. 中国移动2016年Web应用防火墙集采:绿盟、深信服中标
  8. C++STL容器,你真的会用了吗?——插入、删除、遍历和查找操作性能对比——删除(精简易懂版,句句干货)
  9. OCR文字识别在计算机视觉的重要性、基本技术和最新进展
  10. 解决aapt命令在Linux下无法运行的问题
  11. Python爬虫你需要积累这些基本知识_Python学习基础路线
  12. webapi 状态返回 php,让WebAPI 返回JSON格式的数据实例教程
  13. STM32H743中的DCMI无法进入行中断和场中断问题
  14. AIR202的lua开发
  15. python爬取丁香园的疫情数据绘制Echarts地图
  16. android 扫描二维码支付,Android 扫码盒子全局接收付款码(全局事件上层接收多重下发)...
  17. PHP 返回结果给前端/ajax后,在后台继续执行代码的方法
  18. 解决docker容器中文字符乱码问题
  19. 地大校园邮箱申请流程中国地质大学(武汉)
  20. 计算机图形学领域国际期刊以及会议介绍

热门文章

  1. WPF使用openFileDialog、SaveFileDialog 的方法
  2. 「FVWM」- FvwmButtons @20210123
  3. mysql通配符escape使用_详解MySQL like如何查询包含#39;%#39;的字段(ESCAPE用法)-MySQL教程-Web开发者网...
  4. MYSQL保存经纬度数据类型
  5. 建设体育场馆时的三项注意
  6. ASCLL和 Unicode
  7. 有机金属的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  8. 页面上有大量的图片,网页加载很慢,可以用哪些方法优化这些图片
  9. 基于J2ME蓝牙的手机与计算机通信系统设计1
  10. unique_lock详解