@meta2d/core 1.0.56 → 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 (299) hide show
  1. package/{index.ts → index.d.ts} +9 -9
  2. package/index.js +10 -0
  3. package/index.js.map +1 -0
  4. package/package.json +38 -39
  5. package/src/canvas/canvas.d.ts +456 -0
  6. package/src/canvas/canvas.js +7584 -0
  7. package/src/canvas/canvas.js.map +1 -0
  8. package/src/canvas/canvasImage.d.ts +27 -0
  9. package/src/canvas/canvasImage.js +441 -0
  10. package/src/canvas/canvasImage.js.map +1 -0
  11. package/src/canvas/canvasTemplate.d.ts +18 -0
  12. package/src/canvas/canvasTemplate.js +209 -0
  13. package/src/canvas/canvasTemplate.js.map +1 -0
  14. package/src/canvas/{index.ts → index.d.ts} +2 -2
  15. package/src/canvas/index.js +3 -0
  16. package/src/canvas/index.js.map +1 -0
  17. package/src/canvas/magnifierCanvas.d.ts +19 -0
  18. package/src/canvas/magnifierCanvas.js +102 -0
  19. package/src/canvas/magnifierCanvas.js.map +1 -0
  20. package/src/canvas/offscreen.d.ts +1 -0
  21. package/src/canvas/offscreen.js +14 -0
  22. package/src/canvas/offscreen.js.map +1 -0
  23. package/src/core.d.ts +479 -0
  24. package/src/core.js +4590 -0
  25. package/src/core.js.map +1 -0
  26. package/src/data.d.ts +34 -0
  27. package/src/data.js +85 -0
  28. package/src/data.js.map +1 -0
  29. package/src/diagrams/arrow.d.ts +4 -0
  30. package/src/diagrams/arrow.js +47 -0
  31. package/src/diagrams/arrow.js.map +1 -0
  32. package/src/diagrams/circle.d.ts +2 -0
  33. package/src/diagrams/circle.js +9 -0
  34. package/src/diagrams/circle.js.map +1 -0
  35. package/src/diagrams/cloud.d.ts +2 -0
  36. package/src/diagrams/cloud.js +12 -0
  37. package/src/diagrams/cloud.js.map +1 -0
  38. package/src/diagrams/cube.d.ts +2 -0
  39. package/src/diagrams/cube.js +68 -0
  40. package/src/diagrams/cube.js.map +1 -0
  41. package/src/diagrams/diamond.d.ts +2 -0
  42. package/src/diagrams/diamond.js +13 -0
  43. package/src/diagrams/diamond.js.map +1 -0
  44. package/src/diagrams/file.d.ts +2 -0
  45. package/src/diagrams/file.js +18 -0
  46. package/src/diagrams/file.js.map +1 -0
  47. package/src/diagrams/gif.d.ts +5 -0
  48. package/src/diagrams/gif.js +89 -0
  49. package/src/diagrams/gif.js.map +1 -0
  50. package/src/diagrams/hexagon.d.ts +2 -0
  51. package/src/diagrams/{hexagon.ts → hexagon.js} +55 -60
  52. package/src/diagrams/hexagon.js.map +1 -0
  53. package/src/diagrams/iframe.d.ts +2 -0
  54. package/src/diagrams/iframe.js +338 -0
  55. package/src/diagrams/iframe.js.map +1 -0
  56. package/src/diagrams/index.d.ts +71 -0
  57. package/src/diagrams/{index.ts → index.js} +77 -79
  58. package/src/diagrams/index.js.map +1 -0
  59. package/src/diagrams/line/arrow.d.ts +2 -0
  60. package/src/diagrams/line/arrow.js +128 -0
  61. package/src/diagrams/line/arrow.js.map +1 -0
  62. package/src/diagrams/line/curve.d.ts +16 -0
  63. package/src/diagrams/line/curve.js +227 -0
  64. package/src/diagrams/line/curve.js.map +1 -0
  65. package/src/diagrams/line/{index.ts → index.d.ts} +5 -5
  66. package/src/diagrams/line/index.js +6 -0
  67. package/src/diagrams/line/index.js.map +1 -0
  68. package/src/diagrams/line/line.d.ts +42 -0
  69. package/src/diagrams/line/line.js +370 -0
  70. package/src/diagrams/line/line.js.map +1 -0
  71. package/src/diagrams/line/polyline.d.ts +10 -0
  72. package/src/diagrams/line/polyline.js +627 -0
  73. package/src/diagrams/line/polyline.js.map +1 -0
  74. package/src/diagrams/line/smooth.d.ts +3 -0
  75. package/src/diagrams/line/smooth.js +136 -0
  76. package/src/diagrams/line/smooth.js.map +1 -0
  77. package/src/diagrams/message.d.ts +2 -0
  78. package/src/diagrams/message.js +15 -0
  79. package/src/diagrams/message.js.map +1 -0
  80. package/src/diagrams/mindLine.d.ts +3 -0
  81. package/src/diagrams/mindLine.js +30 -0
  82. package/src/diagrams/mindLine.js.map +1 -0
  83. package/src/diagrams/mindNode.d.ts +3 -0
  84. package/src/diagrams/mindNode.js +161 -0
  85. package/src/diagrams/mindNode.js.map +1 -0
  86. package/src/diagrams/panel.d.ts +2 -0
  87. package/src/diagrams/panel.js +131 -0
  88. package/src/diagrams/panel.js.map +1 -0
  89. package/src/diagrams/pentagon.d.ts +3 -0
  90. package/src/diagrams/pentagon.js +45 -0
  91. package/src/diagrams/pentagon.js.map +1 -0
  92. package/src/diagrams/pentagram.d.ts +3 -0
  93. package/src/diagrams/pentagram.js +51 -0
  94. package/src/diagrams/pentagram.js.map +1 -0
  95. package/src/diagrams/people.d.ts +2 -0
  96. package/src/diagrams/people.js +19 -0
  97. package/src/diagrams/people.js.map +1 -0
  98. package/src/diagrams/rectangle.d.ts +3 -0
  99. package/src/diagrams/rectangle.js +26 -0
  100. package/src/diagrams/rectangle.js.map +1 -0
  101. package/src/diagrams/svg/parse.d.ts +15 -0
  102. package/src/diagrams/svg/parse.js +279 -0
  103. package/src/diagrams/svg/parse.js.map +1 -0
  104. package/src/diagrams/svgPath.d.ts +2 -0
  105. package/src/diagrams/svgPath.js +29 -0
  106. package/src/diagrams/svgPath.js.map +1 -0
  107. package/src/diagrams/triangle.d.ts +3 -0
  108. package/src/diagrams/triangle.js +40 -0
  109. package/src/diagrams/triangle.js.map +1 -0
  110. package/src/diagrams/video.d.ts +5 -0
  111. package/src/diagrams/video.js +184 -0
  112. package/src/diagrams/video.js.map +1 -0
  113. package/src/dialog/dialog.d.ts +21 -0
  114. package/src/dialog/dialog.js +157 -0
  115. package/src/dialog/dialog.js.map +1 -0
  116. package/src/dialog/{index.ts → index.d.ts} +1 -1
  117. package/src/dialog/index.js +2 -0
  118. package/src/dialog/index.js.map +1 -0
  119. package/src/event/event.d.ts +102 -0
  120. package/src/event/event.js +22 -0
  121. package/src/event/event.js.map +1 -0
  122. package/src/event/{index.ts → index.d.ts} +1 -1
  123. package/src/event/index.js +2 -0
  124. package/src/event/index.js.map +1 -0
  125. package/src/map/{index.ts → index.d.ts} +1 -1
  126. package/src/map/index.js +2 -0
  127. package/src/map/index.js.map +1 -0
  128. package/src/map/map.d.ts +21 -0
  129. package/src/map/map.js +212 -0
  130. package/src/map/map.js.map +1 -0
  131. package/src/options.d.ts +130 -0
  132. package/src/options.js +80 -0
  133. package/src/options.js.map +1 -0
  134. package/src/pen/arrow.d.ts +4 -0
  135. package/src/pen/arrow.js +188 -0
  136. package/src/pen/arrow.js.map +1 -0
  137. package/src/pen/{index.ts → index.d.ts} +6 -6
  138. package/src/pen/index.js +7 -0
  139. package/src/pen/index.js.map +1 -0
  140. package/src/pen/math.d.ts +28 -0
  141. package/src/pen/math.js +213 -0
  142. package/src/pen/math.js.map +1 -0
  143. package/src/pen/model.d.ts +514 -0
  144. package/src/pen/model.js +210 -0
  145. package/src/pen/model.js.map +1 -0
  146. package/src/pen/plugin.d.ts +5 -0
  147. package/src/pen/plugin.js +58 -0
  148. package/src/pen/plugin.js.map +1 -0
  149. package/src/pen/render.d.ts +146 -0
  150. package/src/pen/render.js +3234 -0
  151. package/src/pen/render.js.map +1 -0
  152. package/src/pen/text.d.ts +8 -0
  153. package/src/pen/text.js +316 -0
  154. package/src/pen/text.js.map +1 -0
  155. package/src/pen/utils.d.ts +2 -0
  156. package/src/pen/utils.js +19 -0
  157. package/src/pen/utils.js.map +1 -0
  158. package/src/point/{index.ts → index.d.ts} +1 -1
  159. package/src/point/index.js +2 -0
  160. package/src/point/index.js.map +1 -0
  161. package/src/point/point.d.ts +65 -0
  162. package/src/point/point.js +178 -0
  163. package/src/point/point.js.map +1 -0
  164. package/src/rect/{index.ts → index.d.ts} +1 -1
  165. package/src/rect/index.js +2 -0
  166. package/src/rect/index.js.map +1 -0
  167. package/src/rect/rect.d.ts +52 -0
  168. package/src/rect/rect.js +427 -0
  169. package/src/rect/rect.js.map +1 -0
  170. package/src/rect/triangle.d.ts +2 -0
  171. package/src/rect/triangle.js +10 -0
  172. package/src/rect/triangle.js.map +1 -0
  173. package/src/scroll/{index.ts → index.d.ts} +1 -1
  174. package/src/scroll/index.js +2 -0
  175. package/src/scroll/index.js.map +1 -0
  176. package/src/scroll/scroll.d.ts +35 -0
  177. package/src/scroll/scroll.js +234 -0
  178. package/src/scroll/scroll.js.map +1 -0
  179. package/src/store/global.d.ts +25 -0
  180. package/src/store/global.js +18 -0
  181. package/src/store/global.js.map +1 -0
  182. package/src/store/{index.ts → index.d.ts} +2 -2
  183. package/src/store/index.js +3 -0
  184. package/src/store/index.js.map +1 -0
  185. package/src/store/store.d.ts +228 -0
  186. package/src/store/store.js +87 -0
  187. package/src/store/store.js.map +1 -0
  188. package/src/theme.d.ts +13 -0
  189. package/src/theme.js +23 -0
  190. package/src/theme.js.map +1 -0
  191. package/src/title/{index.ts → index.d.ts} +1 -1
  192. package/src/title/index.js +2 -0
  193. package/src/title/index.js.map +1 -0
  194. package/src/title/title.d.ts +30 -0
  195. package/src/title/title.js +99 -0
  196. package/src/title/title.js.map +1 -0
  197. package/src/tooltip/{index.ts → index.d.ts} +1 -1
  198. package/src/tooltip/index.js +2 -0
  199. package/src/tooltip/index.js.map +1 -0
  200. package/src/tooltip/tooltip.d.ts +40 -0
  201. package/src/tooltip/tooltip.js +172 -0
  202. package/src/tooltip/tooltip.js.map +1 -0
  203. package/src/utils/clone.d.ts +8 -0
  204. package/src/utils/clone.js +84 -0
  205. package/src/utils/clone.js.map +1 -0
  206. package/src/utils/color.d.ts +3 -0
  207. package/src/utils/color.js +110 -0
  208. package/src/utils/color.js.map +1 -0
  209. package/src/utils/error.d.ts +2 -0
  210. package/src/utils/error.js +6 -0
  211. package/src/utils/error.js.map +1 -0
  212. package/src/utils/file.d.ts +3 -0
  213. package/src/utils/file.js +40 -0
  214. package/src/utils/file.js.map +1 -0
  215. package/src/utils/{index.ts → index.d.ts} +9 -9
  216. package/src/utils/index.js +10 -0
  217. package/src/utils/index.js.map +1 -0
  218. package/src/utils/math.d.ts +18 -0
  219. package/src/utils/math.js +114 -0
  220. package/src/utils/math.js.map +1 -0
  221. package/src/utils/object.d.ts +2 -0
  222. package/src/utils/object.js +21 -0
  223. package/src/utils/object.js.map +1 -0
  224. package/src/utils/padding.d.ts +7 -0
  225. package/src/utils/padding.js +47 -0
  226. package/src/utils/padding.js.map +1 -0
  227. package/src/utils/time.d.ts +1 -0
  228. package/src/utils/time.js +17 -0
  229. package/src/utils/time.js.map +1 -0
  230. package/src/utils/url.d.ts +4 -0
  231. package/src/utils/url.js +27 -0
  232. package/src/utils/url.js.map +1 -0
  233. package/src/utils/uuid.d.ts +4 -0
  234. package/src/utils/uuid.js +13 -0
  235. package/src/utils/uuid.js.map +1 -0
  236. package/README.md +0 -13
  237. package/package.build.json +0 -39
  238. package/src/canvas/canvas.ts +0 -8639
  239. package/src/canvas/canvasImage.ts +0 -525
  240. package/src/canvas/canvasTemplate.ts +0 -257
  241. package/src/canvas/magnifierCanvas.ts +0 -142
  242. package/src/canvas/offscreen.ts +0 -14
  243. package/src/core.ts +0 -5128
  244. package/src/data.ts +0 -86
  245. package/src/diagrams/arrow.ts +0 -50
  246. package/src/diagrams/circle.ts +0 -19
  247. package/src/diagrams/cloud.ts +0 -34
  248. package/src/diagrams/cube.ts +0 -94
  249. package/src/diagrams/diamond.ts +0 -14
  250. package/src/diagrams/file.ts +0 -19
  251. package/src/diagrams/gif.ts +0 -105
  252. package/src/diagrams/iframe.ts +0 -365
  253. package/src/diagrams/line/arrow.ts +0 -175
  254. package/src/diagrams/line/curve.ts +0 -260
  255. package/src/diagrams/line/line.ts +0 -409
  256. package/src/diagrams/line/polyline.ts +0 -676
  257. package/src/diagrams/line/smooth.ts +0 -133
  258. package/src/diagrams/message.ts +0 -17
  259. package/src/diagrams/mindLine.ts +0 -31
  260. package/src/diagrams/mindNode.ts +0 -177
  261. package/src/diagrams/panel.ts +0 -149
  262. package/src/diagrams/pentagon.ts +0 -48
  263. package/src/diagrams/pentagram.ts +0 -63
  264. package/src/diagrams/people.ts +0 -23
  265. package/src/diagrams/rectangle.ts +0 -29
  266. package/src/diagrams/svg/parse.ts +0 -319
  267. package/src/diagrams/svgPath.ts +0 -53
  268. package/src/diagrams/triangle.ts +0 -43
  269. package/src/diagrams/video.ts +0 -202
  270. package/src/dialog/dialog.ts +0 -177
  271. package/src/event/event.ts +0 -142
  272. package/src/map/map.ts +0 -239
  273. package/src/options.ts +0 -205
  274. package/src/pen/arrow.ts +0 -259
  275. package/src/pen/math.ts +0 -253
  276. package/src/pen/model.ts +0 -785
  277. package/src/pen/plugin.ts +0 -57
  278. package/src/pen/render.ts +0 -3725
  279. package/src/pen/text.ts +0 -341
  280. package/src/pen/utils.ts +0 -21
  281. package/src/point/point.ts +0 -232
  282. package/src/rect/rect.ts +0 -507
  283. package/src/rect/triangle.ts +0 -16
  284. package/src/scroll/scroll.ts +0 -277
  285. package/src/store/global.ts +0 -38
  286. package/src/store/store.ts +0 -293
  287. package/src/theme.ts +0 -35
  288. package/src/title/title.ts +0 -115
  289. package/src/tooltip/tooltip.ts +0 -199
  290. package/src/utils/clone.ts +0 -79
  291. package/src/utils/color.ts +0 -126
  292. package/src/utils/error.ts +0 -7
  293. package/src/utils/file.ts +0 -46
  294. package/src/utils/math.ts +0 -120
  295. package/src/utils/object.ts +0 -23
  296. package/src/utils/padding.ts +0 -48
  297. package/src/utils/time.ts +0 -25
  298. package/src/utils/url.ts +0 -30
  299. package/src/utils/uuid.ts +0 -15
