@antv/x6
Version:
JavaScript diagramming library that uses SVG and HTML for rendering
72 lines • 2.07 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.pinAbsolute = exports.pinRelative = void 0;
exports.toPercentage = toPercentage;
exports.pin = pin;
exports.pinNodeTerminal = pinNodeTerminal;
exports.pinEdgeTerminal = pinEdgeTerminal;
const geometry_1 = require("../../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 = 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