Files
lan-manager/web/node_modules/@antv/g6-element/lib/edges/polyline.js
openclaw 0a5f6a8047 Initial commit: Lan-manager project code
- Go backend (server/)
- Frontend (web/, server/static/)
- Database and deployment files
- Scripts and docs

Co-Authored-By: 狸花猫/Claude-Qwen3.6-Plus 🐾
2026-04-20 00:52:58 +08:00

175 lines
6.2 KiB
JavaScript

"use strict";
var _tslib = require("tslib");
var _util = require("@antv/util");
var _g6Core = require("@antv/g6-core");
var _polylineUtil = require("./polyline-util");
var _router = require("./router");
// 折线
(0, _g6Core.registerEdge)('polyline', {
options: {
color: _g6Core.BaseGlobal.defaultEdge.color,
size: _g6Core.BaseGlobal.defaultEdge.size,
style: {
radius: 0,
offset: 15,
x: 0,
y: 0,
stroke: _g6Core.BaseGlobal.defaultEdge.style.stroke,
lineAppendWidth: _g6Core.BaseGlobal.defaultEdge.style.lineAppendWidth
},
// 文本样式配置
labelCfg: {
style: {
fill: _g6Core.BaseGlobal.edgeLabel.style.fill,
fontSize: _g6Core.BaseGlobal.edgeLabel.style.fontSize,
fontFamily: _g6Core.BaseGlobal.windowFontFamily
}
},
routeCfg: {
obstacles: [],
maxAllowedDirectionChange: Math.PI,
maximumLoops: 500,
gridSize: 10 // 指定精度
},
stateStyles: (0, _tslib.__assign)({}, _g6Core.BaseGlobal.edgeStateStyles)
},
shapeType: 'polyline',
// 文本位置
labelPosition: 'center',
drawShape: function drawShape(cfg, group) {
var shapeStyle = this.getShapeStyle(cfg);
if (shapeStyle.radius === 0) delete shapeStyle.radius;
var keyShape = group.addShape('path', {
className: 'edge-shape',
name: 'edge-shape',
attrs: shapeStyle
});
group['shapeMap']['edge-shape'] = keyShape;
return keyShape;
},
getShapeStyle: function getShapeStyle(cfg) {
var defaultStyle = this.options.style;
var strokeStyle = {
stroke: cfg.color
};
var style = (0, _util.mix)({}, defaultStyle, strokeStyle, cfg.style);
cfg = this.getPathPoints(cfg);
this.radius = style.radius;
this.offset = style.offset;
var startPoint = cfg.startPoint,
endPoint = cfg.endPoint;
var controlPoints = this.getControlPoints(cfg);
var points = [startPoint]; // 添加起始点
// 添加控制点
if (controlPoints) {
points = points.concat(controlPoints);
}
// 添加结束点
points.push(endPoint);
var source = cfg.sourceNode;
var target = cfg.targetNode;
var radius = style.radius;
var defaultRouteCfg = this.options.routeCfg;
var routeCfg = (0, _util.mix)({}, defaultRouteCfg, cfg.routeCfg);
routeCfg.offset = style.offset;
var path = this.getPath(points, source, target, radius, routeCfg, !Boolean(controlPoints));
if ((0, _util.isArray)(path) && path.length <= 1 || (0, _util.isString)(path) && path.indexOf('L') === -1) {
path = 'M0 0, L0 0';
}
if (isNaN(startPoint.x) || isNaN(startPoint.y) || isNaN(endPoint.x) || isNaN(endPoint.y)) {
path = 'M0 0, L0 0';
}
var attrs = (0, _util.mix)({}, _g6Core.BaseGlobal.defaultEdge.style, style, {
lineWidth: cfg.size,
path: path
});
return attrs;
},
updateShapeStyle: function updateShapeStyle(cfg, item) {
var group = item.getContainer();
if (!item.isVisible()) return;
var strokeStyle = {
stroke: cfg.color
};
var shape = group['shapeMap']['edge-shape'] || group.find(function (element) {
return element.get('className') === 'edge-shape';
}) || item.getKeyShape();
var size = cfg.size;
cfg = this.getPathPoints(cfg);
var startPoint = cfg.startPoint,
endPoint = cfg.endPoint;
var controlPoints = this.getControlPoints(cfg); // || cfg.controlPoints;
var points = [startPoint]; // 添加起始点
// 添加控制点
if (controlPoints) {
points = points.concat(controlPoints);
}
// 添加结束点
points.push(endPoint);
var currentAttr = shape.attr();
var previousStyle = (0, _util.mix)({}, strokeStyle, currentAttr, cfg.style);
var source = cfg.sourceNode;
var target = cfg.targetNode;
var radius = previousStyle.radius;
var defaultRouteCfg = this.options.routeCfg;
var routeCfg = (0, _util.mix)({}, defaultRouteCfg, cfg.routeCfg);
routeCfg.offset = previousStyle.offset;
var path = this.getPath(points, source, target, radius, routeCfg, !Boolean(controlPoints));
if ((0, _util.isArray)(path) && path.length <= 1 || (0, _util.isString)(path) && path.indexOf('L') === -1) {
path = 'M0 0, L0 0';
}
if (isNaN(startPoint.x) || isNaN(startPoint.y) || isNaN(endPoint.x) || isNaN(endPoint.y)) {
path = 'M0 0, L0 0';
}
if (currentAttr.endArrow && previousStyle.endArrow === false) {
cfg.style.endArrow = {
path: ''
};
}
if (currentAttr.startArrow && previousStyle.startArrow === false) {
cfg.style.startArrow = {
path: ''
};
}
var style = (0, _util.mix)(strokeStyle, shape.attr(), {
lineWidth: size,
path: path
}, cfg.style);
if (shape) {
shape.attr(style);
}
},
getPath: function getPath(points, source, target, radius, routeCfg, auto) {
var offset = routeCfg.offset,
obstacles = routeCfg.obstacles;
var simple = routeCfg.simple;
// 指定了控制点
if (!offset || points.length > 2 || auto === false) {
if (radius) {
return (0, _polylineUtil.getPathWithBorderRadiusByPolyline)(points, radius);
}
var pathArray_1 = [];
(0, _util.each)(points, function (point, index) {
if (index === 0) {
pathArray_1.push(['M', point.x, point.y]);
} else {
pathArray_1.push(['L', point.x, point.y]);
}
});
return pathArray_1;
}
// 未指定控制点
if (simple !== false && !(obstacles === null || obstacles === void 0 ? void 0 : obstacles.length)) simple = true;
var polylinePoints = simple ? (0, _polylineUtil.getPolylinePoints)(points[points.length - 1], points[0], target, source, offset) : (0, _router.pathFinder)(points[0], points[points.length - 1], source, target, routeCfg);
if (!polylinePoints || !polylinePoints.length) return 'M0 0, L0 0';
if (radius) {
var res_1 = (0, _polylineUtil.getPathWithBorderRadiusByPolyline)(polylinePoints, radius);
return res_1;
}
// 去除连续同 x 不同 y 的中间点;去除连续同 y 不同 x 的中间点
polylinePoints = (0, _polylineUtil.removeRedundantPoint)(polylinePoints);
var res = _g6Core.Util.pointsToPolygon(polylinePoints);
return res;
}
}, 'single-edge');