@antv/x6
Version:
JavaScript diagramming library that uses SVG and HTML for rendering.
61 lines • 2.05 kB
JavaScript
;
var __spreadArrays = (this && this.__spreadArrays) || function () {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.oneSide = void 0;
var util_1 = require("../../util");
/**
* Routes the edge always to/from a certain side
*/
var oneSide = function (vertices, options, edgeView) {
var side = options.side || 'bottom';
var padding = util_1.NumberExt.normalizeSides(options.padding || 40);
var sourceBBox = edgeView.sourceBBox;
var targetBBox = edgeView.targetBBox;
var sourcePoint = sourceBBox.getCenter();
var targetPoint = targetBBox.getCenter();
var coord;
var dim;
var factor;
switch (side) {
case 'top':
factor = -1;
coord = 'y';
dim = 'height';
break;
case 'left':
factor = -1;
coord = 'x';
dim = 'width';
break;
case 'right':
factor = 1;
coord = 'x';
dim = 'width';
break;
case 'bottom':
default:
factor = 1;
coord = 'y';
dim = 'height';
break;
}
// Move the points from the center of the element to outside of it.
sourcePoint[coord] += factor * (sourceBBox[dim] / 2 + padding[side]);
targetPoint[coord] += factor * (targetBBox[dim] / 2 + padding[side]);
// Make edge orthogonal (at least the first and last vertex).
if (factor * (sourcePoint[coord] - targetPoint[coord]) > 0) {
targetPoint[coord] = sourcePoint[coord];
}
else {
sourcePoint[coord] = targetPoint[coord];
}
return __spreadArrays([sourcePoint.toJSON()], vertices, [targetPoint.toJSON()]);
};
exports.oneSide = oneSide;
//# sourceMappingURL=oneside.js.map