UNPKG

@antv/x6

Version:

JavaScript diagramming library that uses SVG and HTML for rendering.

80 lines 2.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.atConnectionRatio = exports.atConnectionLength = exports.atConnectionRatioIgnoreGradient = exports.atConnectionRatioKeepGradient = exports.atConnectionLengthIgnoreGradient = exports.atConnectionLengthKeepGradient = exports.connection = void 0; var isEdgeView = function (val, _a) { var view = _a.view; return view.cell.isEdge(); }; exports.connection = { qualify: isEdgeView, set: function (val, args) { var view = args.view; var stubs = (val.stubs || 0); var d; if (Number.isFinite(stubs) && stubs !== 0) { var offset = void 0; if (stubs < 0) { var len = view.getConnectionLength() || 0; offset = (len + stubs) / 2; } else { offset = stubs; } var path = view.getConnection(); if (path) { var sourceParts = path.divideAtLength(offset); var targetParts = path.divideAtLength(-offset); if (sourceParts && targetParts) { d = sourceParts[0].serialize() + " " + targetParts[1].serialize(); } } } return { d: d || view.getConnectionPathData() }; }, }; exports.atConnectionLengthKeepGradient = { qualify: isEdgeView, set: atConnectionWrapper('getTangentAtLength', { rotate: true }), }; exports.atConnectionLengthIgnoreGradient = { qualify: isEdgeView, set: atConnectionWrapper('getTangentAtLength', { rotate: false }), }; exports.atConnectionRatioKeepGradient = { qualify: isEdgeView, set: atConnectionWrapper('getTangentAtRatio', { rotate: true }), }; exports.atConnectionRatioIgnoreGradient = { qualify: isEdgeView, set: atConnectionWrapper('getTangentAtRatio', { rotate: false }), }; // aliases // ------- exports.atConnectionLength = exports.atConnectionLengthKeepGradient; exports.atConnectionRatio = exports.atConnectionRatioKeepGradient; // utils // ----- function atConnectionWrapper(method, options) { var zeroVector = { x: 1, y: 0 }; return function (value, args) { var p; var angle; var view = args.view; var tangent = view[method](Number(value)); if (tangent) { angle = options.rotate ? tangent.vector().vectorAngle(zeroVector) : 0; p = tangent.start; } else { p = view.path.start; angle = 0; } if (angle === 0) { return { transform: "translate(" + p.x + "," + p.y + "')" }; } return { transform: "translate(" + p.x + "," + p.y + "') rotate(" + angle + ")", }; }; } //# sourceMappingURL=connection.js.map