import BpmnRenderer from 'bpmn-js/lib/draw/BpmnRenderer'; import CustomizeRenderer from './CustomizeRenderer'; import { getRectPath } from 'bpmn-js/lib/draw/BpmnRenderUtil'; import createAddMarkerSelect from './connect/marker'; import { typeConfluence } from '../../config/variableName'; import { createLine } from 'diagram-js/lib/util/RenderUtil'; import { append as svgAppend } from 'tiny-svg'; import { hasGatewayType } from '../../config'; let jnpfCanvas: any; let defaultStrokeColor = '#A2B9D5'; let jnpfFlowInfo: any; class YmRenderer extends BpmnRenderer { _styles: any; _injector: any; constructor(config: any, injector: any, eventBus: any, styles: any, pathMap: any, canvas: any, textRenderer: any, flowInfo: any, priority: number) { super( (config = { defaultLabelColor: 'rgb(102,102,102)', defaultStrokeColor: defaultStrokeColor, ...config, }), eventBus, styles, pathMap, canvas, textRenderer, priority, ); this._styles = styles; jnpfCanvas = canvas; jnpfFlowInfo = flowInfo; this._injector = injector; } canRender(element: any) { return super.canRender(element); } // 绘制画布上元素 drawShape(parentNode: any, element: any) { if (element) return CustomizeRenderer(parentNode, element, jnpfFlowInfo, this._injector) || super.drawShape(parentNode, element); return super.drawShape(parentNode, element); } drawConnection(parentGfx: any, element: any) { let stroke = ''; if ( element.target?.wnType === typeConfluence || (element.isPreview && hasGatewayType.has(element.target.wnType)) || (element.isPreview && hasGatewayType.has(element.source.wnType)) ) { function lineStyle(_styles, attrs) { return _styles.computeStyle(attrs, ['no-fill'], { strokeLinecap: 'round', strokeLinejoin: 'round', stroke: defaultStrokeColor, strokeWidth: 2, }); } function drawLine(parentGfx, waypoints, attrs, radius, _styles) { attrs = lineStyle(_styles, attrs); var line = createLine(waypoints, attrs, radius); svgAppend(parentGfx, line); return line; } if (element.isPreview && element.waypoints?.length > 1) { if (element.waypoints.length === 2) { element.waypoints = [ { x: element.waypoints[0].x, y: element.waypoints[0].y, }, { x: element.waypoints[1].x, y: element.waypoints[1].y + 15, }, ]; } else { element.waypoints = [ { x: element.waypoints[0].x > element.waypoints[1].x ? element.waypoints[0].x + 45 : element.waypoints[0].x - 45, y: element.waypoints[0].y, }, { x: element.waypoints[1].x, y: element.waypoints[1].y, }, { x: element.waypoints[2].x, y: element.waypoints[2].y, }, ]; } } var connection = drawLine( parentGfx, element.waypoints, { markerEnd: '', stroke: stroke || defaultStrokeColor, }, 5, this._styles, ); return connection; } else { let connect = super.drawConnection(parentGfx, element, { stroke }); createAddMarkerSelect(element, jnpfCanvas); // 选中线的箭头 return connect; } } // 绘制 getShapePath(shape: any) { return getRectPath(shape); } } YmRenderer.$inject = ['config.bpmnRenderer', 'injector', 'eventBus', 'styles', 'pathMap', 'canvas', 'textRenderer', 'config.flowInfo']; export default YmRenderer;