@antv/x6
Version:
JavaScript diagramming library that uses SVG and HTML for rendering
39 lines • 1.76 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ellipseSpread = exports.ellipse = void 0;
const geometry_1 = require("../../geometry");
const util_1 = require("./util");
const ellipse = (portsPositionArgs, elemBBox, groupPositionArgs) => {
const startAngle = groupPositionArgs.start || 0;
const stepAngle = groupPositionArgs.step || 20;
return ellipseLayout(portsPositionArgs, elemBBox, startAngle, (index, count) => (index + 0.5 - count / 2) * stepAngle);
};
exports.ellipse = ellipse;
const ellipseSpread = (portsPositionArgs, elemBBox, groupPositionArgs) => {
const startAngle = groupPositionArgs.start || 0;
const stepAngle = groupPositionArgs.step || 360 / portsPositionArgs.length;
return ellipseLayout(portsPositionArgs, elemBBox, startAngle, (index) => {
return index * stepAngle;
});
};
exports.ellipseSpread = ellipseSpread;
function ellipseLayout(portsPositionArgs, elemBBox, startAngle, stepFn) {
const center = elemBBox.getCenter();
const start = elemBBox.getTopCenter();
const ratio = elemBBox.width / elemBBox.height;
const ellipse = geometry_1.Ellipse.fromRect(elemBBox);
const count = portsPositionArgs.length;
return portsPositionArgs.map((item, index) => {
const angle = startAngle + stepFn(index, count);
const p = start.clone().rotate(-angle, center).scale(ratio, 1, center);
const theta = item.compensateRotate ? -ellipse.tangentTheta(p) : 0;
if (item.dx || item.dy) {
p.translate(item.dx || 0, item.dy || 0);
}
if (item.dr) {
p.move(center, item.dr);
}
return (0, util_1.toResult)(p.round(), theta, item);
});
}
//# sourceMappingURL=ellipse.js.map