CustomRenderer.ts 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import BaseRenderer from 'diagram-js/lib/draw/BaseRenderer';
  2. import {
  3. append as svgAppend,
  4. attr as svgAttr,
  5. create as svgCreate,
  6. select as svgSelect,
  7. selectAll as svgSelectAll,
  8. clone as svgClone,
  9. clear as svgClear,
  10. remove as svgRemove
  11. } from 'tiny-svg';
  12. const HIGH_PRIORITY = 1500;
  13. export default class CustomRenderer extends BaseRenderer {
  14. bpmnRenderer: BaseRenderer;
  15. modeling: any;
  16. constructor(eventBus, bpmnRenderer, modeling) {
  17. super(eventBus, HIGH_PRIORITY);
  18. this.bpmnRenderer = bpmnRenderer;
  19. this.modeling = modeling;
  20. }
  21. canRender(element) {
  22. // ignore labels
  23. return !element.labelTarget;
  24. }
  25. /**
  26. * 自定义节点图形
  27. * @param {*} parentNode 当前元素的svgNode
  28. * @param {*} element
  29. * @returns
  30. */
  31. drawShape(parentNode, element) {
  32. const shape = this.bpmnRenderer.drawShape(parentNode, element);
  33. const { type, width, height } = element;
  34. // 开始 填充绿色
  35. if (type === 'bpmn:StartEvent') {
  36. svgAttr(shape, { fill: '#77DF6D' });
  37. return shape;
  38. }
  39. if (type === 'bpmn:EndEvent') {
  40. svgAttr(shape, { fill: '#EE7B77' });
  41. return shape;
  42. }
  43. if (type === 'bpmn:UserTask') {
  44. svgAttr(shape, { fill: '#A9C4F8' });
  45. return shape;
  46. }
  47. return shape;
  48. }
  49. getShapePath(shape) {
  50. return this.bpmnRenderer.getShapePath(shape);
  51. }
  52. }
  53. CustomRenderer['$inject'] = ['eventBus', 'bpmnRenderer'];