package/src/options.ts DELETED
@@ -1,205 +0,0 @@
1
- import { TextAlign, TextBaseline, Pen } from './pen';
2
- import { Point } from './point';
3
- import { Padding } from './utils';
4
-
5
- export enum KeydownType {
6
- None = -1,
7
- Document,
8
- Canvas,
9
- }
10
-
11
- export interface Options {
12
- color?: string;
13
- activeColor?: string;
14
- activeBackground?: string;
15
- hoverColor?: string;
16
- hoverBackground?: string;
17
- anchorColor?: string;
18
- hoverAnchorColor?: string;
19
- anchorRadius?: number;
20
- anchorBackground?: string;
21
- dockColor?: string;
22
- dockPenColor?: string;
23
- dragColor?: string;
24
- animateColor?: string;
25
- textColor?: string;
26
- fontFamily?: string;
27
- fontSize?: number;
28
- lineHeight?: number;
29
- textAlign?: TextAlign;
30
- textBaseline?: TextBaseline;
31
- rotateCursor?: string;
32
- rightCursor?: string; // table 右箭 选中行
33
- downCursor?: string; // table 下箭 选中列
34
- hoverCursor?: string;
35
- disableInput?: boolean;
36
- disableRotate?: boolean;
37
- disableSize?: boolean;
38
- disableAnchor?: boolean;
39
- autoAnchor?: boolean;
40
- autoAlignGrid?: boolean; // 自动对齐网格
41
- disableEmptyLine?: boolean;
42
- disableRepeatLine?: boolean;
43
- disableScale?: boolean;
44
- disableTranslate?: boolean;
45
- disableDock?: boolean; // 禁止所有停靠辅助线
46
- disableLineDock?: boolean; // 禁止移动连线时出现辅助线
47
- moveConnectedLine?: boolean; // 是否能移动被连接的连线
48
- minScale?: number;
49
- maxScale?: number;
50
- keydown?: KeydownType;
51
- background?: string;
52
- shadowOffsetX?: number;
53
- shadowOffsetY?: number;
54
- shadowBlur?: number;
55
- shadowColor?: string;
56
- globalAlpha?: number;
57
- grid?: boolean;
58
- gridColor?: string;
59
- gridSize?: number;
60
- rule?: boolean;
61
- ruleColor?: string;
62
- ruleOptions?:{
63
- height?:number;
64
- background?:string; //背景颜色
65
- underline?:boolean;
66
- textColor?:string; //文字颜色
67
- textLeft?:number;
68
- textTop?:number;
69
- baseline?:string;
70
- },
71
- drawingLineName?: string;
72
- fromArrow?: string;
73
- toArrow?: string;
74
- autoPolyline?: boolean;
75
- interval?: number;
76
- animateInterval?: number;
77
- dragAllIn?: boolean;
78
- scroll?: boolean;
79
- uploadFn?: (file: File) => Promise<string>; // uploadFn 优先级最高
80
- uploadUrl?: string;
81
- uploadParams?: Record<string, any>;
82
- uploadHeaders?: Record<string, string>;
83
- disableRuleLine?: boolean;
84
- ruleLineColor?: string;
85
- defaultAnchors?: Point[]; // 图形的默认瞄点
86
- measureTextWidth?: boolean; // 测量文字宽度
87
- mouseRightActive?: boolean; //是否允许右键选中节点
88
- disableClipboard?: boolean; //是否禁止系统剪切板
89
- drawingLineLength?: number; //绘制过程中允许的最大长度,0表示不限
90
- disableTouchPadScale?: boolean; //是否禁止触控板缩放
91
- cdn?: string;
92
- x?: number;
93
- y?: number;
94
- width?: number;
95
- height?: number;
96
- polylineSpace?: number;
97
- defaultFormat?: Pen; //默认格式刷
98
- domShapes?: string[]; //扩展的dom节点
99
- containerShapes?: string[]; //容器节点
100
- textFlip?: boolean; //文字镜像
101
- textRotate?: boolean; //文字旋转
102
- cacheLength?: number; //缓存数据长度
103
- unavailableKeys?: string[]; //屏蔽的快捷键
104
- activeLineDash?: number[];
105
- activeLineWidth?: number;
106
- activeGlobalAlpha?: number;
107
- diagramOptions?: { [key: string]: any };
108
- strictScope?: boolean; //大屏严格范围
109
- padding?: Padding; //大屏padding区域
110
- resizeMode?: boolean;
111
- svgPathStroke?:boolean; //svg path是否显示边框
112
- disabledColor?: string;
113
- disabledBackground?: string;
114
- scaleOff?: number; //缩放偏移量
115
- scrollButScale?: boolean; //滚动条滚动,鼠标缩放
116
- reconnetTimes?: number; //通信重连次数
117
- }
118
-
119
- export const defaultOptions: Options = {
120
- fontFamily:
121
- '"Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial',
122
- fontSize: 12,
123
- lineHeight: 1.5,
124
- textAlign: 'center',
125
- textBaseline: 'middle',
126
- color: '#222222',
127
- activeColor: '#278df8',
128
- hoverColor: 'rgba(39,141,248,0.50)',
129
- anchorColor: '#278DF8',
130
- hoverAnchorColor: '#FF4101',
131
- anchorRadius: 4,
132
- anchorBackground: '#fff',
133
- dockColor: 'rgba(39,141,248,0.50)',
134
- dockPenColor: '#1890FF',
135
- dragColor: '#1890ff',
136
- rotateCursor: 'rotate.cur',
137
- rightCursor: 'right.cur',
138
- downCursor: 'down.cur',
139
- hoverCursor: 'pointer',
140
- minScale: 0.1,
141
- maxScale: 10,
142
- keydown: KeydownType.Document,
143
- gridSize: 20,
144
- gridColor: '#e2e2e2',
145
- ruleColor: '#888888',
146
- drawingLineName: 'curve',
147
- interval: 30,
148
- animateInterval: 30,
149
- autoPolyline: true,
150
- autoAnchor: true,
151
- autoAlignGrid: false,
152
- animateColor: '#30EEDC',
153
- ruleLineColor: '#FF4101',
154
- shadowOffsetX: 0,
155
- shadowOffsetY: 0,
156
- shadowBlur: 64,
157
- shadowColor: "#00000014",
158
- globalAlpha: 1,
159
- defaultAnchors: [
160
- {
161
- x: 0.5,
162
- y: 0,
163
- },
164
- {
165
- x: 1,
166
- y: 0.5,
167
- },
168
- {
169
- x: 0.5,
170
- y: 1,
171
- },
172
- {
173
- x: 0,
174
- y: 0.5,
175
- },
176
- ],
177
- measureTextWidth: true,
178
- moveConnectedLine: true,
179
- mouseRightActive: true,
180
- disableClipboard: false,
181
- drawingLineLength: 0,
182
- disableTouchPadScale: false,
183
- cdn: '',
184
- polylineSpace: 10,
185
- domShapes: [],
186
- containerShapes:['tablePlus'],
187
- textFlip: true,
188
- textRotate: true,
189
- unavailableKeys: [],
190
- diagramOptions: {},
191
- svgPathStroke:true
192
- };
193
-
194
- export interface PenPlugin {
195
- install: (pen:Pen|string,options)=>void;
196
- uninstall: (pen:Pen|string,options)=>void;
197
- name:string;
198
- [key:string]:any;
199
- }
200
- export interface PluginOptions {
201
- plugin:PenPlugin;
202
- options?:object;
203
- enable?:boolean;
204
- [key:string]:any;
205
- }
package/src/pen/arrow.ts DELETED
@@ -1,259 +0,0 @@
1
- import { calcRotate, Point } from '../point';
2
- import { Meta2dStore } from '../store';
3
- import { Pen } from './model';
4
- import { getFromAnchor, getToAnchor } from './render';
5
-
6
- const arrows: Record<
7
- string,
8
- (
9
- ctx: CanvasRenderingContext2D,
10
- pen: Pen,
11
- store: Meta2dStore,
12
- point: Point
13
- ) => void
14
- > = {};
15
-
16
- export function renderFromArrow(
17
- ctx: CanvasRenderingContext2D,
18
- pen: Pen,
19
- store: Meta2dStore
20
- ) {
21
- if (!arrows[pen.fromArrow]) {
22
- return;
23
- }
24
- const from = getFromAnchor(pen);
25
- const { x, y } = from;
26
- const pt: Point = { x, y };
27
- pt.step = (pen.fromArrowSize || 10) * store.data.scale;
28
- if (from.next) {
29
- pt.rotate = calcRotate(from.next, from) + 90;
30
- } else {
31
- const p = pen.calculative.worldAnchors[1];
32
- if (!p) {
33
- return;
34
- }
35
- if (p.prev) {
36
- pt.rotate = calcRotate(p.prev, from) + 90;
37
- } else {
38
- pt.rotate = calcRotate(p, from) + 90;
39
- }
40
- }
41
- ctx.save();
42
- ctx.beginPath();
43
- ctx.setLineDash([]);
44
- const fromArrowColor = pen.fromArrowColor || pen.calculative.color;
45
- fromArrowColor && (ctx.strokeStyle = fromArrowColor);
46
- arrows[pen.fromArrow](ctx, pen, store, pt);
47
- ctx.restore();
48
- }
49
-
50
- export function renderToArrow(
51
- ctx: CanvasRenderingContext2D,
52
- pen: Pen,
53
- store: Meta2dStore
54
- ) {
55
- if (!arrows[pen.toArrow] || pen.calculative.worldAnchors.length < 2) {
56
- return;
57
- }
58
- ctx.save();
59
- const to = getToAnchor(pen);
60
- const { x, y } = to;
61
- const pt: Point = { x, y };
62
- pt.step = (pen.toArrowSize || 10) * store.data.scale;
63
- if (to.prev) {
64
- pt.rotate = calcRotate(to.prev, to) + 90;
65
- } else {
66
- const p =
67
- pen.calculative.worldAnchors[pen.calculative.worldAnchors.length - 2];
68
- if (p.next) {
69
- pt.rotate = calcRotate(p.next, to) + 90;
70
- } else {
71
- pt.rotate = calcRotate(p, to) + 90;
72
- }
73
- }
74
- ctx.beginPath();
75
- ctx.setLineDash([]);
76
- const toArrowColor = pen.toArrowColor || pen.calculative.color;
77
- toArrowColor && (ctx.strokeStyle = toArrowColor);
78
- arrows[pen.toArrow](ctx, pen, store, pt);
79
- ctx.restore();
80
- }
81
-
82
- arrows.triangleSolid = (
83
- ctx: CanvasRenderingContext2D,
84
- pen: Pen,
85
- store: Meta2dStore,
86
- point: Point
87
- ) => {
88
- ctx.save();
89
- ctx.translate(point.x, point.y);
90
- ctx.rotate((point.rotate * Math.PI) / 180);
91
- ctx.translate(-point.x, -point.y);
92
- const fromX = point.x - point.step;
93
- ctx.moveTo(fromX, point.y - point.step / 4);
94
- ctx.lineTo(point.x, point.y);
95
- ctx.lineTo(fromX, point.y + point.step / 4);
96
- ctx.closePath();
97
- ctx.stroke();
98
- ctx.fillStyle = ctx.strokeStyle;
99
- ctx.fill();
100
- ctx.restore();
101
- };
102
-
103
- arrows.triangle = (
104
- ctx: CanvasRenderingContext2D,
105
- pen: Pen,
106
- store: Meta2dStore,
107
- point: Point
108
- ) => {
109
- ctx.save();
110
- if (ctx.lineWidth < 2) {
111
- ctx.lineWidth = 2;
112
- }
113
- ctx.translate(point.x, point.y);
114
- ctx.rotate((point.rotate * Math.PI) / 180);
115
- ctx.translate(-point.x, -point.y);
116
- const fromX = point.x - point.step;
117
- ctx.moveTo(fromX, point.y - point.step / 4);
118
- ctx.lineTo(point.x, point.y);
119
- ctx.lineTo(fromX, point.y + point.step / 4);
120
- ctx.closePath();
121
- ctx.stroke();
122
- ctx.fillStyle = store.data.background || '#ffffff';
123
- ctx.fill();
124
- ctx.restore();
125
- };
126
-
127
- arrows.circleSolid = (
128
- ctx: CanvasRenderingContext2D,
129
- pen: Pen,
130
- store: Meta2dStore,
131
- point: Point
132
- ) => {
133
- ctx.save();
134
- ctx.translate(point.x, point.y);
135
- ctx.rotate((point.rotate * Math.PI) / 180);
136
- ctx.translate(-point.x, -point.y);
137
- const r = point.step / 2;
138
- ctx.arc(point.x - r, point.y, r, 0, 2 * Math.PI);
139
- ctx.stroke();
140
- ctx.fillStyle = ctx.strokeStyle;
141
- ctx.fill();
142
- ctx.restore();
143
- };
144
-
145
- arrows.circle = (
146
- ctx: CanvasRenderingContext2D,
147
- pen: Pen,
148
- store: Meta2dStore,
149
- point: Point
150
- ) => {
151
- ctx.save();
152
- ctx.translate(point.x, point.y);
153
- ctx.rotate((point.rotate * Math.PI) / 180);
154
- ctx.translate(-point.x, -point.y);
155
- const r = point.step / 2;
156
- ctx.arc(point.x - r, point.y, r, 0, 2 * Math.PI);
157
- ctx.stroke();
158
- ctx.fillStyle = store.data.background || '#ffffff';
159
- ctx.fill();
160
- ctx.restore();
161
- };
162
-
163
- arrows.diamondSolid = (
164
- ctx: CanvasRenderingContext2D,
165
- pen: Pen,
166
- store: Meta2dStore,
167
- point: Point
168
- ) => {
169
- ctx.save();
170
- ctx.translate(point.x, point.y);
171
- ctx.rotate((point.rotate * Math.PI) / 180);
172
- ctx.translate(-point.x, -point.y);
173
- const fromX = point.x - point.step;
174
- const r = point.step / 2;
175
- ctx.moveTo(fromX, point.y);
176
- ctx.lineTo(fromX + r, point.y - r / 2);
177
- ctx.lineTo(point.x, point.y);
178
- ctx.lineTo(fromX + r, point.y + r / 2);
179
- ctx.closePath();
180
- ctx.stroke();
181
- ctx.fillStyle = ctx.strokeStyle;
182
- ctx.fill();
183
- ctx.restore();
184
- };
185
-
186
- arrows.diamond = (
187
- ctx: CanvasRenderingContext2D,
188
- pen: Pen,
189
- store: Meta2dStore,
190
- point: Point
191
- ) => {
192
- ctx.save();
193
- ctx.translate(point.x, point.y);
194
- ctx.rotate((point.rotate * Math.PI) / 180);
195
- ctx.translate(-point.x, -point.y);
196
- const fromX = point.x - point.step;
197
- const r = point.step / 2;
198
- ctx.moveTo(fromX, point.y);
199
- ctx.lineTo(fromX + r, point.y - r / 2);
200
- ctx.lineTo(point.x, point.y);
201
- ctx.lineTo(fromX + r, point.y + r / 2);
202
- ctx.closePath();
203
- ctx.stroke();
204
- ctx.fillStyle = store.data.background || '#ffffff';
205
- ctx.fill();
206
- ctx.restore();
207
- };
208
-
209
- arrows.line = (
210
- ctx: CanvasRenderingContext2D,
211
- pen: Pen,
212
- store: Meta2dStore,
213
- point: Point
214
- ) => {
215
- ctx.save();
216
- ctx.translate(point.x, point.y);
217
- ctx.rotate((point.rotate * Math.PI) / 180);
218
- ctx.translate(-point.x, -point.y);
219
- const fromX = point.x - point.step;
220
- ctx.moveTo(fromX, point.y - point.step / 3);
221
- ctx.lineTo(point.x, point.y);
222
- ctx.lineTo(fromX, point.y + point.step / 3);
223
- ctx.stroke();
224
- ctx.restore();
225
- };
226
-
227
- arrows.lineUp = (
228
- ctx: CanvasRenderingContext2D,
229
- pen: Pen,
230
- store: Meta2dStore,
231
- point: Point
232
- ) => {
233
- ctx.save();
234
- ctx.translate(point.x, point.y);
235
- ctx.rotate((point.rotate * Math.PI) / 180);
236
- ctx.translate(-point.x, -point.y);
237
- const fromX = point.x - point.step;
238
- ctx.moveTo(fromX, point.y - point.step / 3);
239
- ctx.lineTo(point.x, point.y);
240
- ctx.stroke();
241
- ctx.restore();
242
- };
243
-
244
- arrows.lineDown = (
245
- ctx: CanvasRenderingContext2D,
246
- pen: Pen,
247
- store: Meta2dStore,
248
- point: Point
249
- ) => {
250
- ctx.save();
251
- ctx.translate(point.x, point.y);
252
- ctx.rotate((point.rotate * Math.PI) / 180);
253
- ctx.translate(-point.x, -point.y);
254
- const fromX = point.x - point.step;
255
- ctx.moveTo(fromX, point.y + point.step / 3);
256
- ctx.lineTo(point.x, point.y);
257
- ctx.stroke();
258
- ctx.restore();
259
- };
package/src/pen/math.ts DELETED
@@ -1,253 +0,0 @@
1
- import { PenType } from '.';
2
- import { Point } from '../point';
3
- import {
4
- calcCenter,
5
- expandRect,
6
- Rect,
7
- rectInFourAngRect,
8
- rectToPoints,
9
- } from '../rect';
10
- import { Meta2dStore } from '../store';
11
- import { deepClone } from '../utils';
12
- import { Pen } from './model';
13
-
14
- export function calcAnchorDock(
15
- store: Meta2dStore,
16
- e: Point,
17
- curAnchor?: Point
18
- ) {
19
- let xDock: Point;
20
- let yDock: Point;
21
- let x = Infinity;
22
- let y = Infinity;
23
- const size = 8;
24
- for (const pen of store.data.pens) {
25
- if (pen.calculative.inView === false) {
26
- continue;
27
- }
28
-
29
- // 得到图形的全部点
30
- const points = getPointsByPen(pen);
31
- points.forEach((pt) => {
32
- if (pt === e || pt === curAnchor) {
33
- return;
34
- }
35
- let distance =
36
- (pen.calculative.worldRect.center.x - e.x) *
37
- (pen.calculative.worldRect.center.x - e.x) +
38
- (pen.calculative.worldRect.center.y - e.y) *
39
- (pen.calculative.worldRect.center.y - e.y);
40
- const disX = Math.abs(pt.x - e.x);
41
- if (disX > 0 && disX < size && distance < x) {
42
- xDock = {
43
- x: Math.round(pt.x) + 0.5,
44
- y: Math.round(pt.y) + 0.5,
45
- prev: {
46
- x: Math.round(e.x) + 0.5,
47
- y: Math.round(e.y) + 0.5,
48
- },
49
- step: pt.x - e.x,
50
- };
51
- x = distance;
52
- }
53
- const disY = Math.abs(pt.y - e.y);
54
- if (disY > 0 && disY < size && distance < y) {
55
- yDock = {
56
- x: Math.round(pt.x) + 0.5,
57
- y: Math.round(pt.y) + 0.5,
58
- prev: {
59
- x: Math.round(e.x) + 0.5,
60
- y: Math.round(e.y) + 0.5,
61
- },
62
- step: pt.y - e.y,
63
- };
64
- y = distance;
65
- }
66
- });
67
- }
68
-
69
- return {
70
- xDock,
71
- yDock,
72
- };
73
- }
74
-
75
- export function calcMoveDock(
76
- store: Meta2dStore,
77
- rect: Rect,
78
- pens: Pen[],
79
- offset: Point
80
- ) {
81
- // 找到 points ,深拷贝一下,不影响原值
82
- let activePoints: Point[] = [];
83
- if (pens.length === 1) {
84
- activePoints = deepClone(getPointsByPen(pens[0]));
85
- activePoints.forEach((point) => {
86
- point.x += offset.x;
87
- point.y += offset.y;
88
- });
89
- } else {
90
- calcCenter(rect);
91
- activePoints = [rect.center, ...rectToPoints(rect)];
92
- }
93
- return calcDockByPoints(store, activePoints, rect, true);
94
- }
95
-
96
- /**
97
- * 得到画笔的全部点
98
- * 线 即全部的 worldAnchors
99
- * 图形 即全部的 worldAnchors ,加上边缘四个点以及中心点
100
- * @param pen 画笔
101
- */
102
- export function getPointsByPen(pen: Pen): Point[] {
103
- if (!pen.type) {
104
- const outerPoints = rectToPoints(pen.calculative.worldRect);
105
- calcCenter(pen.calculative.worldRect);
106
- return [
107
- ...pen.calculative.worldAnchors,
108
- ...outerPoints,
109
- pen.calculative.worldRect.center,
110
- ];
111
- } else if (pen.type === PenType.Line) {
112
- return pen.calculative.worldAnchors;
113
- }
114
- }
115
-
116
- export function calcResizeDock(
117
- store: Meta2dStore,
118
- rect: Rect,
119
- pens: Pen[],
120
- resizeIndex: number
121
- ): { xDock: Point; yDock: Point } {
122
- const activePoints = rectToPoints(rect);
123
- return calcDockByPoints(store, activePoints, rect);
124
- }
125
-
126
- /**
127
- * 通过当前 活动层 的所有点 计算 dock
128
- * @param activePoints 活动层 的所有点
129
- * @param rect 当前区域
130
- * @param calcActive 是否与 活动层画笔 的点进行计算
131
- */
132
- function calcDockByPoints(
133
- store: Meta2dStore,
134
- activePoints: Point[],
135
- rect: Rect,
136
- calcActive = false
137
- ): { xDock: Point; yDock: Point } {
138
- let xDock: Point;
139
- let yDock: Point;
140
- let minCloseX = Infinity;
141
- let minCloseY = Infinity;
142
-
143
- // 临近范围
144
- const closeSize = 10;
145
- const paddingRect = expandRect(rect, closeSize);
146
- store.data.pens.forEach((pen) => {
147
- const { inView, worldRect, active } = pen.calculative;
148
- if (
149
- inView === false ||
150
- (!calcActive && active) || // 如果不计算活动层,则过滤掉活动层
151
- rectInFourAngRect(paddingRect, worldRect) || // 水平和垂直方向 无重合
152
- (pen.type &&
153
- store.active.some((active) => isConnectLine(store, active, pen)))
154
- ) {
155
- return;
156
- }
157
-
158
- // 得到图形的全部点
159
- const points = getPointsByPen(pen);
160
- if (!points) {
161
- return;
162
- }
163
- // 比对 points 中的点,必须找出最近的点,不可提前跳出
164
- for (const point of points) {
165
- for (const activePoint of activePoints) {
166
- const stepX = point.x - activePoint.x;
167
- const stepY = point.y - activePoint.y;
168
- const absStepX = Math.abs(stepX);
169
- const absStepY = Math.abs(stepY);
170
- if (!rect.center) {
171
- rect.center = {
172
- x: rect.x + rect.width / 2,
173
- y: rect.y + rect.height / 2,
174
- };
175
- }
176
- if (absStepX < closeSize && absStepX < minCloseX) {
177
- xDock = {
178
- x: Math.round(point.x) + 0.5,
179
- y: Math.round(point.y) + 0.5,
180
- step: stepX,
181
- prev: {
182
- x: Math.round(activePoint.x) + 0.5,
183
- y: Math.round(activePoint.y) + 0.5,
184
- },
185
- penId: pen.id,
186
- anchorId: activePoint.id,
187
- dockAnchorId: point.id,
188
- };
189
- minCloseX = absStepX;
190
- }
191
- if (absStepY < closeSize && absStepY < minCloseY) {
192
- yDock = {
193
- x: Math.round(point.x) + 0.5,
194
- y: Math.round(point.y) + 0.5,
195
- step: stepY,
196
- prev: {
197
- x: Math.round(activePoint.x) + 0.5,
198
- y: Math.round(activePoint.y) + 0.5,
199
- },
200
- penId: pen.id,
201
- anchorId: activePoint.id,
202
- dockAnchorId: point.id,
203
- };
204
- minCloseY = absStepY;
205
- }
206
- }
207
- }
208
- });
209
-
210
- return {
211
- xDock,
212
- yDock,
213
- };
214
- }
215
-
216
- /**
217
- * 判断 line 是否是 active 的连接线(并且计算子节点)
218
- * @param store
219
- * @param active 本次计算的画笔
220
- * @param line 连线
221
- * @returns
222
- */
223
- function isConnectLine(store: Meta2dStore, active: Pen, line: Pen) {
224
- if (!line.type) {
225
- return false;
226
- }
227
- if (Array.isArray(active?.connectedLines)) {
228
- for (const cline of active?.connectedLines) {
229
- if (cline.lineId === line.id) {
230
- return true;
231
- }
232
- }
233
- }
234
- // 考虑子节点
235
- if (Array.isArray(active?.children)) {
236
- for (const id of active.children) {
237
- const child = store.pens[id];
238
- if (isConnectLine(store, child, line)) {
239
- return true;
240
- }
241
- }
242
- }
243
- return false;
244
- }
245
-
246
- /**
247
- * 是否近似于 num
248
- * @param num
249
- */
250
- export function isEqual(source: number, target: number): boolean {
251
- // @ts-ignore
252
- return source.toFixed(12) == target;
253
- }