loop.js 1.2 KB

123456789101112131415161718192021222324252627
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.loop = void 0;
  4. const x6_geometry_1 = require("@antv/x6-geometry");
  5. const loop = function (sourcePoint, targetPoint, routePoints, options = {}) {
  6. const fix = routePoints.length === 3 ? 0 : 1;
  7. const p1 = x6_geometry_1.Point.create(routePoints[0 + fix]);
  8. const p2 = x6_geometry_1.Point.create(routePoints[2 + fix]);
  9. const center = x6_geometry_1.Point.create(routePoints[1 + fix]);
  10. if (!x6_geometry_1.Point.equals(sourcePoint, targetPoint)) {
  11. const middle = new x6_geometry_1.Point((sourcePoint.x + targetPoint.x) / 2, (sourcePoint.y + targetPoint.y) / 2);
  12. const angle = middle.angleBetween(x6_geometry_1.Point.create(sourcePoint).rotate(90, middle), center);
  13. if (angle > 1) {
  14. p1.rotate(180 - angle, middle);
  15. p2.rotate(180 - angle, middle);
  16. center.rotate(180 - angle, middle);
  17. }
  18. }
  19. const pathData = `
  20. M ${sourcePoint.x} ${sourcePoint.y}
  21. Q ${p1.x} ${p1.y} ${center.x} ${center.y}
  22. Q ${p2.x} ${p2.y} ${targetPoint.x} ${targetPoint.y}
  23. `;
  24. return options.raw ? x6_geometry_1.Path.parse(pathData) : pathData;
  25. };
  26. exports.loop = loop;
  27. //# sourceMappingURL=loop.js.map