123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- import {
- getMid
- } from 'diagram-js/lib/layout/LayoutUtil';
- import lineIntersect from './util/LineIntersect';
- /**
- * Fix broken dockings after DI imports.
- *
- * @param {EventBus} eventBus
- */
- export default function ImportDockingFix(eventBus) {
- function adjustDocking(startPoint, nextPoint, elementMid) {
- var elementTop = {
- x: elementMid.x,
- y: elementMid.y - 50
- };
- var elementLeft = {
- x: elementMid.x - 50,
- y: elementMid.y
- };
- var verticalIntersect = lineIntersect(startPoint, nextPoint, elementMid, elementTop),
- horizontalIntersect = lineIntersect(startPoint, nextPoint, elementMid, elementLeft);
- // original is horizontal or vertical center cross intersection
- var centerIntersect;
- if (verticalIntersect && horizontalIntersect) {
- if (getDistance(verticalIntersect, elementMid) > getDistance(horizontalIntersect, elementMid)) {
- centerIntersect = horizontalIntersect;
- } else {
- centerIntersect = verticalIntersect;
- }
- } else {
- centerIntersect = verticalIntersect || horizontalIntersect;
- }
- startPoint.original = centerIntersect;
- }
- function fixDockings(connection) {
- var waypoints = connection.waypoints;
- adjustDocking(
- waypoints[0],
- waypoints[1],
- getMid(connection.source)
- );
- adjustDocking(
- waypoints[waypoints.length - 1],
- waypoints[waypoints.length - 2],
- getMid(connection.target)
- );
- }
- eventBus.on('bpmnElement.added', function(e) {
- var element = e.element;
- if (element.waypoints) {
- fixDockings(element);
- }
- });
- }
- ImportDockingFix.$inject = [
- 'eventBus'
- ];
- // helpers //////////////////////
- function getDistance(p1, p2) {
- return Math.sqrt(Math.pow(p1.x - p2.x, 2) + Math.pow(p1.y - p2.y, 2));
- }
|