@logicflow/extension 2.0.0-beta.4 → 2.0.0-beta.6
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 +871 -20
- package/dist/index.css +63 -0
- package/dist/index.min.js +18 -2
- package/es/NodeResize/control/Control.js +3 -2
- package/es/NodeResize/control/Control.js.map +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.js.map +1 -1
- package/es/index.css +63 -0
- package/es/index.d.ts +1 -0
- package/es/index.js +1 -0
- package/es/index.js.map +1 -1
- package/es/materials/group/GroupNode.d.ts +6 -6
- package/es/materials/group/GroupNode.js +7 -6
- package/es/materials/group/GroupNode.js.map +1 -1
- package/es/materials/group/index.js +20 -25
- package/es/materials/group/index.js.map +1 -1
- 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 +16 -0
- package/es/tools/label/mediumEditor.js +91 -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 +22 -16
- package/es/tools/snapshot/index.js +84 -51
- package/es/tools/snapshot/index.js.map +1 -1
- package/lib/NodeResize/control/Control.js +3 -2
- package/lib/NodeResize/control/Control.js.map +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.js.map +1 -1
- package/lib/index.css +63 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/materials/group/GroupNode.d.ts +6 -6
- package/lib/materials/group/GroupNode.js +7 -6
- package/lib/materials/group/GroupNode.js.map +1 -1
- package/lib/materials/group/index.js +19 -24
- package/lib/materials/group/index.js.map +1 -1
- 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 +16 -0
- package/lib/tools/label/mediumEditor.js +97 -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 +22 -16
- package/lib/tools/snapshot/index.js +84 -51
- package/lib/tools/snapshot/index.js.map +1 -1
- package/package.json +9 -7
- package/rollup.config.js +1 -1
- package/src/NodeResize/control/Control.tsx +3 -2
- package/src/components/mini-map/index.ts +2 -2
- package/src/components/selection-select/index.ts +5 -1
- package/src/index.ts +1 -0
- package/src/materials/group/GroupNode.ts +11 -8
- package/src/materials/group/index.ts +33 -38
- 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 +93 -0
- package/src/tools/label/utils.ts +395 -0
- package/src/tools/snapshot/README.md +27 -16
- package/src/tools/snapshot/index.ts +59 -38
|
@@ -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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"}
|
|
@@ -54,18 +54,18 @@ export declare class Snapshot {
|
|
|
54
54
|
});
|
|
55
55
|
/**
|
|
56
56
|
* 获取svgRoot对象dom: 画布元素(不包含grid背景)
|
|
57
|
-
* @param lf
|
|
57
|
+
* @param lf
|
|
58
58
|
* @returns
|
|
59
59
|
*/
|
|
60
|
-
getSvgRootElement
|
|
60
|
+
private getSvgRootElement;
|
|
61
61
|
/**
|
|
62
62
|
* 通过 imgUrl 下载图片
|
|
63
63
|
* @param imgUrl
|
|
64
64
|
*/
|
|
65
|
-
triggerDownload
|
|
65
|
+
private triggerDownload;
|
|
66
66
|
/**
|
|
67
67
|
* 删除锚点
|
|
68
|
-
* @param element
|
|
68
|
+
* @param element
|
|
69
69
|
*/
|
|
70
70
|
private removeAnchor;
|
|
71
71
|
/**
|
|
@@ -73,41 +73,47 @@ export declare class Snapshot {
|
|
|
73
73
|
* @param element
|
|
74
74
|
*/
|
|
75
75
|
private removeRotateControl;
|
|
76
|
+
/**
|
|
77
|
+
* 下载前的处理画布工作:局部渲染模式处理、静默模式处理
|
|
78
|
+
* @param fileName
|
|
79
|
+
* @param toImageOptions
|
|
80
|
+
*/
|
|
81
|
+
getSnapshot(fileName?: string, toImageOptions?: ToImageOptions): Promise<void>;
|
|
76
82
|
/**
|
|
77
83
|
* 下载图片
|
|
78
|
-
* @param fileName
|
|
84
|
+
* @param fileName
|
|
79
85
|
* @param toImageOptions
|
|
80
86
|
*/
|
|
81
|
-
private
|
|
87
|
+
private snapshot;
|
|
82
88
|
/**
|
|
83
89
|
* 获取base64对象
|
|
84
|
-
* @param backgroundColor
|
|
85
|
-
* @param fileType
|
|
86
|
-
* @returns
|
|
90
|
+
* @param backgroundColor
|
|
91
|
+
* @param fileType
|
|
92
|
+
* @returns
|
|
87
93
|
*/
|
|
88
94
|
private getSnapshotBase64;
|
|
89
95
|
/**
|
|
90
96
|
* 获取Blob对象
|
|
91
|
-
* @param backgroundColor
|
|
92
|
-
* @param fileType
|
|
97
|
+
* @param backgroundColor
|
|
98
|
+
* @param fileType
|
|
93
99
|
* @returns
|
|
94
100
|
*/
|
|
95
101
|
private getSnapshotBlob;
|
|
96
102
|
/**
|
|
97
103
|
* 获取脚本css样式
|
|
98
|
-
* @returns
|
|
104
|
+
* @returns
|
|
99
105
|
*/
|
|
100
106
|
private getClassRules;
|
|
101
107
|
/**
|
|
102
108
|
* 获取图片生成中间产物canvas对象,用户转换为其他需要的格式
|
|
103
|
-
* @param svg
|
|
104
|
-
* @param toImageOptions
|
|
105
|
-
* @returns
|
|
109
|
+
* @param svg
|
|
110
|
+
* @param toImageOptions
|
|
111
|
+
* @returns
|
|
106
112
|
*/
|
|
107
113
|
private getCanvasData;
|
|
108
114
|
/**
|
|
109
115
|
* 克隆并处理画布节点
|
|
110
|
-
* @param svg
|
|
116
|
+
* @param svg
|
|
111
117
|
* @returns
|
|
112
118
|
*/
|
|
113
119
|
private cloneSvg;
|
|
@@ -48,40 +48,19 @@ var Snapshot = /** @class */ (function () {
|
|
|
48
48
|
this.lf = lf;
|
|
49
49
|
this.customCssRules = '';
|
|
50
50
|
this.useGlobalRules = true;
|
|
51
|
+
// TODO: 设置fileType为gif但是下载下来的还是png
|
|
52
|
+
// TODO: 完善静默模式不允许添加、操作元素能力
|
|
51
53
|
/* 下载快照 */
|
|
52
|
-
lf.getSnapshot = function (fileName, toImageOptions) { return __awaiter(_this, void 0, void 0, function () {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
this.lf.graphModel.eventCenter.once('graph:updated', function () { return __awaiter(_this, void 0, void 0, function () {
|
|
63
|
-
return __generator(this, function (_a) {
|
|
64
|
-
switch (_a.label) {
|
|
65
|
-
case 0: return [4 /*yield*/, this.getSnapshot(fileName, toImageOptions)
|
|
66
|
-
// 恢复原来渲染模式
|
|
67
|
-
];
|
|
68
|
-
case 1:
|
|
69
|
-
_a.sent();
|
|
70
|
-
// 恢复原来渲染模式
|
|
71
|
-
this.lf.graphModel.setPartial(curPartial);
|
|
72
|
-
return [2 /*return*/];
|
|
73
|
-
}
|
|
74
|
-
});
|
|
75
|
-
}); });
|
|
76
|
-
return [3 /*break*/, 3];
|
|
77
|
-
case 1: return [4 /*yield*/, this.getSnapshot(fileName, toImageOptions)];
|
|
78
|
-
case 2:
|
|
79
|
-
_b.sent();
|
|
80
|
-
_b.label = 3;
|
|
81
|
-
case 3: return [2 /*return*/];
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
|
-
}); };
|
|
54
|
+
lf.getSnapshot = function (fileName, toImageOptions) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
55
|
+
switch (_a.label) {
|
|
56
|
+
case 0: return [4 /*yield*/, this.getSnapshot(fileName, toImageOptions)
|
|
57
|
+
/* 获取Blob对象,用户图片上传 */
|
|
58
|
+
];
|
|
59
|
+
case 1: return [2 /*return*/, _a.sent()
|
|
60
|
+
/* 获取Blob对象,用户图片上传 */
|
|
61
|
+
];
|
|
62
|
+
}
|
|
63
|
+
}); }); };
|
|
85
64
|
/* 获取Blob对象,用户图片上传 */
|
|
86
65
|
lf.getSnapshotBlob = function (backgroundColor, fileType) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
87
66
|
switch (_a.label) {
|
|
@@ -103,7 +82,7 @@ var Snapshot = /** @class */ (function () {
|
|
|
103
82
|
}
|
|
104
83
|
/**
|
|
105
84
|
* 获取svgRoot对象dom: 画布元素(不包含grid背景)
|
|
106
|
-
* @param lf
|
|
85
|
+
* @param lf
|
|
107
86
|
* @returns
|
|
108
87
|
*/
|
|
109
88
|
Snapshot.prototype.getSvgRootElement = function (lf) {
|
|
@@ -128,7 +107,7 @@ var Snapshot = /** @class */ (function () {
|
|
|
128
107
|
};
|
|
129
108
|
/**
|
|
130
109
|
* 删除锚点
|
|
131
|
-
* @param element
|
|
110
|
+
* @param element
|
|
132
111
|
*/
|
|
133
112
|
Snapshot.prototype.removeAnchor = function (element) {
|
|
134
113
|
var childNodes = element.childNodes;
|
|
@@ -161,11 +140,61 @@ var Snapshot = /** @class */ (function () {
|
|
|
161
140
|
}
|
|
162
141
|
};
|
|
163
142
|
/**
|
|
164
|
-
*
|
|
165
|
-
* @param fileName
|
|
143
|
+
* 下载前的处理画布工作:局部渲染模式处理、静默模式处理
|
|
144
|
+
* @param fileName
|
|
166
145
|
* @param toImageOptions
|
|
167
146
|
*/
|
|
168
147
|
Snapshot.prototype.getSnapshot = function (fileName, toImageOptions) {
|
|
148
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
149
|
+
var curPartial, _a, partial, editConfig;
|
|
150
|
+
var _this = this;
|
|
151
|
+
return __generator(this, function (_b) {
|
|
152
|
+
switch (_b.label) {
|
|
153
|
+
case 0:
|
|
154
|
+
curPartial = this.lf.graphModel.getPartial();
|
|
155
|
+
_a = (toImageOptions !== null && toImageOptions !== void 0 ? toImageOptions : {}).partial, partial = _a === void 0 ? curPartial : _a;
|
|
156
|
+
editConfig = this.lf.getEditConfig();
|
|
157
|
+
// 开启静默模式:如果元素多的话 避免用户交互 感知卡顿
|
|
158
|
+
this.lf.updateEditConfig({
|
|
159
|
+
isSilentMode: true,
|
|
160
|
+
stopScrollGraph: true,
|
|
161
|
+
stopMoveGraph: true,
|
|
162
|
+
});
|
|
163
|
+
if (!(curPartial !== partial)) return [3 /*break*/, 1];
|
|
164
|
+
this.lf.graphModel.setPartial(partial);
|
|
165
|
+
this.lf.graphModel.eventCenter.once('graph:updated', function () { return __awaiter(_this, void 0, void 0, function () {
|
|
166
|
+
return __generator(this, function (_a) {
|
|
167
|
+
switch (_a.label) {
|
|
168
|
+
case 0: return [4 /*yield*/, this.snapshot(fileName, toImageOptions)
|
|
169
|
+
// 恢复原来渲染模式
|
|
170
|
+
];
|
|
171
|
+
case 1:
|
|
172
|
+
_a.sent();
|
|
173
|
+
// 恢复原来渲染模式
|
|
174
|
+
this.lf.graphModel.setPartial(curPartial);
|
|
175
|
+
return [2 /*return*/];
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
}); });
|
|
179
|
+
return [3 /*break*/, 3];
|
|
180
|
+
case 1: return [4 /*yield*/, this.snapshot(fileName, toImageOptions)];
|
|
181
|
+
case 2:
|
|
182
|
+
_b.sent();
|
|
183
|
+
_b.label = 3;
|
|
184
|
+
case 3:
|
|
185
|
+
// 恢复原来配置
|
|
186
|
+
this.lf.updateEditConfig(editConfig);
|
|
187
|
+
return [2 /*return*/];
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
};
|
|
192
|
+
/**
|
|
193
|
+
* 下载图片
|
|
194
|
+
* @param fileName
|
|
195
|
+
* @param toImageOptions
|
|
196
|
+
*/
|
|
197
|
+
Snapshot.prototype.snapshot = function (fileName, toImageOptions) {
|
|
169
198
|
return __awaiter(this, void 0, void 0, function () {
|
|
170
199
|
var _a, _b, fileType, quality, svg, copy, svgString, blob, url;
|
|
171
200
|
var _this = this;
|
|
@@ -203,9 +232,9 @@ var Snapshot = /** @class */ (function () {
|
|
|
203
232
|
};
|
|
204
233
|
/**
|
|
205
234
|
* 获取base64对象
|
|
206
|
-
* @param backgroundColor
|
|
207
|
-
* @param fileType
|
|
208
|
-
* @returns
|
|
235
|
+
* @param backgroundColor
|
|
236
|
+
* @param fileType
|
|
237
|
+
* @returns
|
|
209
238
|
*/
|
|
210
239
|
Snapshot.prototype.getSnapshotBase64 = function (backgroundColor, fileType) {
|
|
211
240
|
return __awaiter(this, void 0, void 0, function () {
|
|
@@ -235,8 +264,8 @@ var Snapshot = /** @class */ (function () {
|
|
|
235
264
|
};
|
|
236
265
|
/**
|
|
237
266
|
* 获取Blob对象
|
|
238
|
-
* @param backgroundColor
|
|
239
|
-
* @param fileType
|
|
267
|
+
* @param backgroundColor
|
|
268
|
+
* @param fileType
|
|
240
269
|
* @returns
|
|
241
270
|
*/
|
|
242
271
|
Snapshot.prototype.getSnapshotBlob = function (backgroundColor, fileType) {
|
|
@@ -268,7 +297,7 @@ var Snapshot = /** @class */ (function () {
|
|
|
268
297
|
};
|
|
269
298
|
/**
|
|
270
299
|
* 获取脚本css样式
|
|
271
|
-
* @returns
|
|
300
|
+
* @returns
|
|
272
301
|
*/
|
|
273
302
|
Snapshot.prototype.getClassRules = function () {
|
|
274
303
|
var rules = '';
|
|
@@ -276,8 +305,14 @@ var Snapshot = /** @class */ (function () {
|
|
|
276
305
|
var styleSheets = document.styleSheets;
|
|
277
306
|
for (var i = 0; i < styleSheets.length; i++) {
|
|
278
307
|
var sheet = styleSheets[i];
|
|
279
|
-
|
|
280
|
-
|
|
308
|
+
// 这里是为了过滤掉不同源css脚本
|
|
309
|
+
try {
|
|
310
|
+
for (var j = 0; j < sheet.cssRules.length; j++) {
|
|
311
|
+
rules += sheet.cssRules[j].cssText;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
catch (error) {
|
|
315
|
+
console.log('CSS scripts from different sources have been filtered out');
|
|
281
316
|
}
|
|
282
317
|
}
|
|
283
318
|
}
|
|
@@ -288,9 +323,9 @@ var Snapshot = /** @class */ (function () {
|
|
|
288
323
|
};
|
|
289
324
|
/**
|
|
290
325
|
* 获取图片生成中间产物canvas对象,用户转换为其他需要的格式
|
|
291
|
-
* @param svg
|
|
292
|
-
* @param toImageOptions
|
|
293
|
-
* @returns
|
|
326
|
+
* @param svg
|
|
327
|
+
* @param toImageOptions
|
|
328
|
+
* @returns
|
|
294
329
|
*/
|
|
295
330
|
Snapshot.prototype.getCanvasData = function (svg, toImageOptions) {
|
|
296
331
|
return __awaiter(this, void 0, void 0, function () {
|
|
@@ -372,8 +407,6 @@ var Snapshot = /** @class */ (function () {
|
|
|
372
407
|
ctx === null || ctx === void 0 ? void 0 : ctx.drawImage(img, padding / dpr, padding / dpr);
|
|
373
408
|
resolve(width && height ? (0, utils_1.copyCanvas)(canvas, width, height) : canvas);
|
|
374
409
|
}
|
|
375
|
-
// 如果局部渲染本来是开启的,继续开启
|
|
376
|
-
// partial && this.lf.graphModel.setPartial(true)
|
|
377
410
|
}
|
|
378
411
|
catch (e) {
|
|
379
412
|
ctx === null || ctx === void 0 ? void 0 : ctx.drawImage(img, padding / dpr, padding / dpr);
|
|
@@ -397,7 +430,7 @@ var Snapshot = /** @class */ (function () {
|
|
|
397
430
|
};
|
|
398
431
|
/**
|
|
399
432
|
* 克隆并处理画布节点
|
|
400
|
-
* @param svg
|
|
433
|
+
* @param svg
|
|
401
434
|
* @returns
|
|
402
435
|
*/
|
|
403
436
|
Snapshot.prototype.cloneSvg = function (svg, addStyle) {
|