@meta2d/core 1.0.55 → 1.0.57

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.
Files changed (223) hide show
  1. package/index.d.ts +9 -9
  2. package/index.js +9 -9
  3. package/package.json +38 -39
  4. package/src/canvas/canvas.d.ts +456 -456
  5. package/src/canvas/canvas.js +7583 -8186
  6. package/src/canvas/canvas.js.map +1 -1
  7. package/src/canvas/canvasImage.d.ts +27 -28
  8. package/src/canvas/canvasImage.js +440 -502
  9. package/src/canvas/canvasImage.js.map +1 -1
  10. package/src/canvas/canvasTemplate.d.ts +18 -19
  11. package/src/canvas/canvasTemplate.js +208 -228
  12. package/src/canvas/canvasTemplate.js.map +1 -1
  13. package/src/canvas/index.d.ts +2 -2
  14. package/src/canvas/index.js +2 -2
  15. package/src/canvas/magnifierCanvas.d.ts +19 -20
  16. package/src/canvas/magnifierCanvas.js +101 -100
  17. package/src/canvas/magnifierCanvas.js.map +1 -1
  18. package/src/canvas/offscreen.d.ts +1 -2
  19. package/src/canvas/offscreen.js +13 -13
  20. package/src/canvas/offscreen.js.map +1 -1
  21. package/src/core.d.ts +479 -479
  22. package/src/core.js +4589 -5198
  23. package/src/core.js.map +1 -1
  24. package/src/data.d.ts +34 -34
  25. package/src/data.js +84 -84
  26. package/src/data.js.map +1 -1
  27. package/src/diagrams/arrow.d.ts +4 -4
  28. package/src/diagrams/arrow.js +46 -46
  29. package/src/diagrams/arrow.js.map +1 -1
  30. package/src/diagrams/circle.d.ts +2 -2
  31. package/src/diagrams/circle.js +8 -8
  32. package/src/diagrams/circle.js.map +1 -1
  33. package/src/diagrams/cloud.d.ts +2 -2
  34. package/src/diagrams/cloud.js +11 -11
  35. package/src/diagrams/cloud.js.map +1 -1
  36. package/src/diagrams/cube.d.ts +2 -2
  37. package/src/diagrams/cube.js +67 -69
  38. package/src/diagrams/cube.js.map +1 -1
  39. package/src/diagrams/diamond.d.ts +2 -2
  40. package/src/diagrams/diamond.js +12 -12
  41. package/src/diagrams/diamond.js.map +1 -1
  42. package/src/diagrams/file.d.ts +2 -2
  43. package/src/diagrams/file.js +17 -17
  44. package/src/diagrams/file.js.map +1 -1
  45. package/src/diagrams/gif.d.ts +5 -5
  46. package/src/diagrams/gif.js +88 -89
  47. package/src/diagrams/gif.js.map +1 -1
  48. package/src/diagrams/hexagon.d.ts +2 -2
  49. package/src/diagrams/hexagon.js +54 -54
  50. package/src/diagrams/hexagon.js.map +1 -1
  51. package/src/diagrams/iframe.d.ts +2 -2
  52. package/src/diagrams/iframe.js +337 -355
  53. package/src/diagrams/iframe.js.map +1 -1
  54. package/src/diagrams/index.d.ts +71 -71
  55. package/src/diagrams/index.js +76 -76
  56. package/src/diagrams/index.js.map +1 -1
  57. package/src/diagrams/line/arrow.d.ts +2 -2
  58. package/src/diagrams/line/arrow.js +127 -127
  59. package/src/diagrams/line/arrow.js.map +1 -1
  60. package/src/diagrams/line/curve.d.ts +16 -16
  61. package/src/diagrams/line/curve.js +226 -235
  62. package/src/diagrams/line/curve.js.map +1 -1
  63. package/src/diagrams/line/index.d.ts +5 -5
  64. package/src/diagrams/line/index.js +5 -5
  65. package/src/diagrams/line/line.d.ts +42 -42
  66. package/src/diagrams/line/line.js +369 -430
  67. package/src/diagrams/line/line.js.map +1 -1
  68. package/src/diagrams/line/polyline.d.ts +10 -10
  69. package/src/diagrams/line/polyline.js +626 -656
  70. package/src/diagrams/line/polyline.js.map +1 -1
  71. package/src/diagrams/line/smooth.d.ts +3 -3
  72. package/src/diagrams/line/smooth.js +135 -173
  73. package/src/diagrams/line/smooth.js.map +1 -1
  74. package/src/diagrams/message.d.ts +2 -2
  75. package/src/diagrams/message.js +14 -14
  76. package/src/diagrams/message.js.map +1 -1
  77. package/src/diagrams/mindLine.d.ts +3 -3
  78. package/src/diagrams/mindLine.js +29 -30
  79. package/src/diagrams/mindLine.js.map +1 -1
  80. package/src/diagrams/mindNode.d.ts +3 -3
  81. package/src/diagrams/mindNode.js +160 -188
  82. package/src/diagrams/mindNode.js.map +1 -1
  83. package/src/diagrams/panel.d.ts +2 -2
  84. package/src/diagrams/panel.js +130 -130
  85. package/src/diagrams/panel.js.map +1 -1
  86. package/src/diagrams/pentagon.d.ts +3 -3
  87. package/src/diagrams/pentagon.js +44 -45
  88. package/src/diagrams/pentagon.js.map +1 -1
  89. package/src/diagrams/pentagram.d.ts +3 -3
  90. package/src/diagrams/pentagram.js +50 -76
  91. package/src/diagrams/pentagram.js.map +1 -1
  92. package/src/diagrams/people.d.ts +2 -2
  93. package/src/diagrams/people.js +18 -18
  94. package/src/diagrams/people.js.map +1 -1
  95. package/src/diagrams/rectangle.d.ts +3 -3
  96. package/src/diagrams/rectangle.js +25 -25
  97. package/src/diagrams/rectangle.js.map +1 -1
  98. package/src/diagrams/svg/parse.d.ts +15 -15
  99. package/src/diagrams/svg/parse.js +278 -325
  100. package/src/diagrams/svg/parse.js.map +1 -1
  101. package/src/diagrams/svgPath.d.ts +2 -2
  102. package/src/diagrams/svgPath.js +28 -29
  103. package/src/diagrams/svgPath.js.map +1 -1
  104. package/src/diagrams/triangle.d.ts +3 -3
  105. package/src/diagrams/triangle.js +39 -40
  106. package/src/diagrams/triangle.js.map +1 -1
  107. package/src/diagrams/video.d.ts +5 -5
  108. package/src/diagrams/video.js +183 -184
  109. package/src/diagrams/video.js.map +1 -1
  110. package/src/dialog/dialog.d.ts +21 -21
  111. package/src/dialog/dialog.js +156 -97
  112. package/src/dialog/dialog.js.map +1 -1
  113. package/src/dialog/index.d.ts +1 -1
  114. package/src/dialog/index.js +1 -1
  115. package/src/event/event.d.ts +102 -102
  116. package/src/event/event.js +21 -21
  117. package/src/event/index.d.ts +1 -1
  118. package/src/event/index.js +1 -1
  119. package/src/map/index.d.ts +1 -1
  120. package/src/map/index.js +1 -1
  121. package/src/map/map.d.ts +21 -21
  122. package/src/map/map.js +211 -209
  123. package/src/map/map.js.map +1 -1
  124. package/src/options.d.ts +130 -130
  125. package/src/options.js +79 -79
  126. package/src/options.js.map +1 -1
  127. package/src/pen/arrow.d.ts +4 -4
  128. package/src/pen/arrow.js +187 -187
  129. package/src/pen/arrow.js.map +1 -1
  130. package/src/pen/index.d.ts +6 -6
  131. package/src/pen/index.js +6 -6
  132. package/src/pen/math.d.ts +28 -28
  133. package/src/pen/math.js +212 -303
  134. package/src/pen/math.js.map +1 -1
  135. package/src/pen/model.d.ts +514 -514
  136. package/src/pen/model.js +209 -209
  137. package/src/pen/model.js.map +1 -1
  138. package/src/pen/plugin.d.ts +5 -5
  139. package/src/pen/plugin.js +57 -87
  140. package/src/pen/plugin.js.map +1 -1
  141. package/src/pen/render.d.ts +146 -147
  142. package/src/pen/render.js +3233 -3235
  143. package/src/pen/render.js.map +1 -1
  144. package/src/pen/text.d.ts +8 -8
  145. package/src/pen/text.js +315 -374
  146. package/src/pen/text.js.map +1 -1
  147. package/src/pen/utils.d.ts +2 -2
  148. package/src/pen/utils.js +18 -40
  149. package/src/pen/utils.js.map +1 -1
  150. package/src/point/index.d.ts +1 -1
  151. package/src/point/index.js +1 -1
  152. package/src/point/point.d.ts +65 -65
  153. package/src/point/point.js +177 -178
  154. package/src/point/point.js.map +1 -1
  155. package/src/rect/index.d.ts +1 -1
  156. package/src/rect/index.js +1 -1
  157. package/src/rect/rect.d.ts +52 -52
  158. package/src/rect/rect.js +426 -485
  159. package/src/rect/rect.js.map +1 -1
  160. package/src/rect/triangle.d.ts +2 -2
  161. package/src/rect/triangle.js +9 -9
  162. package/src/rect/triangle.js.map +1 -1
  163. package/src/scroll/index.d.ts +1 -1
  164. package/src/scroll/index.js +1 -1
  165. package/src/scroll/scroll.d.ts +35 -35
  166. package/src/scroll/scroll.js +233 -220
  167. package/src/scroll/scroll.js.map +1 -1
  168. package/src/store/global.d.ts +25 -25
  169. package/src/store/global.js +17 -17
  170. package/src/store/global.js.map +1 -1
  171. package/src/store/index.d.ts +2 -2
  172. package/src/store/index.js +2 -2
  173. package/src/store/store.d.ts +228 -228
  174. package/src/store/store.js +86 -120
  175. package/src/store/store.js.map +1 -1
  176. package/src/theme.d.ts +13 -13
  177. package/src/theme.js +22 -22
  178. package/src/theme.js.map +1 -1
  179. package/src/title/index.d.ts +1 -1
  180. package/src/title/index.js +1 -1
  181. package/src/title/title.d.ts +30 -30
  182. package/src/title/title.js +98 -98
  183. package/src/title/title.js.map +1 -1
  184. package/src/tooltip/index.d.ts +1 -1
  185. package/src/tooltip/index.js +1 -1
  186. package/src/tooltip/tooltip.d.ts +40 -40
  187. package/src/tooltip/tooltip.js +171 -166
  188. package/src/tooltip/tooltip.js.map +1 -1
  189. package/src/utils/clone.d.ts +8 -8
  190. package/src/utils/clone.js +83 -87
  191. package/src/utils/clone.js.map +1 -1
  192. package/src/utils/color.d.ts +3 -3
  193. package/src/utils/color.js +109 -125
  194. package/src/utils/color.js.map +1 -1
  195. package/src/utils/error.d.ts +2 -2
  196. package/src/utils/error.js +5 -5
  197. package/src/utils/error.js.map +1 -1
  198. package/src/utils/file.d.ts +3 -3
  199. package/src/utils/file.js +39 -91
  200. package/src/utils/file.js.map +1 -1
  201. package/src/utils/index.d.ts +9 -8
  202. package/src/utils/index.js +9 -8
  203. package/src/utils/index.js.map +1 -1
  204. package/src/utils/math.d.ts +18 -18
  205. package/src/utils/math.js +113 -151
  206. package/src/utils/math.js.map +1 -1
  207. package/src/utils/object.d.ts +2 -2
  208. package/src/utils/object.js +20 -20
  209. package/src/utils/object.js.map +1 -1
  210. package/src/utils/padding.d.ts +7 -7
  211. package/src/utils/padding.js +46 -46
  212. package/src/utils/padding.js.map +1 -1
  213. package/src/utils/time.d.ts +1 -1
  214. package/src/utils/time.js +16 -16
  215. package/src/utils/time.js.map +1 -1
  216. package/src/utils/url.d.ts +4 -4
  217. package/src/utils/url.js +26 -26
  218. package/src/utils/url.js.map +1 -1
  219. package/src/utils/uuid.d.ts +4 -4
  220. package/src/utils/uuid.js +12 -12
  221. package/src/utils/browser.d.ts +0 -1
  222. package/src/utils/browser.js +0 -4
  223. package/src/utils/browser.js.map +0 -1
