@logicflow/extension 2.0.0-beta.0 → 2.0.0-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +146 -491
- package/dist/index.css +63 -0
- package/dist/index.min.js +42 -0
- package/dist/index.min.js.map +1 -0
- package/es/NodeResize/control/Control.d.ts +3 -3
- package/es/NodeResize/control/Control.js +13 -3
- package/es/NodeResize/control/Control.js.map +1 -1
- package/es/NodeResize/index.d.ts +4 -0
- package/es/NodeResize/index.js.map +1 -1
- package/es/NodeResize/node/DiamondResize.d.ts +1 -0
- package/es/NodeResize/node/DiamondResize.js +2 -1
- package/es/NodeResize/node/DiamondResize.js.map +1 -1
- package/es/NodeResize/node/EllipseResize.d.ts +1 -0
- package/es/NodeResize/node/EllipseResize.js +2 -1
- package/es/NodeResize/node/EllipseResize.js.map +1 -1
- package/es/NodeResize/node/HtmlResize.d.ts +1 -0
- package/es/NodeResize/node/HtmlResize.js +2 -1
- package/es/NodeResize/node/HtmlResize.js.map +1 -1
- package/es/bpmn/constant.d.ts +1 -1
- package/es/bpmn/constant.js +3 -0
- package/es/bpmn/constant.js.map +1 -1
- package/es/bpmn/index.d.ts +3 -6
- package/es/bpmn/index.js +5 -7
- package/es/bpmn/index.js.map +1 -1
- package/es/bpmn-elements/presets/Pool/Pool.d.ts +21 -1
- package/es/components/control/index.d.ts +4 -4
- package/es/components/control/index.js.map +1 -1
- package/es/components/highlight/index.d.ts +6 -4
- package/es/components/highlight/index.js +32 -5
- package/es/components/highlight/index.js.map +1 -1
- package/es/components/menu/index.d.ts +1 -1
- package/es/components/menu/index.js +9 -10
- package/es/components/menu/index.js.map +1 -1
- package/es/components/mini-map/index.d.ts +1 -1
- package/es/components/mini-map/index.js +2 -2
- package/es/components/mini-map/index.js.map +1 -1
- package/es/components/selection-select/index.d.ts +1 -1
- package/es/components/selection-select/index.js.map +1 -1
- package/es/dynamic-group/index.d.ts +106 -0
- package/es/dynamic-group/index.js +536 -0
- package/es/dynamic-group/index.js.map +1 -0
- package/es/dynamic-group/model.d.ts +135 -0
- package/es/dynamic-group/model.js +413 -0
- package/es/dynamic-group/model.js.map +1 -0
- package/es/dynamic-group/node.d.ts +16 -0
- package/es/dynamic-group/node.js +143 -0
- package/es/dynamic-group/node.js.map +1 -0
- package/es/dynamic-group/utils.d.ts +17 -0
- package/es/dynamic-group/utils.js +27 -0
- package/es/dynamic-group/utils.js.map +1 -0
- package/es/index.css +63 -0
- package/es/index.d.ts +16 -8
- package/es/index.js +24 -8
- package/es/index.js.map +1 -1
- package/es/insert-node-in-polyline/index.js +3 -3
- package/es/insert-node-in-polyline/index.js.map +1 -1
- package/es/materials/group/GroupNode.d.ts +6 -10
- package/es/materials/group/GroupNode.js +8 -6
- package/es/materials/group/GroupNode.js.map +1 -1
- package/es/materials/group/index.d.ts +5 -5
- package/es/materials/group/index.js +25 -26
- package/es/materials/group/index.js.map +1 -1
- package/es/materials/node-selection/index.d.ts +6 -1
- package/es/materials/node-selection/index.js +64 -56
- package/es/materials/node-selection/index.js.map +1 -1
- package/es/mindmap/index.d.ts +2 -2
- package/es/style/index.css +63 -0
- package/es/style/index.less +73 -0
- package/es/style/raw.d.ts +1 -1
- package/es/style/raw.js +1 -1
- package/es/style/raw.js.map +1 -1
- package/es/tools/flow-path/index.js +0 -1
- package/es/tools/flow-path/index.js.map +1 -1
- package/es/tools/label/Label.d.ts +30 -0
- package/es/tools/label/Label.js +241 -0
- package/es/tools/label/Label.js.map +1 -0
- package/es/tools/label/LabelModel.d.ts +26 -0
- package/es/tools/label/LabelModel.js +86 -0
- package/es/tools/label/LabelModel.js.map +1 -0
- package/es/tools/label/LabelOverlay.d.ts +28 -0
- package/es/tools/label/LabelOverlay.js +161 -0
- package/es/tools/label/LabelOverlay.js.map +1 -0
- package/es/tools/label/algorithm.d.ts +16 -0
- package/es/tools/label/algorithm.js +27 -0
- package/es/tools/label/algorithm.js.map +1 -0
- package/es/tools/label/index.d.ts +59 -0
- package/es/tools/label/index.js +292 -0
- package/es/tools/label/index.js.map +1 -0
- package/es/tools/label/mediumEditor.d.ts +17 -0
- package/es/tools/label/mediumEditor.js +92 -0
- package/es/tools/label/mediumEditor.js.map +1 -0
- package/es/tools/label/utils.d.ts +64 -0
- package/es/tools/label/utils.js +336 -0
- package/es/tools/label/utils.js.map +1 -0
- package/es/tools/snapshot/index.d.ts +107 -11
- package/es/tools/snapshot/index.js +366 -149
- package/es/tools/snapshot/index.js.map +1 -1
- package/es/tools/snapshot/utils.d.ts +35 -0
- package/es/tools/snapshot/utils.js +238 -0
- package/es/tools/snapshot/utils.js.map +1 -0
- package/lib/NodeResize/control/Control.d.ts +3 -3
- package/lib/NodeResize/control/Control.js +13 -3
- package/lib/NodeResize/control/Control.js.map +1 -1
- package/lib/NodeResize/index.d.ts +4 -0
- package/lib/NodeResize/index.js.map +1 -1
- package/lib/NodeResize/node/DiamondResize.d.ts +1 -0
- package/lib/NodeResize/node/DiamondResize.js +2 -1
- package/lib/NodeResize/node/DiamondResize.js.map +1 -1
- package/lib/NodeResize/node/EllipseResize.d.ts +1 -0
- package/lib/NodeResize/node/EllipseResize.js +2 -1
- package/lib/NodeResize/node/EllipseResize.js.map +1 -1
- package/lib/NodeResize/node/HtmlResize.d.ts +1 -0
- package/lib/NodeResize/node/HtmlResize.js +2 -1
- package/lib/NodeResize/node/HtmlResize.js.map +1 -1
- package/lib/bpmn/constant.d.ts +1 -1
- package/lib/bpmn/constant.js +3 -0
- package/lib/bpmn/constant.js.map +1 -1
- package/lib/bpmn/index.d.ts +3 -6
- package/lib/bpmn/index.js +5 -7
- package/lib/bpmn/index.js.map +1 -1
- package/lib/bpmn-elements/presets/Pool/Pool.d.ts +21 -1
- package/lib/components/control/index.d.ts +4 -4
- package/lib/components/control/index.js.map +1 -1
- package/lib/components/highlight/index.d.ts +6 -4
- package/lib/components/highlight/index.js +32 -5
- package/lib/components/highlight/index.js.map +1 -1
- package/lib/components/menu/index.d.ts +1 -1
- package/lib/components/menu/index.js +9 -10
- package/lib/components/menu/index.js.map +1 -1
- package/lib/components/mini-map/index.d.ts +1 -1
- package/lib/components/mini-map/index.js +2 -2
- package/lib/components/mini-map/index.js.map +1 -1
- package/lib/components/selection-select/index.d.ts +1 -1
- package/lib/components/selection-select/index.js.map +1 -1
- package/lib/dynamic-group/index.d.ts +106 -0
- package/lib/dynamic-group/index.js +553 -0
- package/lib/dynamic-group/index.js.map +1 -0
- package/lib/dynamic-group/model.d.ts +135 -0
- package/lib/dynamic-group/model.js +416 -0
- package/lib/dynamic-group/model.js.map +1 -0
- package/lib/dynamic-group/node.d.ts +16 -0
- package/lib/dynamic-group/node.js +146 -0
- package/lib/dynamic-group/node.js.map +1 -0
- package/lib/dynamic-group/utils.d.ts +17 -0
- package/lib/dynamic-group/utils.js +32 -0
- package/lib/dynamic-group/utils.js.map +1 -0
- package/lib/index.css +63 -0
- package/lib/index.d.ts +16 -8
- package/lib/index.js +24 -8
- package/lib/index.js.map +1 -1
- package/lib/insert-node-in-polyline/index.js +2 -2
- package/lib/insert-node-in-polyline/index.js.map +1 -1
- package/lib/materials/group/GroupNode.d.ts +6 -10
- package/lib/materials/group/GroupNode.js +8 -6
- package/lib/materials/group/GroupNode.js.map +1 -1
- package/lib/materials/group/index.d.ts +5 -5
- package/lib/materials/group/index.js +24 -25
- package/lib/materials/group/index.js.map +1 -1
- package/lib/materials/node-selection/index.d.ts +6 -1
- package/lib/materials/node-selection/index.js +63 -55
- package/lib/materials/node-selection/index.js.map +1 -1
- package/lib/mindmap/index.d.ts +2 -2
- package/lib/style/index.css +63 -0
- package/lib/style/index.less +73 -0
- package/lib/style/raw.d.ts +1 -1
- package/lib/style/raw.js +1 -1
- package/lib/style/raw.js.map +1 -1
- package/lib/tools/flow-path/index.js +0 -1
- package/lib/tools/flow-path/index.js.map +1 -1
- package/lib/tools/label/Label.d.ts +30 -0
- package/lib/tools/label/Label.js +247 -0
- package/lib/tools/label/Label.js.map +1 -0
- package/lib/tools/label/LabelModel.d.ts +26 -0
- package/lib/tools/label/LabelModel.js +89 -0
- package/lib/tools/label/LabelModel.js.map +1 -0
- package/lib/tools/label/LabelOverlay.d.ts +28 -0
- package/lib/tools/label/LabelOverlay.js +167 -0
- package/lib/tools/label/LabelOverlay.js.map +1 -0
- package/lib/tools/label/algorithm.d.ts +16 -0
- package/lib/tools/label/algorithm.js +32 -0
- package/lib/tools/label/algorithm.js.map +1 -0
- package/lib/tools/label/index.d.ts +59 -0
- package/lib/tools/label/index.js +298 -0
- package/lib/tools/label/index.js.map +1 -0
- package/lib/tools/label/mediumEditor.d.ts +17 -0
- package/lib/tools/label/mediumEditor.js +98 -0
- package/lib/tools/label/mediumEditor.js.map +1 -0
- package/lib/tools/label/utils.d.ts +64 -0
- package/lib/tools/label/utils.js +349 -0
- package/lib/tools/label/utils.js.map +1 -0
- package/lib/tools/snapshot/index.d.ts +107 -11
- package/lib/tools/snapshot/index.js +366 -149
- package/lib/tools/snapshot/index.js.map +1 -1
- package/lib/tools/snapshot/utils.d.ts +35 -0
- package/lib/tools/snapshot/utils.js +247 -0
- package/lib/tools/snapshot/utils.js.map +1 -0
- package/package.json +20 -3
- package/rollup.config.js +1 -1
- package/src/NodeResize/control/Control.tsx +13 -3
- package/src/NodeResize/index.ts +4 -0
- package/src/NodeResize/node/DiamondResize.tsx +2 -1
- package/src/NodeResize/node/EllipseResize.tsx +2 -1
- package/src/NodeResize/node/HtmlResize.tsx +2 -1
- package/src/bpmn/constant.ts +4 -1
- package/src/bpmn/index.ts +7 -4
- package/src/bpmn-elements-adapter/README.md +1 -3
- package/src/components/control/index.ts +4 -4
- package/src/components/highlight/index.ts +33 -6
- package/src/components/menu/index.ts +16 -13
- package/src/components/mini-map/index.ts +3 -3
- package/src/components/selection-select/index.ts +6 -2
- package/src/dynamic-group/index.ts +609 -0
- package/src/dynamic-group/model.ts +503 -0
- package/src/dynamic-group/node.ts +140 -0
- package/src/dynamic-group/utils.ts +33 -0
- package/src/index.ts +30 -8
- package/src/insert-node-in-polyline/index.ts +3 -3
- package/src/materials/group/GroupNode.ts +12 -12
- package/src/materials/group/index.ts +40 -40
- package/src/materials/node-selection/index.ts +78 -70
- package/src/style/index.less +73 -0
- package/src/style/raw.ts +64 -1
- package/src/tools/flow-path/index.ts +0 -1
- package/src/tools/label/Label.tsx +297 -0
- package/src/tools/label/LabelModel.ts +82 -0
- package/src/tools/label/LabelOverlay.tsx +159 -0
- package/src/tools/label/algorithm.ts +42 -0
- package/src/tools/label/index.ts +401 -0
- package/src/tools/label/mediumEditor.ts +94 -0
- package/src/tools/label/utils.ts +395 -0
- package/src/tools/snapshot/README.md +141 -5
- package/src/tools/snapshot/index.ts +288 -101
- package/src/tools/snapshot/utils.ts +163 -0
- package/dist/index.js +0 -26
- package/dist/index.js.map +0 -1
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
3
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
4
|
+
if (!m) return o;
|
|
5
|
+
var i = m.call(o), r, ar = [], e;
|
|
6
|
+
try {
|
|
7
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
8
|
+
}
|
|
9
|
+
catch (error) { e = { error: error }; }
|
|
10
|
+
finally {
|
|
11
|
+
try {
|
|
12
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
13
|
+
}
|
|
14
|
+
finally { if (e) throw e.error; }
|
|
15
|
+
}
|
|
16
|
+
return ar;
|
|
17
|
+
};
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.getLabelPositionOfLine = exports.calcLabelPositionOnPolyline = exports.getNewPointAtDistance = exports.calcClosestPointOnBezierEdge = exports.pointPositionRatio = exports.calcPolylineTotalLength = exports.pointToSegmentDistance = exports.getPointOffsetOfElementOutline = exports.rotatePointAroundCenter = exports.calcPointAfterResize = void 0;
|
|
20
|
+
var core_1 = require("@logicflow/core");
|
|
21
|
+
var lodash_es_1 = require("lodash-es");
|
|
22
|
+
var algorithm_1 = require("./algorithm");
|
|
23
|
+
// 工具函数:计算「缩放」后 某坐标点 相对中心位置比例不变的 新坐标点
|
|
24
|
+
// 前提条件: 当缩放一个矩形时,如果你希望矩形中的某个点的位置相对于矩形保持不变
|
|
25
|
+
//
|
|
26
|
+
// 1. 原始矩形的左上角坐标为 (x1, y1),宽度为 w1,高度为 h1。
|
|
27
|
+
// 2. 缩放后的矩形的左上角坐标为 (x2, y2),宽度为 w2,高度为 h2。
|
|
28
|
+
// 3. 矩形中的某个点在原始矩形中的坐标为 (px1, py1)。
|
|
29
|
+
//
|
|
30
|
+
// 目标
|
|
31
|
+
// 计算该点在缩放后矩形中的新坐标 (px2, py2)。
|
|
32
|
+
//
|
|
33
|
+
// 步骤
|
|
34
|
+
// 1. 计算相对位置:首先计算点 (px1, py1) 在原始矩形中的相对位置。
|
|
35
|
+
// relativeX = (px1 - x1) / w1
|
|
36
|
+
// relativeY = (py1 - y1) / h1
|
|
37
|
+
//
|
|
38
|
+
// 2. 计算新坐标:然后,使用相对位置计算该点在缩放后矩形中的新坐标。
|
|
39
|
+
// px2 = x2 + relativeX * w2
|
|
40
|
+
// py2 = y2 + relativeY * h2
|
|
41
|
+
function calcPointAfterResize(origin, scaled, point) {
|
|
42
|
+
var x1 = origin.x, y1 = origin.y, w1 = origin.width, h1 = origin.height;
|
|
43
|
+
var x2 = scaled.x, y2 = scaled.y, w2 = scaled.width, h2 = scaled.height;
|
|
44
|
+
var px1 = point.x, py1 = point.y;
|
|
45
|
+
// 计算点在原始矩形中的相对位置
|
|
46
|
+
var relativeX = (px1 - x1) / w1;
|
|
47
|
+
var relativeY = (py1 - y1) / h1;
|
|
48
|
+
// 计算点在缩放后矩形中的新坐标
|
|
49
|
+
var px2 = x2 + relativeX * w2;
|
|
50
|
+
var py2 = y2 + relativeY * h2;
|
|
51
|
+
return { x: px2, y: py2 };
|
|
52
|
+
}
|
|
53
|
+
exports.calcPointAfterResize = calcPointAfterResize;
|
|
54
|
+
// 工具函数:计算「旋转」后 某坐标点 相对中心位置比例不变的 新坐标点
|
|
55
|
+
// 要计算以点 x1 = (x1, y1) 为中心,点 x2 = (x2, y2) 旋转 θ 度后的坐标位置,可以使用旋转矩阵进行计算。
|
|
56
|
+
//
|
|
57
|
+
// 旋转公式如下:
|
|
58
|
+
// 1. 首先将点 x2 平移到以 x1 为原点的坐标系:
|
|
59
|
+
// x' = x2 - x1
|
|
60
|
+
// y' = y2 - y1
|
|
61
|
+
// 2. 然后应用旋转矩阵进行旋转:
|
|
62
|
+
// x'' = x' * cos(θ) - y' * sin(θ)
|
|
63
|
+
// y'' = x' * sin(θ) + y' * cos(θ)
|
|
64
|
+
// 3. 最后将结果平移回原来的坐标系:
|
|
65
|
+
// x_new = x'' + x1
|
|
66
|
+
// y_new = y'' + y1
|
|
67
|
+
//
|
|
68
|
+
// 综合起来,旋转后的新坐标 (x_new, y_new) 计算公式如下:
|
|
69
|
+
//
|
|
70
|
+
// x_new = (x2 - x1) * cos(θ) - (y2 - y1) * sin(θ) + x1
|
|
71
|
+
// y_new = (x2 - x1) * sin(θ) + (y2 - y1) * cos(θ) + y1
|
|
72
|
+
//
|
|
73
|
+
// 其中,θ 需要用弧度表示,如果你有的是角度,可以用以下公式转换为弧度:
|
|
74
|
+
//
|
|
75
|
+
// rad = deg * π / 180
|
|
76
|
+
function rotatePointAroundCenter(target, center, radian) {
|
|
77
|
+
// Rotate point (x2, y2) around point (x1, y1) by theta degrees.
|
|
78
|
+
//
|
|
79
|
+
// Parameters:
|
|
80
|
+
// x1, y1: Coordinates of the center point.
|
|
81
|
+
// x2, y2: Coordinates of the point to rotate.
|
|
82
|
+
// theta_degrees: Angle in degrees to rotate the point.
|
|
83
|
+
//
|
|
84
|
+
// Returns:
|
|
85
|
+
// Tuple of new coordinates (x_new, y_new) after rotation.
|
|
86
|
+
var x1 = center.x, y1 = center.y;
|
|
87
|
+
var x2 = target.x, y2 = target.y;
|
|
88
|
+
// Translate point to origin
|
|
89
|
+
var xPrime = x2 - x1;
|
|
90
|
+
var yPrime = y2 - y1;
|
|
91
|
+
// Rotate point
|
|
92
|
+
var xDoublePrime = xPrime * Math.cos(radian) - yPrime * Math.sin(radian);
|
|
93
|
+
var yDoublePrime = xPrime * Math.sin(radian) + yPrime * Math.cos(radian);
|
|
94
|
+
// Translate point back
|
|
95
|
+
var xNew = xDoublePrime + x1;
|
|
96
|
+
var yNew = yDoublePrime + y1;
|
|
97
|
+
return {
|
|
98
|
+
x: xNew,
|
|
99
|
+
y: yNew,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
exports.rotatePointAroundCenter = rotatePointAroundCenter;
|
|
103
|
+
/** Edge 相关工具方法 */
|
|
104
|
+
/**
|
|
105
|
+
* 获取某点在一个矩形图形(节点 or 边的 outline)内的偏移量
|
|
106
|
+
* @param point 目标点(此处即 Label 的坐标信息)
|
|
107
|
+
* @param element 目标元素
|
|
108
|
+
*/
|
|
109
|
+
var getPointOffsetOfElementOutline = function (point, element) {
|
|
110
|
+
var baseType = element.BaseType;
|
|
111
|
+
var bboxInfo = baseType === 'node' ? (0, core_1.getNodeOutline)(element) : (0, core_1.getEdgeOutline)(element);
|
|
112
|
+
if (bboxInfo) {
|
|
113
|
+
var x = point.x, y = point.y;
|
|
114
|
+
var minX = bboxInfo.x, minY = bboxInfo.y, maxX = bboxInfo.x1, maxY = bboxInfo.y1;
|
|
115
|
+
var xDeltaPercent = 0.5;
|
|
116
|
+
var yDeltaPercent = 0.5;
|
|
117
|
+
var xDeltaDistance = x - maxX;
|
|
118
|
+
var yDeltaDistance = y - maxY;
|
|
119
|
+
/**
|
|
120
|
+
* 文本在由路径点组成的凸包内,就记录偏移比例
|
|
121
|
+
* 文本在凸包外,记录绝对距离
|
|
122
|
+
* 用于边路径变化时计算文本新位置
|
|
123
|
+
*/
|
|
124
|
+
if (minX && maxX && minX < x && x < maxX) {
|
|
125
|
+
xDeltaPercent = (0, lodash_es_1.min)([(x - minX) / (maxX - minX), 1]);
|
|
126
|
+
}
|
|
127
|
+
else if (x <= minX) {
|
|
128
|
+
xDeltaDistance = x - minX;
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
xDeltaDistance = x - maxX;
|
|
132
|
+
}
|
|
133
|
+
if (minY && maxY && minY < y && y < maxY) {
|
|
134
|
+
yDeltaPercent = (0, lodash_es_1.min)([(y - minY) / (maxY - minY), 1]);
|
|
135
|
+
}
|
|
136
|
+
else if (y <= minY) {
|
|
137
|
+
yDeltaDistance = y - minY;
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
yDeltaDistance = y - maxY;
|
|
141
|
+
}
|
|
142
|
+
return {
|
|
143
|
+
xDeltaPercent: xDeltaPercent,
|
|
144
|
+
yDeltaPercent: yDeltaPercent,
|
|
145
|
+
xDeltaDistance: xDeltaDistance,
|
|
146
|
+
yDeltaDistance: yDeltaDistance,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
exports.getPointOffsetOfElementOutline = getPointOffsetOfElementOutline;
|
|
151
|
+
/**
|
|
152
|
+
* 判断节点是否在折线上
|
|
153
|
+
* @param point 目标点坐标
|
|
154
|
+
* @param points 折线上的点坐标
|
|
155
|
+
*/
|
|
156
|
+
var isPointOnPolyline = function (point, points) {
|
|
157
|
+
for (var i = 0; i < points.length - 1; i++) {
|
|
158
|
+
var start = points[i];
|
|
159
|
+
var end = points[i + 1];
|
|
160
|
+
if ((0, core_1.isInSegment)(point, start, end)) {
|
|
161
|
+
return true;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return false;
|
|
165
|
+
};
|
|
166
|
+
/**
|
|
167
|
+
* 给定一个点 P = (x_0, y_0) 和线段的两个端点 A = (x_1, y_1) 和 B = (x_2, y_2) ,可以使用以下步骤计算点到线段的距离:
|
|
168
|
+
* 1. 计算向量 AB 和 AP 。
|
|
169
|
+
* 2. 计算 AB 的平方长度。
|
|
170
|
+
* 3. 计算点 P 在直线 AB 上的投影点 Q 。
|
|
171
|
+
* 4. 判断 Q 是否在线段 AB 上。
|
|
172
|
+
* 5. 根据 Q 是否在线段上,计算点到线段的距离。
|
|
173
|
+
*
|
|
174
|
+
* 计算点到线段质检的距离
|
|
175
|
+
* @param point
|
|
176
|
+
* @param start
|
|
177
|
+
* @param end
|
|
178
|
+
*/
|
|
179
|
+
var pointToSegmentDistance = function (point, start, end) {
|
|
180
|
+
var px = point.x, py = point.y;
|
|
181
|
+
var sx = start.x, sy = start.y;
|
|
182
|
+
var ex = end.x, ey = end.y;
|
|
183
|
+
var SEx = ex - sx;
|
|
184
|
+
var SEy = ey - sy;
|
|
185
|
+
var SPx = px - sx;
|
|
186
|
+
var SPy = py - sy;
|
|
187
|
+
var SE_SE = Math.pow(SEx, 2) + Math.pow(SEy, 2);
|
|
188
|
+
var SP_SE = SPx * SEx + SPy * SEy;
|
|
189
|
+
var t = SP_SE / SE_SE;
|
|
190
|
+
if (t < 0)
|
|
191
|
+
t = 0;
|
|
192
|
+
if (t > 1)
|
|
193
|
+
t = 1;
|
|
194
|
+
var qx = sx + t * SEx;
|
|
195
|
+
var qy = sy + t * SEy;
|
|
196
|
+
return Math.sqrt(Math.pow((px - qx), 2) + Math.pow((py - qy), 2));
|
|
197
|
+
};
|
|
198
|
+
exports.pointToSegmentDistance = pointToSegmentDistance;
|
|
199
|
+
var calcPolylineTotalLength = function (points) {
|
|
200
|
+
var length = 0;
|
|
201
|
+
for (var i = 0; i < points.length - 1; i++) {
|
|
202
|
+
var start = points[i];
|
|
203
|
+
var end = points[i + 1];
|
|
204
|
+
length += (0, algorithm_1.calcTwoPointsDistance)(start, end);
|
|
205
|
+
}
|
|
206
|
+
return length;
|
|
207
|
+
};
|
|
208
|
+
exports.calcPolylineTotalLength = calcPolylineTotalLength;
|
|
209
|
+
/**
|
|
210
|
+
* TODO: 确认该函数的意义,写完还是没看懂什么意思
|
|
211
|
+
* @param point
|
|
212
|
+
* @param points
|
|
213
|
+
*/
|
|
214
|
+
var pointPositionRatio = function (point, points) {
|
|
215
|
+
var length = 0;
|
|
216
|
+
for (var i = 0; i < points.length - 1; i++) {
|
|
217
|
+
var start = points[i];
|
|
218
|
+
var end = points[i + 1];
|
|
219
|
+
var segmentLength = (0, algorithm_1.calcTwoPointsDistance)(start, end);
|
|
220
|
+
if ((0, exports.pointToSegmentDistance)(point, start, end) <= 20) {
|
|
221
|
+
var d1 = (0, algorithm_1.calcTwoPointsDistance)(point, start);
|
|
222
|
+
length += d1;
|
|
223
|
+
var totalLength = (0, exports.calcPolylineTotalLength)(points);
|
|
224
|
+
// 小数点后保留一位(四舍五入)
|
|
225
|
+
return Math.round((length / totalLength) * 10) / 10;
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
length += segmentLength;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return 0;
|
|
232
|
+
};
|
|
233
|
+
exports.pointPositionRatio = pointPositionRatio;
|
|
234
|
+
/**
|
|
235
|
+
* 计算一个坐标在贝塞尔曲线上最近的一个点
|
|
236
|
+
* @param point
|
|
237
|
+
* @param edge
|
|
238
|
+
* @param step
|
|
239
|
+
*/
|
|
240
|
+
var calcClosestPointOnBezierEdge = function (point, edge, step) {
|
|
241
|
+
if (step === void 0) { step = 5; }
|
|
242
|
+
var minDistance = Infinity;
|
|
243
|
+
var closestPoint = point;
|
|
244
|
+
var pointsList = (0, core_1.getBezierPoints)(edge.path);
|
|
245
|
+
if ((0, lodash_es_1.isEmpty)(pointsList))
|
|
246
|
+
return closestPoint;
|
|
247
|
+
var _a = __read(pointsList, 4), start = _a[0], sNext = _a[1], ePre = _a[2], end = _a[3];
|
|
248
|
+
for (var i = 0; i <= step; i++) {
|
|
249
|
+
var t = i / step;
|
|
250
|
+
var bezierPoint = (0, algorithm_1.getPointOnBezier)(t, start, sNext, ePre, end);
|
|
251
|
+
var distance = (0, algorithm_1.calcTwoPointsDistance)(point, bezierPoint);
|
|
252
|
+
if (distance < minDistance) {
|
|
253
|
+
minDistance = distance;
|
|
254
|
+
closestPoint = bezierPoint;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
return closestPoint;
|
|
258
|
+
};
|
|
259
|
+
exports.calcClosestPointOnBezierEdge = calcClosestPointOnBezierEdge;
|
|
260
|
+
var getNewPointAtDistance = function (points, ratio) {
|
|
261
|
+
var totalLength = (0, exports.calcPolylineTotalLength)(points);
|
|
262
|
+
var targetLength = totalLength * ratio;
|
|
263
|
+
var length = 0;
|
|
264
|
+
for (var i = 0; i < points.length - 1; i++) {
|
|
265
|
+
var start = points[i];
|
|
266
|
+
var end = points[i + 1];
|
|
267
|
+
var segmentLength = (0, algorithm_1.calcTwoPointsDistance)(start, end);
|
|
268
|
+
if (length + segmentLength >= targetLength) {
|
|
269
|
+
var ratio_1 = (targetLength - length) / segmentLength;
|
|
270
|
+
return {
|
|
271
|
+
x: start.x + (end.x - start.x) * ratio_1,
|
|
272
|
+
y: start.y + (end.y - start.y) * ratio_1,
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
length += segmentLength;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
return (0, lodash_es_1.last)(points);
|
|
280
|
+
};
|
|
281
|
+
exports.getNewPointAtDistance = getNewPointAtDistance;
|
|
282
|
+
/**
|
|
283
|
+
* 计算一个坐标离折线(包括 PolylineEdge 和 LineEdge 直线)最近的一个点
|
|
284
|
+
* @param point
|
|
285
|
+
* @param edge
|
|
286
|
+
*/
|
|
287
|
+
var calcLabelPositionOnPolyline = function (point, edge) {
|
|
288
|
+
var _a, _b;
|
|
289
|
+
var points = (0, core_1.points2PointsList)(edge.points);
|
|
290
|
+
if (points.length === 0) {
|
|
291
|
+
points = [edge.startPoint, edge.endPoint];
|
|
292
|
+
}
|
|
293
|
+
var _c = (_a = (0, exports.getPointOffsetOfElementOutline)(point, edge)) !== null && _a !== void 0 ? _a : {}, xDeltaPercent = _c.xDeltaPercent, yDeltaPercent = _c.yDeltaPercent, yDeltaDistance = _c.yDeltaDistance, xDeltaDistance = _c.xDeltaDistance;
|
|
294
|
+
var isPointOnEdge = isPointOnPolyline(point, points);
|
|
295
|
+
var ratio = (0, exports.pointPositionRatio)(point, points);
|
|
296
|
+
var start = (0, lodash_es_1.head)(points);
|
|
297
|
+
var end = (0, lodash_es_1.last)(points);
|
|
298
|
+
// 分别取路径中,x轴 和 y轴上的最大最小坐标值组合成一个矩形
|
|
299
|
+
var _d = (0, core_1.getBBoxOfPoints)(points, 10), minX = _d.minX, minY = _d.minY, maxX = _d.maxX, maxY = _d.maxY;
|
|
300
|
+
if (!start || !end)
|
|
301
|
+
return point;
|
|
302
|
+
if (xDeltaPercent && yDeltaPercent) {
|
|
303
|
+
var positByPercent = {
|
|
304
|
+
x: minX + (maxX - minX) * xDeltaPercent,
|
|
305
|
+
y: minY + (maxY - minY) * yDeltaPercent,
|
|
306
|
+
};
|
|
307
|
+
return isPointOnEdge
|
|
308
|
+
? (_b = (0, exports.getNewPointAtDistance)(points, ratio)) !== null && _b !== void 0 ? _b : point // 函数什么意思
|
|
309
|
+
: positByPercent;
|
|
310
|
+
}
|
|
311
|
+
// 如果文本在凸包的上方或者下方
|
|
312
|
+
if (xDeltaPercent && yDeltaDistance) {
|
|
313
|
+
return {
|
|
314
|
+
x: minX + (maxX - minX) * xDeltaPercent,
|
|
315
|
+
y: yDeltaDistance < 0 ? minY + yDeltaDistance : maxY + yDeltaDistance,
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
// 如果文本在凸包的左边或者右边
|
|
319
|
+
if (yDeltaPercent && xDeltaDistance) {
|
|
320
|
+
return {
|
|
321
|
+
x: xDeltaDistance < 0 ? minX + xDeltaDistance : maxX + xDeltaDistance,
|
|
322
|
+
y: minY + (maxY - minY) * yDeltaPercent,
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
// 如果文本在凸包左上/左下/右上/右下
|
|
326
|
+
if (xDeltaDistance && yDeltaDistance) {
|
|
327
|
+
return {
|
|
328
|
+
x: xDeltaDistance < 0 ? minX + xDeltaDistance : maxX + xDeltaDistance,
|
|
329
|
+
y: yDeltaDistance < 0 ? minY + yDeltaDistance : maxY + yDeltaDistance,
|
|
330
|
+
};
|
|
331
|
+
}
|
|
332
|
+
// 兜底
|
|
333
|
+
return point;
|
|
334
|
+
};
|
|
335
|
+
exports.calcLabelPositionOnPolyline = calcLabelPositionOnPolyline;
|
|
336
|
+
/**
|
|
337
|
+
* 计算 Label 离边最近的点的坐标,用于更新为 Label 的坐标
|
|
338
|
+
* @param label LabelConfig -> 当前 Label 的配置项
|
|
339
|
+
* @param edge
|
|
340
|
+
*/
|
|
341
|
+
var getLabelPositionOfLine = function (label, edge) {
|
|
342
|
+
var x = label.x, y = label.y;
|
|
343
|
+
if (edge.modelType === core_1.ModelType.BEZIER_EDGE) {
|
|
344
|
+
return (0, exports.calcClosestPointOnBezierEdge)({ x: x, y: y }, edge);
|
|
345
|
+
}
|
|
346
|
+
return (0, exports.calcLabelPositionOnPolyline)({ x: x, y: y }, edge);
|
|
347
|
+
};
|
|
348
|
+
exports.getLabelPositionOfLine = getLabelPositionOfLine;
|
|
349
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/tools/label/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,25 +1,121 @@
|
|
|
1
|
+
import LogicFlow from '@logicflow/core';
|
|
2
|
+
export type ToImageOptions = {
|
|
3
|
+
/**
|
|
4
|
+
* 导出图片的格式,可选值为:`png`、`webp`、`gif`、`jpeg`、`svg`,默认值为 `png`
|
|
5
|
+
*/
|
|
6
|
+
fileType?: string;
|
|
7
|
+
/**
|
|
8
|
+
* 导出图片的宽度,通常无需设置,设置后可能会拉伸图形
|
|
9
|
+
*/
|
|
10
|
+
width?: number;
|
|
11
|
+
/**
|
|
12
|
+
* 导出图片的高度,通常无需设置,设置后可能会拉伸图形
|
|
13
|
+
*/
|
|
14
|
+
height?: number;
|
|
15
|
+
/**
|
|
16
|
+
* 导出图片的背景色,默认为透明
|
|
17
|
+
*/
|
|
18
|
+
backgroundColor?: string;
|
|
19
|
+
/**
|
|
20
|
+
* 导出图片的质量。
|
|
21
|
+
*
|
|
22
|
+
* 在指定图片格式为 `jpeg` 或 `webp` 的情况下,可以从 0 到 1 的区间内选择图片的质量,如果超出取值范围,将会使用默认值 0.92。导出为其他格式的图片时,该参数会被忽略。
|
|
23
|
+
*/
|
|
24
|
+
quality?: number;
|
|
25
|
+
/**
|
|
26
|
+
* 导出图片的内边距,即元素内容所在区域边界与图片边界的距离,单位为像素,默认为 40
|
|
27
|
+
*/
|
|
28
|
+
padding?: number;
|
|
29
|
+
/**
|
|
30
|
+
* 导出图片时是否开启局部渲染
|
|
31
|
+
* - `false`:将导出画布上所有的元素
|
|
32
|
+
* - `true`:只导出画面区域内的可见元素
|
|
33
|
+
*/
|
|
34
|
+
partial?: boolean;
|
|
35
|
+
};
|
|
36
|
+
export type SnapshotResponse = {
|
|
37
|
+
data: Blob | string;
|
|
38
|
+
width: number;
|
|
39
|
+
height: number;
|
|
40
|
+
};
|
|
1
41
|
/**
|
|
2
42
|
* 快照插件,生成视图
|
|
3
43
|
*/
|
|
4
44
|
export declare class Snapshot {
|
|
5
45
|
static pluginName: string;
|
|
6
|
-
lf:
|
|
46
|
+
lf: LogicFlow;
|
|
7
47
|
offsetX?: number;
|
|
8
48
|
offsetY?: number;
|
|
9
|
-
fileName
|
|
49
|
+
fileName?: string;
|
|
10
50
|
customCssRules: string;
|
|
11
51
|
useGlobalRules: boolean;
|
|
12
52
|
constructor({ lf }: {
|
|
13
53
|
lf: any;
|
|
14
54
|
});
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
55
|
+
/**
|
|
56
|
+
* 获取svgRoot对象dom: 画布元素(不包含grid背景)
|
|
57
|
+
* @param lf
|
|
58
|
+
* @returns
|
|
59
|
+
*/
|
|
60
|
+
private getSvgRootElement;
|
|
61
|
+
/**
|
|
62
|
+
* 通过 imgUrl 下载图片
|
|
63
|
+
* @param imgUrl
|
|
64
|
+
*/
|
|
65
|
+
private triggerDownload;
|
|
66
|
+
/**
|
|
67
|
+
* 删除锚点
|
|
68
|
+
* @param element
|
|
69
|
+
*/
|
|
70
|
+
private removeAnchor;
|
|
71
|
+
/**
|
|
72
|
+
* 删除旋转按钮
|
|
73
|
+
* @param element
|
|
74
|
+
*/
|
|
75
|
+
private removeRotateControl;
|
|
76
|
+
/**
|
|
77
|
+
* 下载前的处理画布工作:局部渲染模式处理、静默模式处理
|
|
78
|
+
* @param fileName
|
|
79
|
+
* @param toImageOptions
|
|
80
|
+
*/
|
|
81
|
+
getSnapshot(fileName?: string, toImageOptions?: ToImageOptions): Promise<void>;
|
|
82
|
+
/**
|
|
83
|
+
* 下载图片
|
|
84
|
+
* @param fileName
|
|
85
|
+
* @param toImageOptions
|
|
86
|
+
*/
|
|
87
|
+
private snapshot;
|
|
88
|
+
/**
|
|
89
|
+
* 获取base64对象
|
|
90
|
+
* @param backgroundColor
|
|
91
|
+
* @param fileType
|
|
92
|
+
* @returns
|
|
93
|
+
*/
|
|
94
|
+
private getSnapshotBase64;
|
|
95
|
+
/**
|
|
96
|
+
* 获取Blob对象
|
|
97
|
+
* @param backgroundColor
|
|
98
|
+
* @param fileType
|
|
99
|
+
* @returns
|
|
100
|
+
*/
|
|
101
|
+
private getSnapshotBlob;
|
|
102
|
+
/**
|
|
103
|
+
* 获取脚本css样式
|
|
104
|
+
* @returns
|
|
105
|
+
*/
|
|
106
|
+
private getClassRules;
|
|
107
|
+
/**
|
|
108
|
+
* 获取图片生成中间产物canvas对象,用户转换为其他需要的格式
|
|
109
|
+
* @param svg
|
|
110
|
+
* @param toImageOptions
|
|
111
|
+
* @returns
|
|
112
|
+
*/
|
|
113
|
+
private getCanvasData;
|
|
114
|
+
/**
|
|
115
|
+
* 克隆并处理画布节点
|
|
116
|
+
* @param svg
|
|
117
|
+
* @returns
|
|
118
|
+
*/
|
|
119
|
+
private cloneSvg;
|
|
24
120
|
}
|
|
25
121
|
export default Snapshot;
|