1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.pinAbsolute = exports.pinRelative = void 0;
- const x6_geometry_1 = require("@antv/x6-geometry");
- function toPercentage(value, max) {
- if (max === 0) {
- return '0%';
- }
- return `${Math.round((value / max) * 100)}%`;
- }
- function pin(relative) {
- const strategy = (terminal, view, magnet, coords) => {
- return view.isEdgeElement(magnet)
- ? pinEdgeTerminal(relative, terminal, view, magnet, coords)
- : pinNodeTerminal(relative, terminal, view, magnet, coords);
- };
- return strategy;
- }
- function pinNodeTerminal(relative, data, view, magnet, coords) {
- const node = view.cell;
- const angle = node.getAngle();
- const bbox = view.getUnrotatedBBoxOfElement(magnet);
- const center = node.getBBox().getCenter();
- const pos = x6_geometry_1.Point.create(coords).rotate(angle, center);
- let dx = pos.x - bbox.x;
- let dy = pos.y - bbox.y;
- if (relative) {
- dx = toPercentage(dx, bbox.width);
- dy = toPercentage(dy, bbox.height);
- }
- data.anchor = {
- name: 'topLeft',
- args: {
- dx,
- dy,
- rotate: true,
- },
- };
- return data;
- }
- function pinEdgeTerminal(relative, end, view, magnet, coords) {
- const connection = view.getConnection();
- if (!connection) {
- return end;
- }
- const length = connection.closestPointLength(coords);
- if (relative) {
- const totalLength = connection.length();
- end.anchor = {
- name: 'ratio',
- args: {
- ratio: length / totalLength,
- },
- };
- }
- else {
- end.anchor = {
- name: 'length',
- args: {
- length,
- },
- };
- }
- return end;
- }
- exports.pinRelative = pin(true);
- exports.pinAbsolute = pin(false);
- //# sourceMappingURL=pin.js.map
|