@@ -1,431 +1,370 @@
1
- var __read = (this && this.__read) || function (o, n) {
2
- var m = typeof Symbol === "function" && o[Symbol.iterator];
3
- if (!m) return o;
4
- var i = m.call(o), r, ar = [], e;
5
- try {
6
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
7
- }
8
- catch (error) { e = { error: error }; }
9
- finally {
10
- try {
11
- if (r && !r.done && (m = i["return"])) m.call(i);
12
- }
13
- finally { if (e) throw e.error; }
14
- }
15
- return ar;
16
- };
17
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
18
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
19
- if (ar || !(i in from)) {
20
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
21
- ar[i] = from[i];
22
- }
23
- }
24
- return to.concat(ar || Array.prototype.slice.call(from));
25
- };
26
- var __values = (this && this.__values) || function(o) {
27
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
28
- if (m) return m.call(o);
29
- if (o && typeof o.length === "number") return {
30
- next: function () {
31
- if (o && i >= o.length) o = void 0;
32
- return { value: o && o[i++], done: !o };
33
- }
34
- };
35
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
36
- };
37
- import { deleteTempAnchor, getFromAnchor, getGradientAnimatePath, getToAnchor } from '../../pen';
38
- import { hitPoint } from '../../point';
39
- import { getRectOfPoints, pointInSimpleRect } from '../../rect';
40
- import { getBezierPoint, getQuadraticPoint } from './curve';
41
- export function line(pen, ctx) {
42
- var path = !ctx ? new Path2D() : ctx;
43
- if (pen.lineName === 'line' || pen.lineName === 'polyline') {
44
- if (pen.calculative.lineSmooth) {
45
- var _path = getGradientAnimatePath(pen);
46
- path.addPath(_path);
47
- if (path instanceof Path2D)
48
- return path;
49
- }
50
- }
51
- var worldAnchors = pen.calculative.worldAnchors;
52
- if (worldAnchors.length > 1) {
53
- var from_1; // 上一个点
54
- worldAnchors.forEach(function (pt) {
55
- if (from_1) {
56
- draw(path, from_1, pt);
57
- }
58
- else {
59
- pt.start = true;
60
- }
61
- from_1 = pt;
62
- });
63
- if (pen.close) {
64
- draw(path, from_1, worldAnchors[0]);
65
- }
66
- }
67
- if (path instanceof Path2D)
68
- return path;
69
- }
70
- export function lineSegment(store, pen, mousedwon) {
71
- var _a;
72
- if (!pen.calculative.worldAnchors) {
73
- pen.calculative.worldAnchors = [];
74
- }
75
- if (pen.calculative.worldAnchors.length < 2 || ((_a = pen.anchors) === null || _a === void 0 ? void 0 : _a.length) > 1) {
76
- return;
77
- }
78
- var from = getFromAnchor(pen);
79
- var to = getToAnchor(pen);
80
- if (!from || !to || !to.id || from === to) {
81
- return;
82
- }
83
- from.next = undefined;
84
- deleteTempAnchor(pen);
85
- to.prev = undefined;
86
- pen.calculative.worldAnchors.push(to);
87
- }
88
- function draw(path, from, to) {
89
- if (!to || to.isTemp) {
90
- return;
91
- }
92
- from.start && path.moveTo(from.x, from.y);
93
- if (from.next) {
94
- if (to.prev) {
95
- path.bezierCurveTo(from.next.x, from.next.y, to.prev.x, to.prev.y, to.x, to.y);
96
- }
97
- else {
98
- path.quadraticCurveTo(from.next.x, from.next.y, to.x, to.y);
99
- }
100
- }
101
- else {
102
- if (to.prev) {
103
- path.quadraticCurveTo(to.prev.x, to.prev.y, to.x, to.y);
104
- }
105
- else {
106
- path.lineTo(to.x, to.y);
107
- }
108
- }
109
- }
110
- export function getLineRect(pen) {
111
- getLineLength(pen);
112
- return getRectOfPoints(getLinePoints(pen));
113
- }
114
- /**
115
- * 获取连线的 points ,并非 worldAnchors ,worldAnchors 之前的路径点也会记录
116
- */
117
- export function getLinePoints(pen) {
118
- var pts = [];
119
- var from; // 上一个点
120
- pen.calculative.worldAnchors.forEach(function (pt) {
121
- pts.push(pt);
122
- from && pts.push.apply(pts, __spreadArray([], __read(getPoints(from, pt, pen)), false));
123
- from = pt;
124
- });
125
- if (pen.close && pen.calculative.worldAnchors.length > 1) {
126
- pts.push.apply(pts, __spreadArray([], __read(getPoints(from, pen.calculative.worldAnchors[0], pen)), false));
127
- }
128
- return pts;
129
- }
130
- export function getLineR(pen) {
131
- return (pen === null || pen === void 0 ? void 0 : pen.lineWidth) ? pen.lineWidth / 2 + 4 : 4;
132
- }
133
- export function getPoints(from, to, pen) {
134
- var pts = [];
135
- if (!to) {
136
- return pts;
137
- }
138
- var step = 0.02;
139
- if (from.lineLength) {
140
- var r = getLineR(pen);
141
- step = r / from.lineLength;
142
- }
143
- if (from.next) {
144
- if (to.prev) {
145
- for (var i = step; i < 1; i += step) {
146
- pts.push(getBezierPoint(i, from, from.next, to.prev, to));
147
- }
148
- }
149
- else {
150
- for (var i = step; i < 1; i += step) {
151
- pts.push(getQuadraticPoint(i, from, from.next, to));
152
- }
153
- }
154
- }
155
- else {
156
- if (to.prev) {
157
- for (var i = step; i < 1; i += step) {
158
- pts.push(getQuadraticPoint(i, from, to.prev, to));
159
- }
160
- }
161
- else {
162
- pts.push({ x: to.x, y: to.y });
163
- }
164
- }
165
- if (pts.length > 1) {
166
- from.curvePoints = pts;
167
- }
168
- return pts;
169
- }
170
- export function pointInLine(pt, pen) {
171
- var e_1, _a;
172
- var r = getLineR(pen);
173
- var i = 0;
174
- var from; // 上一个点
175
- var point;
176
- try {
177
- for (var _b = __values(pen.calculative.worldAnchors), _c = _b.next(); !_c.done; _c = _b.next()) {
178
- var anchor = _c.value;
179
- if (from) {
180
- point = pointInLineSegment(pt, from, anchor, r);
181
- if (point) {
182
- return {
183
- i: i,
184
- point: point,
185
- };
186
- }
187
- ++i;
188
- }
189
- from = anchor;
190
- }
191
- }
192
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
193
- finally {
194
- try {
195
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
196
- }
197
- finally { if (e_1) throw e_1.error; }
198
- }
199
- if (pen.close &&
200
- pen.calculative.worldAnchors.length > 1 &&
201
- (point = pointInLineSegment(pt, from, pen.calculative.worldAnchors[0], r))) {
202
- return {
203
- i: i,
204
- point: point,
205
- };
206
- }
207
- }
208
- export function pointInLineSegment(pt, pt1, pt2, r) {
209
- var e_2, _a;
210
- if (r === void 0) { r = 4; }
211
- if (!pt1.next && !pt2.prev) {
212
- var x1 = pt1.x, y1 = pt1.y;
213
- var x2 = pt2.x, y2 = pt2.y;
214
- var minX = Math.min(x1, x2);
215
- var maxX = Math.max(x1, x2);
216
- var minY = Math.min(y1, y2);
217
- var maxY = Math.max(y1, y2);
218
- if (!(pt.x >= minX - r &&
219
- pt.x <= maxX + r &&
220
- pt.y >= minY - r &&
221
- pt.y <= maxY + r)) {
222
- return;
223
- }
224
- return pointToLine(pt, pt1, pt2, r);
225
- }
226
- else if (pt1.curvePoints) {
227
- try {
228
- for (var _b = __values(pt1.curvePoints), _c = _b.next(); !_c.done; _c = _b.next()) {
229
- var point = _c.value;
230
- if (hitPoint(pt, point, r)) {
231
- return point;
232
- }
233
- }
234
- }
235
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
236
- finally {
237
- try {
238
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
239
- }
240
- finally { if (e_2) throw e_2.error; }
241
- }
242
- }
243
- }
244
- export function pointToLine(pt, pt1, pt2, r) {
245
- if (r === void 0) { r = 4; }
246
- // 竖线
247
- if (pt1.x === pt2.x) {
248
- var len = Math.abs(pt.x - pt1.x);
249
- if (len <= r) {
250
- return {
251
- x: pt1.x,
252
- y: pt.y,
253
- };
254
- }
255
- }
256
- else {
257
- var A = (pt1.y - pt2.y) / (pt1.x - pt2.x);
258
- var B = pt1.y - A * pt1.x;
259
- var len = Math.abs((A * pt.x + B - pt.y) / Math.sqrt(A * A + 1));
260
- if (len <= r) {
261
- var m = pt.x + A * pt.y;
262
- var x = (m - A * B) / (A * A + 1);
263
- return {
264
- x: x,
265
- y: A * x + B,
266
- };
267
- }
268
- }
269
- }
270
- function lineLen(from, cp1, cp2, to) {
271
- if (!cp1 && !cp2) {
272
- return (Math.sqrt(Math.pow(Math.abs(from.x - to.x), 2) +
273
- Math.pow(Math.abs(from.y - to.y), 2)) || 0);
274
- }
275
- var path = document.createElementNS('http://www.w3.org/2000/svg', 'path');
276
- if (cp1 && cp2) {
277
- path.setAttribute('d', "M" + from.x + " " + from.y + " C" + cp1.x + " " + cp1.y + " " + cp2.x + " " + cp2.y + " " + to.x + " " + to.y);
278
- }
279
- else if (cp1) {
280
- path.setAttribute('d', "M" + from.x + " " + from.y + " Q" + cp1.x + " " + cp1.y + " " + to.x + " " + to.y);
281
- }
282
- else {
283
- path.setAttribute('d', "M" + from.x + " " + from.y + " Q" + cp2.x + " " + cp2.y + " " + to.x + " " + to.y);
284
- }
285
- return path.getTotalLength() || 0;
286
- }
287
- export function getLineLength(pen) {
288
- if (pen.calculative.worldAnchors.length < 2) {
289
- return 0;
290
- }
291
- var len = 0;
292
- var from; // 上一个点
293
- pen.calculative.worldAnchors.forEach(function (pt) {
294
- if (from) {
295
- from.lineLength = lineLen(from, from.next, pt.prev, pt);
296
- len += from.lineLength;
297
- }
298
- from = pt;
299
- });
300
- if (pen.close) {
301
- // pen.close ,下一个点即第一个点
302
- var to = getFromAnchor(pen);
303
- from.lineLength = lineLen(from, from.next, to.prev, to);
304
- len += from.lineLength;
305
- }
306
- if (pen.calculative.animatePos) {
307
- pen.calculative.animatePos =
308
- (len / pen.length) * pen.calculative.animatePos;
309
- }
310
- pen.length = len;
311
- return len;
312
- }
313
- /**
314
- * 连线在 rect 内, 连线与 rect 相交
315
- */
316
- export function lineInRect(line, rect) {
317
- // 判断是直线还是贝塞尔
318
- var worldAnchors = line.calculative.worldAnchors;
319
- for (var index = 0; index < worldAnchors.length - 1; index++) {
320
- var current = worldAnchors[index];
321
- var next = worldAnchors[index + 1];
322
- if (!current.next && !next.prev) {
323
- // 线段
324
- if (isLineIntersectRectangle(current, next, rect)) {
325
- return true;
326
- }
327
- }
328
- else {
329
- // 贝塞尔
330
- if (isBezierIntersectRectangle(current, next, rect)) {
331
- return true;
332
- }
333
- }
334
- }
335
- return false;
336
- }
337
- /**
338
- * 线段与矩形是否相交
339
- * @param rect 矩形
340
- */
341
- export function isLineIntersectRectangle(pt1, pt2, rect) {
342
- if (pointInSimpleRect(pt1, rect) || pointInSimpleRect(pt2, rect)) {
343
- // 存在一个点在矩形内部
344
- return true;
345
- }
346
- var linePointX1 = pt1.x;
347
- var linePointY1 = pt1.y;
348
- var linePointX2 = pt2.x;
349
- var linePointY2 = pt2.y;
350
- var rectangleLeftTopX = rect.x;
351
- var rectangleLeftTopY = rect.y;
352
- var rectangleRightBottomX = rect.ex;
353
- var rectangleRightBottomY = rect.ey;
354
- var lineHeight = linePointY1 - linePointY2;
355
- var lineWidth = linePointX2 - linePointX1; // 计算叉乘
356
- var c = linePointX1 * linePointY2 - linePointX2 * linePointY1;
357
- if ((lineHeight * rectangleLeftTopX + lineWidth * rectangleLeftTopY + c >= 0 &&
358
- lineHeight * rectangleRightBottomX +
359
- lineWidth * rectangleRightBottomY +
360
- c <=
361
- 0) ||
362
- (lineHeight * rectangleLeftTopX + lineWidth * rectangleLeftTopY + c <= 0 &&
363
- lineHeight * rectangleRightBottomX +
364
- lineWidth * rectangleRightBottomY +
365
- c >=
366
- 0) ||
367
- (lineHeight * rectangleLeftTopX + lineWidth * rectangleRightBottomY + c >=
368
- 0 &&
369
- lineHeight * rectangleRightBottomX + lineWidth * rectangleLeftTopY + c <=
370
- 0) ||
371
- (lineHeight * rectangleLeftTopX + lineWidth * rectangleRightBottomY + c <=
372
- 0 &&
373
- lineHeight * rectangleRightBottomX + lineWidth * rectangleLeftTopY + c >=
374
- 0)) {
375
- if (rectangleLeftTopX > rectangleRightBottomX) {
376
- var temp = rectangleLeftTopX;
377
- rectangleLeftTopX = rectangleRightBottomX;
378
- rectangleRightBottomX = temp;
379
- }
380
- if (rectangleLeftTopY < rectangleRightBottomY) {
381
- var temp1 = rectangleLeftTopY;
382
- rectangleLeftTopY = rectangleRightBottomY;
383
- rectangleRightBottomY = temp1;
384
- }
385
- if ((linePointX1 < rectangleLeftTopX && linePointX2 < rectangleLeftTopX) ||
386
- (linePointX1 > rectangleRightBottomX &&
387
- linePointX2 > rectangleRightBottomX) ||
388
- (linePointY1 > rectangleLeftTopY && linePointY2 > rectangleLeftTopY) ||
389
- (linePointY1 < rectangleRightBottomY &&
390
- linePointY2 < rectangleRightBottomY)) {
391
- return false;
392
- }
393
- else {
394
- return true;
395
- }
396
- }
397
- else {
398
- return false;
399
- }
400
- }
401
- /**
402
- * 贝塞尔曲线与矩形是否相交
403
- * @param from 前点
404
- * @param to 后点
405
- * @param rect 矩形
406
- */
407
- export function isBezierIntersectRectangle(from, to, rect) {
408
- var step = 0.02;
409
- if (!from.next && !to.prev) {
410
- // 直线
411
- return isLineIntersectRectangle(from, to, rect);
412
- }
413
- else if (from.next && to.prev) {
414
- for (var i = step; i < 1; i += step) {
415
- var point = getBezierPoint(i, from, from.next, to.prev, to);
416
- if (pointInSimpleRect(point, rect)) {
417
- return true;
418
- }
419
- }
420
- }
421
- else if (from.next || to.prev) {
422
- for (var i = step; i < 1; i += step) {
423
- var point = getQuadraticPoint(i, from, from.next || to.prev, to);
424
- if (pointInSimpleRect(point, rect)) {
425
- return true;
426
- }
427
- }
428
- }
429
- return false;
430
- }
1
+ import { deleteTempAnchor, getFromAnchor, getGradientAnimatePath, getToAnchor } from '../../pen';
2
+ import { hitPoint } from '../../point';
3
+ import { getRectOfPoints, pointInSimpleRect } from '../../rect';
4
+ import { getBezierPoint, getQuadraticPoint } from './curve';
5
+ export function line(pen, ctx) {
6
+ const path = !ctx ? new Path2D() : ctx;
7
+ if (pen.lineName === 'line' || pen.lineName === 'polyline') {
8
+ if (pen.calculative.lineSmooth) {
9
+ let _path = getGradientAnimatePath(pen);
10
+ path.addPath(_path);
11
+ if (path instanceof Path2D)
12
+ return path;
13
+ }
14
+ }
15
+ const worldAnchors = pen.calculative.worldAnchors;
16
+ if (worldAnchors.length > 1) {
17
+ let from; // 上一个点
18
+ worldAnchors.forEach((pt) => {
19
+ if (from) {
20
+ draw(path, from, pt);
21
+ }
22
+ else {
23
+ pt.start = true;
24
+ }
25
+ from = pt;
26
+ });
27
+ if (pen.close) {
28
+ draw(path, from, worldAnchors[0]);
29
+ }
30
+ }
31
+ if (path instanceof Path2D)
32
+ return path;
33
+ }
34
+ export function lineSegment(store, pen, mousedwon) {
35
+ if (!pen.calculative.worldAnchors) {
36
+ pen.calculative.worldAnchors = [];
37
+ }
38
+ if (pen.calculative.worldAnchors.length < 2 || pen.anchors?.length > 1) {
39
+ return;
40
+ }
41
+ const from = getFromAnchor(pen);
42
+ const to = getToAnchor(pen);
43
+ if (!from || !to || !to.id || from === to) {
44
+ return;
45
+ }
46
+ from.next = undefined;
47
+ deleteTempAnchor(pen);
48
+ to.prev = undefined;
49
+ pen.calculative.worldAnchors.push(to);
50
+ }
51
+ function draw(path, from, to) {
52
+ if (!to || to.isTemp) {
53
+ return;
54
+ }
55
+ from.start && path.moveTo(from.x, from.y);
56
+ if (from.next) {
57
+ if (to.prev) {
58
+ path.bezierCurveTo(from.next.x, from.next.y, to.prev.x, to.prev.y, to.x, to.y);
59
+ }
60
+ else {
61
+ path.quadraticCurveTo(from.next.x, from.next.y, to.x, to.y);
62
+ }
63
+ }
64
+ else {
65
+ if (to.prev) {
66
+ path.quadraticCurveTo(to.prev.x, to.prev.y, to.x, to.y);
67
+ }
68
+ else {
69
+ path.lineTo(to.x, to.y);
70
+ }
71
+ }
72
+ }
73
+ export function getLineRect(pen) {
74
+ getLineLength(pen);
75
+ return getRectOfPoints(getLinePoints(pen));
76
+ }
77
+ /**
78
+ * 获取连线的 points ,并非 worldAnchors ,worldAnchors 之前的路径点也会记录
79
+ */
80
+ export function getLinePoints(pen) {
81
+ const pts = [];
82
+ let from; // 上一个点
83
+ pen.calculative.worldAnchors.forEach((pt) => {
84
+ pts.push(pt);
85
+ from && pts.push(...getPoints(from, pt, pen));
86
+ from = pt;
87
+ });
88
+ if (pen.close && pen.calculative.worldAnchors.length > 1) {
89
+ pts.push(...getPoints(from, pen.calculative.worldAnchors[0], pen));
90
+ }
91
+ return pts;
92
+ }
93
+ export function getLineR(pen) {
94
+ return pen?.lineWidth ? pen.lineWidth / 2 + 4 : 4;
95
+ }
96
+ export function getPoints(from, to, pen) {
97
+ const pts = [];
98
+ if (!to) {
99
+ return pts;
100
+ }
101
+ let step = 0.02;
102
+ if (from.lineLength) {
103
+ const r = getLineR(pen);
104
+ step = r / from.lineLength;
105
+ }
106
+ if (from.next) {
107
+ if (to.prev) {
108
+ for (let i = step; i < 1; i += step) {
109
+ pts.push(getBezierPoint(i, from, from.next, to.prev, to));
110
+ }
111
+ }
112
+ else {
113
+ for (let i = step; i < 1; i += step) {
114
+ pts.push(getQuadraticPoint(i, from, from.next, to));
115
+ }
116
+ }
117
+ }
118
+ else {
119
+ if (to.prev) {
120
+ for (let i = step; i < 1; i += step) {
121
+ pts.push(getQuadraticPoint(i, from, to.prev, to));
122
+ }
123
+ }
124
+ else {
125
+ pts.push({ x: to.x, y: to.y });
126
+ }
127
+ }
128
+ if (pts.length > 1) {
129
+ from.curvePoints = pts;
130
+ }
131
+ return pts;
132
+ }
133
+ export function pointInLine(pt, pen) {
134
+ const r = getLineR(pen);
135
+ let i = 0;
136
+ let from; // 上一个点
137
+ let point;
138
+ for (const anchor of pen.calculative.worldAnchors) {
139
+ if (from) {
140
+ point = pointInLineSegment(pt, from, anchor, r);
141
+ if (point) {
142
+ return {
143
+ i,
144
+ point,
145
+ };
146
+ }
147
+ ++i;
148
+ }
149
+ from = anchor;
150
+ }
151
+ if (pen.close &&
152
+ pen.calculative.worldAnchors.length > 1 &&
153
+ (point = pointInLineSegment(pt, from, pen.calculative.worldAnchors[0], r))) {
154
+ return {
155
+ i,
156
+ point,
157
+ };
158
+ }
159
+ }
160
+ export function pointInLineSegment(pt, pt1, pt2, r = 4) {
161
+ if (!pt1.next && !pt2.prev) {
162
+ const { x: x1, y: y1 } = pt1;
163
+ const { x: x2, y: y2 } = pt2;
164
+ const minX = Math.min(x1, x2);
165
+ const maxX = Math.max(x1, x2);
166
+ const minY = Math.min(y1, y2);
167
+ const maxY = Math.max(y1, y2);
168
+ if (!(pt.x >= minX - r &&
169
+ pt.x <= maxX + r &&
170
+ pt.y >= minY - r &&
171
+ pt.y <= maxY + r)) {
172
+ return;
173
+ }
174
+ return pointToLine(pt, pt1, pt2, r);
175
+ }
176
+ else if (pt1.curvePoints) {
177
+ for (const point of pt1.curvePoints) {
178
+ if (hitPoint(pt, point, r)) {
179
+ return point;
180
+ }
181
+ }
182
+ }
183
+ }
184
+ export function pointToLine(pt, pt1, pt2, r = 4) {
185
+ // 竖线
186
+ if (pt1.x === pt2.x) {
187
+ const len = Math.abs(pt.x - pt1.x);
188
+ if (len <= r) {
189
+ return {
190
+ x: pt1.x,
191
+ y: pt.y,
192
+ };
193
+ }
194
+ }
195
+ else {
196
+ const A = (pt1.y - pt2.y) / (pt1.x - pt2.x);
197
+ const B = pt1.y - A * pt1.x;
198
+ const len = Math.abs((A * pt.x + B - pt.y) / Math.sqrt(A * A + 1));
199
+ if (len <= r) {
200
+ const m = pt.x + A * pt.y;
201
+ const x = (m - A * B) / (A * A + 1);
202
+ return {
203
+ x,
204
+ y: A * x + B,
205
+ };
206
+ }
207
+ }
208
+ }
209
+ function lineLen(from, cp1, cp2, to) {
210
+ if (!cp1 && !cp2) {
211
+ return (Math.sqrt(Math.pow(Math.abs(from.x - to.x), 2) +
212
+ Math.pow(Math.abs(from.y - to.y), 2)) || 0);
213
+ }
214
+ const path = document.createElementNS('http://www.w3.org/2000/svg', 'path');
215
+ if (cp1 && cp2) {
216
+ path.setAttribute('d', `M${from.x} ${from.y} C${cp1.x} ${cp1.y} ${cp2.x} ${cp2.y} ${to.x} ${to.y}`);
217
+ }
218
+ else if (cp1) {
219
+ path.setAttribute('d', `M${from.x} ${from.y} Q${cp1.x} ${cp1.y} ${to.x} ${to.y}`);
220
+ }
221
+ else {
222
+ path.setAttribute('d', `M${from.x} ${from.y} Q${cp2.x} ${cp2.y} ${to.x} ${to.y}`);
223
+ }
224
+ return path.getTotalLength() || 0;
225
+ }
226
+ export function getLineLength(pen) {
227
+ if (pen.calculative.worldAnchors.length < 2) {
228
+ return 0;
229
+ }
230
+ let len = 0;
231
+ let from; // 上一个点
232
+ pen.calculative.worldAnchors.forEach((pt) => {
233
+ if (from) {
234
+ from.lineLength = lineLen(from, from.next, pt.prev, pt);
235
+ len += from.lineLength;
236
+ }
237
+ from = pt;
238
+ });
239
+ if (pen.close) {
240
+ // pen.close ,下一个点即第一个点
241
+ const to = getFromAnchor(pen);
242
+ from.lineLength = lineLen(from, from.next, to.prev, to);
243
+ len += from.lineLength;
244
+ }
245
+ if (pen.calculative.animatePos) {
246
+ pen.calculative.animatePos =
247
+ (len / pen.length) * pen.calculative.animatePos;
248
+ }
249
+ pen.length = len;
250
+ return len;
251
+ }
252
+ /**
253
+ * 连线在 rect 内, 连线与 rect 相交
254
+ */
255
+ export function lineInRect(line, rect) {
256
+ // 判断是直线还是贝塞尔
257
+ const worldAnchors = line.calculative.worldAnchors;
258
+ for (let index = 0; index < worldAnchors.length - 1; index++) {
259
+ const current = worldAnchors[index];
260
+ const next = worldAnchors[index + 1];
261
+ if (!current.next && !next.prev) {
262
+ // 线段
263
+ if (isLineIntersectRectangle(current, next, rect)) {
264
+ return true;
265
+ }
266
+ }
267
+ else {
268
+ // 贝塞尔
269
+ if (isBezierIntersectRectangle(current, next, rect)) {
270
+ return true;
271
+ }
272
+ }
273
+ }
274
+ return false;
275
+ }
276
+ /**
277
+ * 线段与矩形是否相交
278
+ * @param rect 矩形
279
+ */
280
+ export function isLineIntersectRectangle(pt1, pt2, rect) {
281
+ if (pointInSimpleRect(pt1, rect) || pointInSimpleRect(pt2, rect)) {
282
+ // 存在一个点在矩形内部
283
+ return true;
284
+ }
285
+ const linePointX1 = pt1.x;
286
+ const linePointY1 = pt1.y;
287
+ const linePointX2 = pt2.x;
288
+ const linePointY2 = pt2.y;
289
+ let rectangleLeftTopX = rect.x;
290
+ let rectangleLeftTopY = rect.y;
291
+ let rectangleRightBottomX = rect.ex;
292
+ let rectangleRightBottomY = rect.ey;
293
+ const lineHeight = linePointY1 - linePointY2;
294
+ const lineWidth = linePointX2 - linePointX1; // 计算叉乘
295
+ const c = linePointX1 * linePointY2 - linePointX2 * linePointY1;
296
+ if ((lineHeight * rectangleLeftTopX + lineWidth * rectangleLeftTopY + c >= 0 &&
297
+ lineHeight * rectangleRightBottomX +
298
+ lineWidth * rectangleRightBottomY +
299
+ c <=
300
+ 0) ||
301
+ (lineHeight * rectangleLeftTopX + lineWidth * rectangleLeftTopY + c <= 0 &&
302
+ lineHeight * rectangleRightBottomX +
303
+ lineWidth * rectangleRightBottomY +
304
+ c >=
305
+ 0) ||
306
+ (lineHeight * rectangleLeftTopX + lineWidth * rectangleRightBottomY + c >=
307
+ 0 &&
308
+ lineHeight * rectangleRightBottomX + lineWidth * rectangleLeftTopY + c <=
309
+ 0) ||
310
+ (lineHeight * rectangleLeftTopX + lineWidth * rectangleRightBottomY + c <=
311
+ 0 &&
312
+ lineHeight * rectangleRightBottomX + lineWidth * rectangleLeftTopY + c >=
313
+ 0)) {
314
+ if (rectangleLeftTopX > rectangleRightBottomX) {
315
+ const temp = rectangleLeftTopX;
316
+ rectangleLeftTopX = rectangleRightBottomX;
317
+ rectangleRightBottomX = temp;
318
+ }
319
+ if (rectangleLeftTopY < rectangleRightBottomY) {
320
+ const temp1 = rectangleLeftTopY;
321
+ rectangleLeftTopY = rectangleRightBottomY;
322
+ rectangleRightBottomY = temp1;
323
+ }
324
+ if ((linePointX1 < rectangleLeftTopX && linePointX2 < rectangleLeftTopX) ||
325
+ (linePointX1 > rectangleRightBottomX &&
326
+ linePointX2 > rectangleRightBottomX) ||
327
+ (linePointY1 > rectangleLeftTopY && linePointY2 > rectangleLeftTopY) ||
328
+ (linePointY1 < rectangleRightBottomY &&
329
+ linePointY2 < rectangleRightBottomY)) {
330
+ return false;
331
+ }
332
+ else {
333
+ return true;
334
+ }
335
+ }
336
+ else {
337
+ return false;
338
+ }
339
+ }
340
+ /**
341
+ * 贝塞尔曲线与矩形是否相交
342
+ * @param from 前点
343
+ * @param to 后点
344
+ * @param rect 矩形
345
+ */
346
+ export function isBezierIntersectRectangle(from, to, rect) {
347
+ const step = 0.02;
348
+ if (!from.next && !to.prev) {
349
+ // 直线
350
+ return isLineIntersectRectangle(from, to, rect);
351
+ }
352
+ else if (from.next && to.prev) {
353
+ for (let i = step; i < 1; i += step) {
354
+ const point = getBezierPoint(i, from, from.next, to.prev, to);
355
+ if (pointInSimpleRect(point, rect)) {
356
+ return true;
357
+ }
358
+ }
359
+ }
360
+ else if (from.next || to.prev) {
361
+ for (let i = step; i < 1; i += step) {
362
+ const point = getQuadraticPoint(i, from, from.next || to.prev, to);
363
+ if (pointInSimpleRect(point, rect)) {
364
+ return true;
365
+ }
366
+ }
367
+ }
368
+ return false;
369
+ }
431
370
  //# sourceMappingURL=line.js.map