@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
package/src/rect/rect.js CHANGED
@@ -1,486 +1,427 @@
1
- var __values = (this && this.__values) || function(o) {
2
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
3
- if (m) return m.call(o);
4
- if (o && typeof o.length === "number") return {
5
- next: function () {
6
- if (o && i >= o.length) o = void 0;
7
- return { value: o && o[i++], done: !o };
8
- }
9
- };
10
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
11
- };
12
- var __read = (this && this.__read) || function (o, n) {
13
- var m = typeof Symbol === "function" && o[Symbol.iterator];
14
- if (!m) return o;
15
- var i = m.call(o), r, ar = [], e;
16
- try {
17
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
18
- }
19
- catch (error) { e = { error: error }; }
20
- finally {
21
- try {
22
- if (r && !r.done && (m = i["return"])) m.call(i);
23
- }
24
- finally { if (e) throw e.error; }
25
- }
26
- return ar;
27
- };
28
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
29
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
30
- if (ar || !(i in from)) {
31
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
32
- ar[i] = from[i];
33
- }
34
- }
35
- return to.concat(ar || Array.prototype.slice.call(from));
36
- };
37
- import { isEqual } from '../pen';
38
- import { rotatePoint, scalePoint } from '../point';
39
- import { formatPadding } from '../utils';
40
- export function pointInRect(pt, rect) {
41
- if (!rect) {
42
- return;
43
- }
44
- if (rect.ex == null) {
45
- calcRightBottom(rect);
46
- }
47
- if (!rect.rotate ||
48
- // rect.width < 20 ||
49
- // rect.height < 20 ||
50
- rect.rotate % 360 === 0) {
51
- return pt.x > rect.x && pt.x < rect.ex && pt.y > rect.y && pt.y < rect.ey;
52
- }
53
- if (!rect.center) {
54
- calcCenter(rect);
55
- }
56
- var pts = [
57
- { x: rect.x, y: rect.y },
58
- { x: rect.ex, y: rect.y },
59
- { x: rect.ex, y: rect.ey },
60
- { x: rect.x, y: rect.ey },
61
- ];
62
- pts.forEach(function (item) {
63
- rotatePoint(item, rect.rotate, rect.pivot || rect.center);
64
- });
65
- return pointInVertices(pt, pts);
66
- }
67
- export function pointInSimpleRect(pt, rect, r) {
68
- if (r === void 0) { r = 0; }
69
- var x = rect.x, y = rect.y, ex = rect.ex, ey = rect.ey;
70
- return pt.x >= x - r && pt.x <= ex + r && pt.y >= y - r && pt.y <= ey + r;
71
- }
72
- export function calcCenter(rect) {
73
- if (!rect.center) {
74
- rect.center = {};
75
- }
76
- rect.center.x = rect.x + rect.width / 2;
77
- rect.center.y = rect.y + rect.height / 2;
78
- }
79
- export function calcRightBottom(rect) {
80
- rect.ex = rect.x + rect.width;
81
- rect.ey = rect.y + rect.height;
82
- }
83
- export function calcPivot(rect, pivot) {
84
- if (!rect.pivot) {
85
- rect.pivot = {};
86
- }
87
- rect.pivot.x = rect.x + rect.width * pivot.x;
88
- rect.pivot.y = rect.y + rect.height * pivot.y;
89
- }
90
- export function pointInVertices(point, vertices) {
91
- var e_1, _a;
92
- if (vertices.length < 3) {
93
- return false;
94
- }
95
- var isIn = false;
96
- var last = vertices[vertices.length - 1];
97
- try {
98
- for (var vertices_1 = __values(vertices), vertices_1_1 = vertices_1.next(); !vertices_1_1.done; vertices_1_1 = vertices_1.next()) {
99
- var item = vertices_1_1.value;
100
- if (last.y > point.y !== item.y > point.y) {
101
- if (item.x + ((point.y - item.y) * (last.x - item.x)) / (last.y - item.y) >
102
- point.x) {
103
- isIn = !isIn;
104
- }
105
- }
106
- last = item;
107
- }
108
- }
109
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
110
- finally {
111
- try {
112
- if (vertices_1_1 && !vertices_1_1.done && (_a = vertices_1.return)) _a.call(vertices_1);
113
- }
114
- finally { if (e_1) throw e_1.error; }
115
- }
116
- return isIn;
117
- }
118
- export function getRect(pens) {
119
- var points = [];
120
- pens.forEach(function (pen) {
121
- if (pen.isRuleLine) {
122
- return;
123
- }
124
- var rect = pen.calculative.worldRect;
125
- if (rect) {
126
- var pts = rectToPoints(rect);
127
- // rectToPoints 已经计算过 rotate 无需重复计算
128
- points.push.apply(points, __spreadArray([], __read(pts), false));
129
- }
130
- });
131
- var rect = getRectOfPoints(points);
132
- calcCenter(rect);
133
- return rect;
134
- }
135
- export function rectToPoints(rect) {
136
- var pts = [
137
- { x: rect.x, y: rect.y },
138
- { x: rect.ex, y: rect.y },
139
- { x: rect.ex, y: rect.ey },
140
- { x: rect.x, y: rect.ey },
141
- ];
142
- if (rect.rotate) {
143
- if (!rect.center) {
144
- calcCenter(rect);
145
- }
146
- pts.forEach(function (pt) {
147
- rotatePoint(pt, rect.rotate, rect.pivot || rect.center);
148
- });
149
- }
150
- return pts;
151
- }
152
- export function getRectOfPoints(points) {
153
- var x = Infinity;
154
- var y = Infinity;
155
- var ex = -Infinity;
156
- var ey = -Infinity;
157
- points === null || points === void 0 ? void 0 : points.forEach(function (item) {
158
- if (!isFinite(item.x) || !isFinite(item.y)) {
159
- return;
160
- }
161
- x = Math.min(x, item.x);
162
- y = Math.min(y, item.y);
163
- ex = Math.max(ex, item.x);
164
- ey = Math.max(ey, item.y);
165
- });
166
- return { x: x, y: y, ex: ex, ey: ey, width: ex - x, height: ey - y };
167
- }
168
- export function rectInRect(source, target, allIn) {
169
- if (source.rotate) {
170
- // 根据 rotate 扩大 rect
171
- source = getRectOfPoints(rectToPoints(source)); // 更改 source 引用地址值,不影响原值
172
- }
173
- if (allIn) {
174
- return (source.x > target.x &&
175
- source.ex < target.ex &&
176
- source.y > target.y &&
177
- source.ey < target.ey);
178
- }
179
- return !(source.x > target.ex ||
180
- source.ex < target.x ||
181
- source.ey < target.y ||
182
- source.y > target.ey);
183
- }
184
- /**
185
- * 一个 rect 在另一个 rect 的 四个角,即水平区域不重合,垂直区域不重合
186
- */
187
- export function rectInFourAngRect(source, target) {
188
- return ((target.x > source.ex || target.ex < source.x) &&
189
- (target.y > source.ey || target.ey < source.y));
190
- }
191
- /**
192
- * 扩大 rect ,x,y,ex,ey 值都会变
193
- * @param rect 原 rect ,无副作用
194
- * @param size padding 类型,可传四个方向的值,也可以只传一个值
195
- */
196
- export function expandRect(rect, size) {
197
- var padding = formatPadding(size);
198
- var retRect = {
199
- x: rect.x - padding[3],
200
- y: rect.y - padding[0],
201
- width: rect.width + padding[1] + padding[3],
202
- height: rect.height + padding[0] + padding[2],
203
- };
204
- calcRightBottom(retRect);
205
- return retRect;
206
- }
207
- export function translateRect(rect, x, y) {
208
- rect.x += x;
209
- rect.y += y;
210
- rect.ex += x;
211
- rect.ey += y;
212
- if (rect.center) {
213
- rect.center.x += x;
214
- rect.center.y += y;
215
- }
216
- if (rect.pivot) {
217
- rect.pivot.x += x;
218
- rect.pivot.y += y;
219
- }
220
- }
221
- /**
222
- * 通过两条线段计算出相交的点
223
- * @param line1 线段1
224
- * @param line2 线段2
225
- */
226
- function getIntersectPoint(line1, line2) {
227
- var k1 = (line1.to.y - line1.from.y) / (line1.to.x - line1.from.x);
228
- var k2 = (line2.to.y - line2.from.y) / (line2.to.x - line2.from.x);
229
- return getIntersectPointByK({
230
- k: k1,
231
- point: line1.from,
232
- }, {
233
- k: k2,
234
- point: line2.from,
235
- });
236
- }
237
- /**
238
- * 该方法作用同上,不过此方法需要传的是 斜率
239
- * @param line1 线段1
240
- * @param line2 线段2
241
- * @returns
242
- */
243
- function getIntersectPointByK(line1, line2) {
244
- if (isEqual(line1.k, 0)) {
245
- return {
246
- x: line2.point.x,
247
- y: line1.point.y,
248
- };
249
- }
250
- else if (isEqual(line2.k, 0)) {
251
- return {
252
- x: line1.point.x,
253
- y: line2.point.y,
254
- };
255
- }
256
- var b1 = line1.point.y - line1.k * line1.point.x;
257
- var b2 = line2.point.y - line2.k * line2.point.x;
258
- var x = (b2 - b1) / (line1.k - line2.k);
259
- var y = line1.k * x + b1;
260
- return {
261
- x: x,
262
- y: y,
263
- };
264
- }
265
- /**
266
- * 通过 4 个点和旋转角度,计算出原矩形(旋转前的矩形)
267
- * @param pts 4 个点
268
- * @param rotate 旋转角度
269
- */
270
- function pointsToRect(pts, rotate) {
271
- var e_2, _a;
272
- // 1. 计算 center,认为 0,2 ;1,3 的连线相交就是 center 点
273
- var center = getIntersectPoint({
274
- from: pts[0],
275
- to: pts[2],
276
- }, {
277
- from: pts[1],
278
- to: pts[3],
279
- });
280
- try {
281
- // 2. 把点反向转 rotate °
282
- for (var pts_1 = __values(pts), pts_1_1 = pts_1.next(); !pts_1_1.done; pts_1_1 = pts_1.next()) {
283
- var pt = pts_1_1.value;
284
- rotatePoint(pt, -rotate, center);
285
- }
286
- }
287
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
288
- finally {
289
- try {
290
- if (pts_1_1 && !pts_1_1.done && (_a = pts_1.return)) _a.call(pts_1);
291
- }
292
- finally { if (e_2) throw e_2.error; }
293
- }
294
- // 3. 计算区域
295
- return getRectOfPoints(pts);
296
- }
297
- export function resizeRect(rect, offsetX, offsetY, resizeIndex) {
298
- var calcRotate = rect.rotate ? rect.rotate % 360 : 0;
299
- if (calcRotate) {
300
- // 计算出外边的四个点
301
- var pts = rectToPoints(rect);
302
- // 斜率不改变,提前计算
303
- var k1 = (pts[0].y - pts[1].y) / (pts[0].x - pts[1].x);
304
- var k2 = (pts[1].y - pts[2].y) / (pts[1].x - pts[2].x);
305
- if (resizeIndex < 4) {
306
- // 斜对角的四个点
307
- // resize 的点
308
- pts[resizeIndex].x += offsetX;
309
- if (rect.ratio) {
310
- if (resizeIndex === 0 || resizeIndex === 2) {
311
- var calcOffsetY = offsetX * Math.tan((90 - (360 - calcRotate) - (Math.atan(rect.width / rect.height)) / Math.PI * 180) / 180 * Math.PI);
312
- pts[resizeIndex].y += calcOffsetY;
313
- }
314
- else {
315
- var calcOffsetY = offsetX * Math.tan((90 - (360 - calcRotate) + (Math.atan(rect.width / rect.height)) / Math.PI * 180) / 180 * Math.PI);
316
- pts[resizeIndex].y += calcOffsetY;
317
- }
318
- }
319
- else {
320
- pts[resizeIndex].y += offsetY;
321
- }
322
- // 不变的点
323
- var noChangePoint = pts[(resizeIndex + 2) % 4];
324
- // 由于斜率是不变的,我们只需要根据斜率 和 已知的两点求出相交的 另外两点
325
- pts[(resizeIndex + 1) % 4] = getIntersectPointByK({ k: resizeIndex % 2 ? k2 : k1, point: pts[resizeIndex] }, { k: resizeIndex % 2 ? k1 : k2, point: noChangePoint });
326
- pts[(resizeIndex + 4 - 1) % 4] = getIntersectPointByK({ k: resizeIndex % 2 ? k1 : k2, point: pts[resizeIndex] }, { k: resizeIndex % 2 ? k2 : k1, point: noChangePoint });
327
- }
328
- else {
329
- // 边缘四个点有两个点固定
330
- var k = [4, 6].includes(resizeIndex) ? k2 : k1;
331
- if (!isEqual(k, 0)) {
332
- pts[resizeIndex % 4].y += offsetY;
333
- pts[resizeIndex % 4].x += offsetY / k;
334
- pts[(resizeIndex + 1) % 4].y += offsetY;
335
- pts[(resizeIndex + 1) % 4].x += offsetY / k;
336
- }
337
- else {
338
- pts[resizeIndex % 4].x += offsetX;
339
- pts[(resizeIndex + 1) % 4].x += offsetX;
340
- }
341
- }
342
- if (Math.pow((pts[0].x - pts[1].x), 2) + Math.pow((pts[0].y - pts[1].y), 2) < 25 ||
343
- Math.pow((pts[1].x - pts[2].x), 2) + Math.pow((pts[1].y - pts[2].y), 2) < 25) {
344
- // 距离小于 5 不能继续 resize 了
345
- return;
346
- }
347
- var retRect = pointsToRect(pts, rect.rotate);
348
- calcCenter(retRect);
349
- Object.assign(rect, retRect);
350
- return;
351
- }
352
- switch (resizeIndex) {
353
- case 0:
354
- if (rect.width - offsetX < 5 || rect.height - offsetY < 5) {
355
- break;
356
- }
357
- rect.x += offsetX;
358
- rect.y += offsetY;
359
- rect.width -= offsetX;
360
- rect.height -= offsetY;
361
- break;
362
- case 1:
363
- if (rect.width + offsetX < 5 || rect.height - offsetY < 5) {
364
- break;
365
- }
366
- rect.ex += offsetX;
367
- rect.y += offsetY;
368
- rect.width += offsetX;
369
- rect.height -= offsetY;
370
- break;
371
- case 2:
372
- if (rect.width + offsetX < 5 || rect.height + offsetY < 5) {
373
- break;
374
- }
375
- rect.ex += offsetX;
376
- rect.ey += offsetY;
377
- rect.width += offsetX;
378
- rect.height += offsetY;
379
- break;
380
- case 3:
381
- if (rect.width - offsetX < 5 || rect.height + offsetY < 5) {
382
- break;
383
- }
384
- rect.x += offsetX;
385
- rect.ey += offsetY;
386
- rect.width -= offsetX;
387
- rect.height += offsetY;
388
- break;
389
- case 4:
390
- if (rect.height - offsetY < 5) {
391
- break;
392
- }
393
- rect.y += offsetY;
394
- rect.height -= offsetY;
395
- break;
396
- case 5:
397
- if (rect.width + offsetX < 5) {
398
- break;
399
- }
400
- rect.ex += offsetX;
401
- rect.width += offsetX;
402
- break;
403
- case 6:
404
- if (rect.height + offsetY < 5) {
405
- break;
406
- }
407
- rect.ey += offsetY;
408
- rect.height += offsetY;
409
- break;
410
- case 7:
411
- if (rect.width - offsetX < 5) {
412
- break;
413
- }
414
- rect.x += offsetX;
415
- rect.width -= offsetX;
416
- break;
417
- }
418
- }
419
- export function scaleRect(rect, scale, center, pivot) {
420
- if (!rect) {
421
- return;
422
- }
423
- rect.width *= scale;
424
- rect.height *= scale;
425
- scalePoint(rect, scale, center);
426
- calcRightBottom(rect);
427
- calcCenter(rect);
428
- if (pivot) {
429
- calcPivot(rect, pivot);
430
- }
431
- }
432
- export function calcRelativeRect(rect, worldRect) {
433
- var relRect = {
434
- x: (rect.x - worldRect.x) / worldRect.width,
435
- y: (rect.y - worldRect.y) / worldRect.height,
436
- width: rect.width / worldRect.width,
437
- height: rect.height / worldRect.height,
438
- };
439
- calcRightBottom(relRect);
440
- return relRect;
441
- }
442
- /**
443
- * 计算相对点 ,anchors 中的值都是百分比
444
- * @param pt 绝对坐标
445
- * @param worldRect 图形外接矩形
446
- * @returns 相对坐标点
447
- */
448
- export function calcRelativePoint(pt, worldRect) {
449
- var x = worldRect.x, y = worldRect.y, width = worldRect.width, height = worldRect.height;
450
- var penId = pt.penId, connectTo = pt.connectTo;
451
- var point = Object.assign({}, pt, {
452
- x: width ? (pt.x - x) / width : 0,
453
- y: height ? (pt.y - y) / height : 0,
454
- });
455
- if (pt.prev) {
456
- point.prev = {
457
- penId: penId,
458
- connectTo: connectTo,
459
- x: width ? (pt.prev.x - x) / width : 0,
460
- y: height ? (pt.prev.y - y) / height : 0,
461
- };
462
- }
463
- if (pt.next) {
464
- point.next = {
465
- penId: penId,
466
- connectTo: connectTo,
467
- x: width ? (pt.next.x - x) / width : 0,
468
- y: height ? (pt.next.y - y) / height : 0,
469
- };
470
- }
471
- return point;
472
- }
473
- //射线法 判断点是否在多边形内部
474
- export function pointInPolygon(pt, pts) {
475
- var inside = false;
476
- for (var i = 0, j = pts.length - 1; i < pts.length; j = i++) {
477
- var xi = pts[i].x, yi = pts[i].y;
478
- var xj = pts[j].x, yj = pts[j].y;
479
- var intersect = ((yi > pt.y) != (yj > pt.y))
480
- && (pt.x < (xj - xi) * (pt.y - yi) / (yj - yi) + xi);
481
- if (intersect)
482
- inside = !inside;
483
- }
484
- return inside;
485
- }
1
+ import { isEqual } from '../pen';
2
+ import { rotatePoint, scalePoint } from '../point';
3
+ import { formatPadding } from '../utils';
4
+ export function pointInRect(pt, rect) {
5
+ if (!rect) {
6
+ return;
7
+ }
8
+ if (rect.ex == null) {
9
+ calcRightBottom(rect);
10
+ }
11
+ if (!rect.rotate ||
12
+ // rect.width < 20 ||
13
+ // rect.height < 20 ||
14
+ rect.rotate % 360 === 0) {
15
+ return pt.x > rect.x && pt.x < rect.ex && pt.y > rect.y && pt.y < rect.ey;
16
+ }
17
+ if (!rect.center) {
18
+ calcCenter(rect);
19
+ }
20
+ const pts = [
21
+ { x: rect.x, y: rect.y },
22
+ { x: rect.ex, y: rect.y },
23
+ { x: rect.ex, y: rect.ey },
24
+ { x: rect.x, y: rect.ey },
25
+ ];
26
+ pts.forEach((item) => {
27
+ rotatePoint(item, rect.rotate, rect.pivot || rect.center);
28
+ });
29
+ return pointInVertices(pt, pts);
30
+ }
31
+ export function pointInSimpleRect(pt, rect, r = 0) {
32
+ const { x, y, ex, ey } = rect;
33
+ return pt.x >= x - r && pt.x <= ex + r && pt.y >= y - r && pt.y <= ey + r;
34
+ }
35
+ export function calcCenter(rect) {
36
+ if (!rect.center) {
37
+ rect.center = {};
38
+ }
39
+ rect.center.x = rect.x + rect.width / 2;
40
+ rect.center.y = rect.y + rect.height / 2;
41
+ }
42
+ export function calcRightBottom(rect) {
43
+ rect.ex = rect.x + rect.width;
44
+ rect.ey = rect.y + rect.height;
45
+ }
46
+ export function calcPivot(rect, pivot) {
47
+ if (!rect.pivot) {
48
+ rect.pivot = {};
49
+ }
50
+ rect.pivot.x = rect.x + rect.width * pivot.x;
51
+ rect.pivot.y = rect.y + rect.height * pivot.y;
52
+ }
53
+ export function pointInVertices(point, vertices) {
54
+ if (vertices.length < 3) {
55
+ return false;
56
+ }
57
+ let isIn = false;
58
+ let last = vertices[vertices.length - 1];
59
+ for (const item of vertices) {
60
+ if (last.y > point.y !== item.y > point.y) {
61
+ if (item.x + ((point.y - item.y) * (last.x - item.x)) / (last.y - item.y) >
62
+ point.x) {
63
+ isIn = !isIn;
64
+ }
65
+ }
66
+ last = item;
67
+ }
68
+ return isIn;
69
+ }
70
+ export function getRect(pens) {
71
+ const points = [];
72
+ pens.forEach((pen) => {
73
+ if (pen.isRuleLine) {
74
+ return;
75
+ }
76
+ const rect = pen.calculative.worldRect;
77
+ if (rect) {
78
+ const pts = rectToPoints(rect);
79
+ // rectToPoints 已经计算过 rotate 无需重复计算
80
+ points.push(...pts);
81
+ }
82
+ });
83
+ const rect = getRectOfPoints(points);
84
+ calcCenter(rect);
85
+ return rect;
86
+ }
87
+ export function rectToPoints(rect) {
88
+ const pts = [
89
+ { x: rect.x, y: rect.y },
90
+ { x: rect.ex, y: rect.y },
91
+ { x: rect.ex, y: rect.ey },
92
+ { x: rect.x, y: rect.ey },
93
+ ];
94
+ if (rect.rotate) {
95
+ if (!rect.center) {
96
+ calcCenter(rect);
97
+ }
98
+ pts.forEach((pt) => {
99
+ rotatePoint(pt, rect.rotate, rect.pivot || rect.center);
100
+ });
101
+ }
102
+ return pts;
103
+ }
104
+ export function getRectOfPoints(points) {
105
+ let x = Infinity;
106
+ let y = Infinity;
107
+ let ex = -Infinity;
108
+ let ey = -Infinity;
109
+ points?.forEach((item) => {
110
+ if (!isFinite(item.x) || !isFinite(item.y)) {
111
+ return;
112
+ }
113
+ x = Math.min(x, item.x);
114
+ y = Math.min(y, item.y);
115
+ ex = Math.max(ex, item.x);
116
+ ey = Math.max(ey, item.y);
117
+ });
118
+ return { x, y, ex, ey, width: ex - x, height: ey - y };
119
+ }
120
+ export function rectInRect(source, target, allIn) {
121
+ if (source.rotate) {
122
+ // 根据 rotate 扩大 rect
123
+ source = getRectOfPoints(rectToPoints(source)); // 更改 source 引用地址值,不影响原值
124
+ }
125
+ if (allIn) {
126
+ return (source.x > target.x &&
127
+ source.ex < target.ex &&
128
+ source.y > target.y &&
129
+ source.ey < target.ey);
130
+ }
131
+ return !(source.x > target.ex ||
132
+ source.ex < target.x ||
133
+ source.ey < target.y ||
134
+ source.y > target.ey);
135
+ }
136
+ /**
137
+ * 一个 rect 在另一个 rect 的 四个角,即水平区域不重合,垂直区域不重合
138
+ */
139
+ export function rectInFourAngRect(source, target) {
140
+ return ((target.x > source.ex || target.ex < source.x) &&
141
+ (target.y > source.ey || target.ey < source.y));
142
+ }
143
+ /**
144
+ * 扩大 rect ,x,y,ex,ey 值都会变
145
+ * @param rect 原 rect ,无副作用
146
+ * @param size padding 类型,可传四个方向的值,也可以只传一个值
147
+ */
148
+ export function expandRect(rect, size) {
149
+ const padding = formatPadding(size);
150
+ const retRect = {
151
+ x: rect.x - padding[3],
152
+ y: rect.y - padding[0],
153
+ width: rect.width + padding[1] + padding[3],
154
+ height: rect.height + padding[0] + padding[2],
155
+ };
156
+ calcRightBottom(retRect);
157
+ return retRect;
158
+ }
159
+ export function translateRect(rect, x, y) {
160
+ rect.x += x;
161
+ rect.y += y;
162
+ rect.ex += x;
163
+ rect.ey += y;
164
+ if (rect.center) {
165
+ rect.center.x += x;
166
+ rect.center.y += y;
167
+ }
168
+ if (rect.pivot) {
169
+ rect.pivot.x += x;
170
+ rect.pivot.y += y;
171
+ }
172
+ }
173
+ /**
174
+ * 通过两条线段计算出相交的点
175
+ * @param line1 线段1
176
+ * @param line2 线段2
177
+ */
178
+ function getIntersectPoint(line1, line2) {
179
+ const k1 = (line1.to.y - line1.from.y) / (line1.to.x - line1.from.x);
180
+ const k2 = (line2.to.y - line2.from.y) / (line2.to.x - line2.from.x);
181
+ return getIntersectPointByK({
182
+ k: k1,
183
+ point: line1.from,
184
+ }, {
185
+ k: k2,
186
+ point: line2.from,
187
+ });
188
+ }
189
+ /**
190
+ * 该方法作用同上,不过此方法需要传的是 斜率
191
+ * @param line1 线段1
192
+ * @param line2 线段2
193
+ * @returns
194
+ */
195
+ function getIntersectPointByK(line1, line2) {
196
+ if (isEqual(line1.k, 0)) {
197
+ return {
198
+ x: line2.point.x,
199
+ y: line1.point.y,
200
+ };
201
+ }
202
+ else if (isEqual(line2.k, 0)) {
203
+ return {
204
+ x: line1.point.x,
205
+ y: line2.point.y,
206
+ };
207
+ }
208
+ const b1 = line1.point.y - line1.k * line1.point.x;
209
+ const b2 = line2.point.y - line2.k * line2.point.x;
210
+ const x = (b2 - b1) / (line1.k - line2.k);
211
+ const y = line1.k * x + b1;
212
+ return {
213
+ x,
214
+ y,
215
+ };
216
+ }
217
+ /**
218
+ * 通过 4 个点和旋转角度,计算出原矩形(旋转前的矩形)
219
+ * @param pts 4 个点
220
+ * @param rotate 旋转角度
221
+ */
222
+ function pointsToRect(pts, rotate) {
223
+ // 1. 计算 center,认为 0,2 ;1,3 的连线相交就是 center 点
224
+ const center = getIntersectPoint({
225
+ from: pts[0],
226
+ to: pts[2],
227
+ }, {
228
+ from: pts[1],
229
+ to: pts[3],
230
+ });
231
+ // 2. 把点反向转 rotate °
232
+ for (const pt of pts) {
233
+ rotatePoint(pt, -rotate, center);
234
+ }
235
+ // 3. 计算区域
236
+ return getRectOfPoints(pts);
237
+ }
238
+ export function resizeRect(rect, offsetX, offsetY, resizeIndex) {
239
+ let calcRotate = rect.rotate ? rect.rotate % 360 : 0;
240
+ if (calcRotate) {
241
+ // 计算出外边的四个点
242
+ const pts = rectToPoints(rect);
243
+ // 斜率不改变,提前计算
244
+ const k1 = (pts[0].y - pts[1].y) / (pts[0].x - pts[1].x);
245
+ const k2 = (pts[1].y - pts[2].y) / (pts[1].x - pts[2].x);
246
+ if (resizeIndex < 4) {
247
+ // 斜对角的四个点
248
+ // resize 的点
249
+ pts[resizeIndex].x += offsetX;
250
+ if (rect.ratio) {
251
+ if (resizeIndex === 0 || resizeIndex === 2) {
252
+ let calcOffsetY = offsetX * Math.tan((90 - (360 - calcRotate) - (Math.atan(rect.width / rect.height)) / Math.PI * 180) / 180 * Math.PI);
253
+ pts[resizeIndex].y += calcOffsetY;
254
+ }
255
+ else {
256
+ let calcOffsetY = offsetX * Math.tan((90 - (360 - calcRotate) + (Math.atan(rect.width / rect.height)) / Math.PI * 180) / 180 * Math.PI);
257
+ pts[resizeIndex].y += calcOffsetY;
258
+ }
259
+ }
260
+ else {
261
+ pts[resizeIndex].y += offsetY;
262
+ }
263
+ // 不变的点
264
+ const noChangePoint = pts[(resizeIndex + 2) % 4];
265
+ // 由于斜率是不变的,我们只需要根据斜率 和 已知的两点求出相交的 另外两点
266
+ pts[(resizeIndex + 1) % 4] = getIntersectPointByK({ k: resizeIndex % 2 ? k2 : k1, point: pts[resizeIndex] }, { k: resizeIndex % 2 ? k1 : k2, point: noChangePoint });
267
+ pts[(resizeIndex + 4 - 1) % 4] = getIntersectPointByK({ k: resizeIndex % 2 ? k1 : k2, point: pts[resizeIndex] }, { k: resizeIndex % 2 ? k2 : k1, point: noChangePoint });
268
+ }
269
+ else {
270
+ // 边缘四个点有两个点固定
271
+ const k = [4, 6].includes(resizeIndex) ? k2 : k1;
272
+ if (!isEqual(k, 0)) {
273
+ pts[resizeIndex % 4].y += offsetY;
274
+ pts[resizeIndex % 4].x += offsetY / k;
275
+ pts[(resizeIndex + 1) % 4].y += offsetY;
276
+ pts[(resizeIndex + 1) % 4].x += offsetY / k;
277
+ }
278
+ else {
279
+ pts[resizeIndex % 4].x += offsetX;
280
+ pts[(resizeIndex + 1) % 4].x += offsetX;
281
+ }
282
+ }
283
+ if ((pts[0].x - pts[1].x) ** 2 + (pts[0].y - pts[1].y) ** 2 < 25 ||
284
+ (pts[1].x - pts[2].x) ** 2 + (pts[1].y - pts[2].y) ** 2 < 25) {
285
+ // 距离小于 5 不能继续 resize 了
286
+ return;
287
+ }
288
+ const retRect = pointsToRect(pts, rect.rotate);
289
+ calcCenter(retRect);
290
+ Object.assign(rect, retRect);
291
+ return;
292
+ }
293
+ switch (resizeIndex) {
294
+ case 0:
295
+ if (rect.width - offsetX < 5 || rect.height - offsetY < 5) {
296
+ break;
297
+ }
298
+ rect.x += offsetX;
299
+ rect.y += offsetY;
300
+ rect.width -= offsetX;
301
+ rect.height -= offsetY;
302
+ break;
303
+ case 1:
304
+ if (rect.width + offsetX < 5 || rect.height - offsetY < 5) {
305
+ break;
306
+ }
307
+ rect.ex += offsetX;
308
+ rect.y += offsetY;
309
+ rect.width += offsetX;
310
+ rect.height -= offsetY;
311
+ break;
312
+ case 2:
313
+ if (rect.width + offsetX < 5 || rect.height + offsetY < 5) {
314
+ break;
315
+ }
316
+ rect.ex += offsetX;
317
+ rect.ey += offsetY;
318
+ rect.width += offsetX;
319
+ rect.height += offsetY;
320
+ break;
321
+ case 3:
322
+ if (rect.width - offsetX < 5 || rect.height + offsetY < 5) {
323
+ break;
324
+ }
325
+ rect.x += offsetX;
326
+ rect.ey += offsetY;
327
+ rect.width -= offsetX;
328
+ rect.height += offsetY;
329
+ break;
330
+ case 4:
331
+ if (rect.height - offsetY < 5) {
332
+ break;
333
+ }
334
+ rect.y += offsetY;
335
+ rect.height -= offsetY;
336
+ break;
337
+ case 5:
338
+ if (rect.width + offsetX < 5) {
339
+ break;
340
+ }
341
+ rect.ex += offsetX;
342
+ rect.width += offsetX;
343
+ break;
344
+ case 6:
345
+ if (rect.height + offsetY < 5) {
346
+ break;
347
+ }
348
+ rect.ey += offsetY;
349
+ rect.height += offsetY;
350
+ break;
351
+ case 7:
352
+ if (rect.width - offsetX < 5) {
353
+ break;
354
+ }
355
+ rect.x += offsetX;
356
+ rect.width -= offsetX;
357
+ break;
358
+ }
359
+ }
360
+ export function scaleRect(rect, scale, center, pivot) {
361
+ if (!rect) {
362
+ return;
363
+ }
364
+ rect.width *= scale;
365
+ rect.height *= scale;
366
+ scalePoint(rect, scale, center);
367
+ calcRightBottom(rect);
368
+ calcCenter(rect);
369
+ if (pivot) {
370
+ calcPivot(rect, pivot);
371
+ }
372
+ }
373
+ export function calcRelativeRect(rect, worldRect) {
374
+ const relRect = {
375
+ x: (rect.x - worldRect.x) / worldRect.width,
376
+ y: (rect.y - worldRect.y) / worldRect.height,
377
+ width: rect.width / worldRect.width,
378
+ height: rect.height / worldRect.height,
379
+ };
380
+ calcRightBottom(relRect);
381
+ return relRect;
382
+ }
383
+ /**
384
+ * 计算相对点 ,anchors 中的值都是百分比
385
+ * @param pt 绝对坐标
386
+ * @param worldRect 图形外接矩形
387
+ * @returns 相对坐标点
388
+ */
389
+ export function calcRelativePoint(pt, worldRect) {
390
+ const { x, y, width, height } = worldRect;
391
+ const { penId, connectTo } = pt;
392
+ const point = Object.assign({}, pt, {
393
+ x: width ? (pt.x - x) / width : 0,
394
+ y: height ? (pt.y - y) / height : 0,
395
+ });
396
+ if (pt.prev) {
397
+ point.prev = {
398
+ penId,
399
+ connectTo,
400
+ x: width ? (pt.prev.x - x) / width : 0,
401
+ y: height ? (pt.prev.y - y) / height : 0,
402
+ };
403
+ }
404
+ if (pt.next) {
405
+ point.next = {
406
+ penId,
407
+ connectTo,
408
+ x: width ? (pt.next.x - x) / width : 0,
409
+ y: height ? (pt.next.y - y) / height : 0,
410
+ };
411
+ }
412
+ return point;
413
+ }
414
+ //射线法 判断点是否在多边形内部
415
+ export function pointInPolygon(pt, pts) {
416
+ let inside = false;
417
+ for (let i = 0, j = pts.length - 1; i < pts.length; j = i++) {
418
+ let xi = pts[i].x, yi = pts[i].y;
419
+ let xj = pts[j].x, yj = pts[j].y;
420
+ let intersect = ((yi > pt.y) != (yj > pt.y))
421
+ && (pt.x < (xj - xi) * (pt.y - yi) / (yj - yi) + xi);
422
+ if (intersect)
423
+ inside = !inside;
424
+ }
425
+ return inside;
426
+ }
486
427
  //# sourceMappingURL=rect.js.map