vislite 1.6.0 → 1.6.1

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 (176) hide show
  1. package/AUTHORS.txt +6 -6
  2. package/CHANGELOG +8 -1
  3. package/LICENSE +20 -20
  4. package/lib/BarLayout/index.es.js +105 -105
  5. package/lib/BarLayout/index.es.min.js +2 -2
  6. package/lib/Buffer/index.es.js +1 -1
  7. package/lib/Buffer/index.es.min.js +1 -1
  8. package/lib/Canvas/index.es.js +1 -1
  9. package/lib/Canvas/index.es.min.js +1 -1
  10. package/lib/Cardinal/index.es.js +1 -1
  11. package/lib/Cardinal/index.es.min.js +1 -1
  12. package/lib/Eoap/index.es.js +1 -1
  13. package/lib/Eoap/index.es.min.js +1 -1
  14. package/lib/Hermite/index.es.js +1 -1
  15. package/lib/Hermite/index.es.min.js +1 -1
  16. package/lib/MapCoordinate/index.es.js +1 -1
  17. package/lib/MapCoordinate/index.es.min.js +1 -1
  18. package/lib/Matrix4/index.es.js +1 -1
  19. package/lib/Matrix4/index.es.min.js +1 -1
  20. package/lib/Mercator/index.es.js +1 -1
  21. package/lib/Mercator/index.es.min.js +1 -1
  22. package/lib/PieLayout/index.es.js +105 -105
  23. package/lib/PieLayout/index.es.min.js +2 -2
  24. package/lib/RawCanvas/index.es.js +1 -1
  25. package/lib/RawCanvas/index.es.min.js +1 -1
  26. package/lib/SVG/index.es.js +2 -2
  27. package/lib/SVG/index.es.min.js +2 -2
  28. package/lib/Shader/index.es.js +1 -1
  29. package/lib/Shader/index.es.min.js +1 -1
  30. package/lib/Texture/index.es.js +1 -1
  31. package/lib/Texture/index.es.min.js +1 -1
  32. package/lib/TreeLayout/index.es.js +105 -105
  33. package/lib/TreeLayout/index.es.min.js +2 -2
  34. package/lib/animation/index.es.js +105 -105
  35. package/lib/animation/index.es.min.js +2 -2
  36. package/lib/assemble/index.es.js +1 -1
  37. package/lib/assemble/index.es.min.js +1 -1
  38. package/lib/getLoopColors/index.es.js +1 -1
  39. package/lib/getLoopColors/index.es.min.js +1 -1
  40. package/lib/getWebGLContext/index.es.js +1 -1
  41. package/lib/getWebGLContext/index.es.min.js +1 -1
  42. package/lib/index.umd.js +156 -156
  43. package/lib/index.umd.min.js +5 -5
  44. package/lib/initOption/index.es.js +1 -1
  45. package/lib/initOption/index.es.min.js +1 -1
  46. package/lib/mergeOption/index.es.js +1 -1
  47. package/lib/mergeOption/index.es.min.js +1 -1
  48. package/lib/move/index.es.js +1 -1
  49. package/lib/move/index.es.min.js +1 -1
  50. package/lib/rotate/index.es.js +1 -1
  51. package/lib/rotate/index.es.min.js +1 -1
  52. package/lib/ruler/index.es.js +1 -1
  53. package/lib/ruler/index.es.min.js +1 -1
  54. package/lib/scale/index.es.js +1 -1
  55. package/lib/scale/index.es.min.js +1 -1
  56. package/lib/throttle/index.es.js +51 -51
  57. package/lib/throttle/index.es.min.js +2 -2
  58. package/minialipay/ui-canvas/drawImage.js +35 -35
  59. package/minialipay/ui-canvas/index.acss +4 -4
  60. package/minialipay/ui-canvas/index.axml +3 -3
  61. package/minialipay/ui-canvas/index.d.ts +1 -1
  62. package/minialipay/ui-canvas/index.js +100 -100
  63. package/minialipay/ui-canvas/index.json +6 -6
  64. package/miniprogram/ui-canvas/drawImage.js +35 -35
  65. package/miniprogram/ui-canvas/index.js +125 -125
  66. package/miniprogram/ui-canvas/index.json +4 -4
  67. package/miniprogram/ui-canvas/index.wxml +4 -4
  68. package/miniprogram/ui-canvas/index.wxss +5 -5
  69. package/package/BarLayout/index.ts +2 -2
  70. package/package/Buffer/index.ts +2 -2
  71. package/package/Canvas/index.ts +2 -2
  72. package/package/Cardinal/index.ts +2 -2
  73. package/package/Eoap/index.ts +2 -2
  74. package/package/Hermite/index.ts +2 -2
  75. package/package/MapCoordinate/index.ts +2 -2
  76. package/package/Matrix4/index.ts +2 -2
  77. package/package/Mercator/index.ts +2 -2
  78. package/package/PieLayout/index.ts +2 -2
  79. package/package/RawCanvas/index.ts +2 -2
  80. package/package/SVG/index.ts +2 -2
  81. package/package/Shader/index.ts +2 -2
  82. package/package/Texture/index.ts +2 -2
  83. package/package/TreeLayout/index.ts +2 -2
  84. package/package/animation/index.ts +5 -5
  85. package/package/assemble/index.ts +2 -2
  86. package/package/getLoopColors/index.ts +2 -2
  87. package/package/getWebGLContext/index.ts +40 -40
  88. package/package/index.ts +84 -84
  89. package/package/initOption/index.ts +2 -2
  90. package/package/mergeOption/index.ts +2 -2
  91. package/package/move/index.ts +2 -2
  92. package/package/rotate/index.ts +2 -2
  93. package/package/ruler/index.ts +2 -2
  94. package/package/scale/index.ts +2 -2
  95. package/package/throttle/index.ts +2 -2
  96. package/package.json +2 -2
  97. package/src/Eoap.ts +66 -66
  98. package/src/Matrix4/index.ts +84 -84
  99. package/src/Matrix4/move.ts +12 -12
  100. package/src/Matrix4/rotate.ts +15 -15
  101. package/src/Matrix4/scale.ts +11 -11
  102. package/src/Matrix4/transform.ts +64 -64
  103. package/src/Mercator.ts +27 -27
  104. package/src/common/assemble.ts +22 -22
  105. package/src/common/canvas/arc.ts +51 -51
  106. package/src/common/canvas/config.ts +176 -176
  107. package/src/common/canvas/default.ts +64 -64
  108. package/src/common/canvas/gradient.ts +31 -31
  109. package/src/common/canvas/index.ts +188 -188
  110. package/src/common/canvas/texts.ts +18 -18
  111. package/src/common/map/getBoundary.ts +15 -15
  112. package/src/common/map/tool.ts +29 -29
  113. package/src/common/option.ts +29 -29
  114. package/src/common/setStyle.ts +5 -5
  115. package/src/common/svg/config.ts +213 -213
  116. package/src/common/svg/default.ts +29 -29
  117. package/src/common/svg/gradient.ts +53 -53
  118. package/src/common/svg/index.ts +332 -332
  119. package/src/common/svg/tool.ts +51 -51
  120. package/src/common/tree/index.ts +25 -25
  121. package/src/common/tree/toInnerTree.ts +61 -61
  122. package/src/common/type.ts +26 -26
  123. package/src/common/webgl/buffer.ts +79 -79
  124. package/src/common/webgl/getWebGLContext.ts +45 -45
  125. package/src/common/webgl/shader.ts +75 -75
  126. package/src/coordinate/MapCoordinate.ts +80 -80
  127. package/src/getLoopColors.ts +42 -42
  128. package/src/interpolation/Cardinal.ts +110 -110
  129. package/src/interpolation/Hermite.ts +65 -65
  130. package/src/move.ts +7 -7
  131. package/src/rotate.ts +7 -7
  132. package/src/ruler.ts +209 -209
  133. package/src/scale.ts +6 -6
  134. package/types/Bar.d.ts +91 -91
  135. package/types/BarConfig.d.ts +4 -4
  136. package/types/BarLayout.d.ts +48 -48
  137. package/types/BarOption.d.ts +31 -31
  138. package/types/Buffer.d.ts +23 -23
  139. package/types/CanvasConfig.d.ts +88 -88
  140. package/types/CanvasOption.d.ts +13 -13
  141. package/types/CanvasOpts.d.ts +9 -9
  142. package/types/Cardinal.d.ts +13 -13
  143. package/types/Gradient.d.ts +14 -14
  144. package/types/Hermite.d.ts +18 -18
  145. package/types/Map.d.ts +9 -9
  146. package/types/MapConfig.d.ts +27 -27
  147. package/types/MapCoordinate.d.ts +22 -22
  148. package/types/Matrix4.d.ts +47 -47
  149. package/types/Pie.d.ts +73 -73
  150. package/types/PieConfig.d.ts +26 -26
  151. package/types/PieLayout.d.ts +40 -40
  152. package/types/PieOption.d.ts +21 -21
  153. package/types/SVG.d.ts +247 -247
  154. package/types/SVGConfig.d.ts +71 -71
  155. package/types/Shader.d.ts +16 -16
  156. package/types/Texture.d.ts +16 -16
  157. package/types/Tree.d.ts +74 -74
  158. package/types/TreeConfig.d.ts +36 -36
  159. package/types/TreeLayout.d.ts +59 -59
  160. package/types/TreeOption.d.ts +48 -48
  161. package/types/animation.d.ts +11 -11
  162. package/types/assemble.d.ts +5 -5
  163. package/types/getLoopColors.d.ts +5 -5
  164. package/types/getWebGLContext.d.ts +7 -7
  165. package/types/index.d.ts +195 -195
  166. package/types/move.d.ts +5 -5
  167. package/types/option.d.ts +12 -12
  168. package/types/painterConfig.d.ts +4 -4
  169. package/types/rotate.d.ts +5 -5
  170. package/types/ruler.d.ts +10 -10
  171. package/types/scale.d.ts +5 -5
  172. package/types/throttle.d.ts +5 -5
  173. package/types/ui-canvas.d.ts +4 -4
  174. package/types/uni-canvas.d.ts +3 -3
  175. package/uni-app/drawImage.js +19 -19
  176. package/uni-app/ui-canvas.vue +295 -295
@@ -1,332 +1,332 @@
1
- import type { default as SVGConfigType, svgElType, svgBoardType } from "../../../types/SVGConfig"
2
-
3
- import { initText, initCircle, initPath, initRect, initArc } from "./config"
4
- import { toNode, setAttribute, getAttribute, full, fill, stroke } from "./tool"
5
- import rotate from "../../rotate"
6
- import { linearGradient, radialGradient } from "./gradient"
7
- import defaultFactory from "./default"
8
-
9
- class SVG {
10
- readonly name: string = "SVG"
11
-
12
- // 用于记录配置
13
- private __config = defaultFactory()
14
-
15
- // 作用的节点
16
- private __useEl: SVGElement
17
-
18
- // 路径(和canvas2D的类似)
19
- private __path: string = ""
20
- private __currentPosition: number[] = []
21
-
22
- protected __svg: SVGElement
23
- constructor(svg: SVGElement) {
24
- this.__svg = svg
25
- }
26
-
27
- // 属性设置或获取
28
- config(params: SVGConfigType) {
29
- if (typeof params !== "object") {
30
- return this.__config[params]
31
- } else {
32
- for (const key in params) {
33
- (this.__config as any)[key] = (params as any)[key]
34
- }
35
- }
36
- return this
37
- }
38
-
39
- reset() {
40
- this.config(defaultFactory())
41
- return this
42
- }
43
-
44
- /**
45
- * 基础方法
46
- * ---------------------------------
47
- */
48
-
49
- // 标记应用节点
50
- // 也就是后续操作都会作用在此节点
51
- useEl(el: SVGElement) {
52
- this.__useEl = el
53
- return this
54
- }
55
-
56
- // 获取当前应用的节点
57
- getEl() {
58
- return this.__useEl
59
- }
60
-
61
- // 追加节点
62
- // el可以是结点或字符串,字符串的话表示节点名称
63
- // context可选,表示追加位置,可选,默认根svg
64
- // 此外,和appendBoard等操作一样,执行后新加入的结点会自动变成应用节点
65
- appendEl(el: svgElType, context?: SVGElement) {
66
- context = context || this.__svg
67
-
68
- if (typeof el == "string") el = toNode(el)
69
- context.appendChild(el as SVGElement)
70
-
71
- this.__useEl = el as SVGElement
72
- return this
73
- }
74
-
75
- // 追加绘制板
76
- // 参数和appendEl类似,只是el如果是字符串的话,表示需要绘制对应什么内容,
77
- // 比如el = “arc”,表示画弧(不是路径arc),那么我们会创建path节点,因为我们是使用path实现的
78
- appendBoard(el: svgBoardType, context?: SVGElement) {
79
- let _el: svgBoardType | string = el
80
-
81
- if (typeof el == "string")
82
- _el =
83
- {
84
- text: "text",
85
- path: "path",
86
- arc: "path",
87
- circle: "circle",
88
- rect: "rect",
89
- }[el] || ""
90
-
91
- if (_el == "") throw new Error("Unsupported drawing method:" + el)
92
- return this.appendEl(_el as svgElType, context)
93
- }
94
-
95
- // 删除当前维护的节点
96
- remove() {
97
- if (!this.__useEl) {
98
- throw new Error("Currently, no node can be deleted.")
99
- } else {
100
- ((this.__useEl as SVGElement).parentNode as SVGElement).removeChild(
101
- this.__useEl
102
- )
103
- }
104
- return this
105
- }
106
-
107
- // 设置或获取节点属性
108
- attr(params: any) {
109
- if (!this.__useEl)
110
- throw new Error("Currently, no node can be modified or viewed.")
111
-
112
- if (typeof params !== "object") {
113
- return getAttribute(this.__useEl, params)
114
- } else {
115
- for (const key in params) {
116
- setAttribute(this.__useEl, key, params[key])
117
- }
118
- return this
119
- }
120
- }
121
-
122
- /**
123
- * 绘制方法
124
- * ---------------------------------
125
- */
126
-
127
- // 文字
128
- // deg表示文字旋转角度,是角度值,不是弧度
129
- fillText(text: string, x: number, y: number, deg: number = 0) {
130
- initText(this.__useEl, this.__config, x, y, deg)
131
- this.__useEl.textContent = text
132
- fill(this.__useEl, this.__config)
133
- return this
134
- }
135
- strokeText(text: string, x: number, y: number, deg: number = 0) {
136
- initText(this.__useEl, this.__config, x, y, deg)
137
- this.__useEl.textContent = text
138
- stroke(this.__useEl, this.__config)
139
- return this
140
- }
141
- fullText(text: string, x: number, y: number, deg: number = 0) {
142
- initText(this.__useEl, this.__config, x, y, deg)
143
- this.__useEl.textContent = text
144
- full(this.__useEl, this.__config)
145
- return this
146
- }
147
-
148
- // 弧
149
- fillArc(
150
- cx: number,
151
- cy: number,
152
- r1: number,
153
- r2: number,
154
- beginDeg: number,
155
- deg: number
156
- ) {
157
- initArc(this.__useEl, this.__config, cx, cy, r1, r2, beginDeg, deg)
158
- fill(this.__useEl, this.__config)
159
- return this
160
- }
161
- strokeArc(
162
- cx: number,
163
- cy: number,
164
- r1: number,
165
- r2: number,
166
- beginDeg: number,
167
- deg: number
168
- ) {
169
- initArc(this.__useEl, this.__config, cx, cy, r1, r2, beginDeg, deg)
170
- stroke(this.__useEl, this.__config)
171
- return this
172
- }
173
- fullArc(
174
- cx: number,
175
- cy: number,
176
- r1: number,
177
- r2: number,
178
- beginDeg: number,
179
- deg: number
180
- ) {
181
- initArc(this.__useEl, this.__config, cx, cy, r1, r2, beginDeg, deg)
182
- full(this.__useEl, this.__config)
183
- return this
184
- }
185
-
186
- // 圆形
187
- fillCircle(cx: number, cy: number, r: number) {
188
- initCircle(this.__useEl, cx, cy, r)
189
- fill(this.__useEl, this.__config)
190
- return this
191
- }
192
- strokeCircle(cx: number, cy: number, r: number) {
193
- initCircle(this.__useEl, cx, cy, r)
194
- stroke(this.__useEl, this.__config)
195
- return this
196
- }
197
- fullCircle(cx: number, cy: number, r: number) {
198
- initCircle(this.__useEl, cx, cy, r)
199
- full(this.__useEl, this.__config)
200
- return this
201
- }
202
-
203
- // 矩形
204
- fillRect(x: number, y: number, width: number, height: number) {
205
- initRect(this.__useEl, this.__config, x, y, width, height)
206
- fill(this.__useEl, this.__config)
207
- return this
208
- }
209
- strokeRect(x: number, y: number, width: number, height: number) {
210
- initRect(this.__useEl, this.__config, x, y, width, height)
211
- stroke(this.__useEl, this.__config)
212
- return this
213
- }
214
- fullRect(x: number, y: number, width: number, height: number) {
215
- initRect(this.__useEl, this.__config, x, y, width, height)
216
- full(this.__useEl, this.__config)
217
- return this
218
- }
219
-
220
- // 路径
221
- beginPath() {
222
- this.__currentPosition = []
223
- this.__path = ""
224
- return this
225
- }
226
- closePath() {
227
- this.__path += "Z"
228
- return this
229
- }
230
- moveTo(x: number, y: number) {
231
- this.__currentPosition = [x, y]
232
-
233
- this.__path += "M" + x + " " + y
234
- return this
235
- }
236
- lineTo(x: number, y: number) {
237
- this.__currentPosition = [x, y]
238
-
239
- this.__path += (this.__path == "" ? "M" : "L") + x + " " + y
240
- return this
241
- }
242
- fill() {
243
- initPath(this.__useEl, this.__path)
244
- fill(this.__useEl, this.__config)
245
- return this
246
- }
247
- stroke() {
248
- initPath(this.__useEl, this.__path)
249
- stroke(this.__useEl, this.__config)
250
- return this
251
- }
252
- full() {
253
- initPath(this.__useEl, this.__path)
254
- full(this.__useEl, this.__config)
255
- return this
256
- }
257
-
258
- arc(x: number, y: number, r: number, beginDeg: number, deg: number) {
259
- const begPosition = rotate(x, y, (beginDeg / 180) * Math.PI, x + r, y)
260
- const endPosition = rotate(
261
- x,
262
- y,
263
- ((beginDeg + deg) / 180) * Math.PI,
264
- x + r,
265
- y
266
- )
267
- // 如果当前没有路径,说明是开始的,就移动到正确位置
268
- if (this.__path == "") {
269
- this.__path += "M" + begPosition[0] + "," + begPosition[1]
270
- }
271
- // 如果当前有路径,位置不正确,应该画到正确位置(和canvas保持一致)
272
- else if (
273
- begPosition[0] != this.__currentPosition[0] ||
274
- begPosition[1] != this.__currentPosition[1]
275
- ) {
276
- this.__path += "L" + begPosition[0] + "," + begPosition[1]
277
- }
278
- this.__path +=
279
- "A" +
280
- r +
281
- "," +
282
- r +
283
- " 0 " +
284
- (deg > 180 || deg < -180 ? 1 : 0) +
285
- "," +
286
- (deg > 0 ? 1 : 0) +
287
- " " +
288
- endPosition[0] +
289
- "," +
290
- endPosition[1]
291
- return this
292
- }
293
-
294
- // 路径 - 贝塞尔曲线
295
- quadraticCurveTo(cpx: number, cpy: number, x: number, y: number) {
296
- this.__path += "Q" + cpx + " " + cpy + "," + x + " " + y
297
- return this
298
- }
299
- bezierCurveTo(
300
- cp1x: number,
301
- cp1y: number,
302
- cp2x: number,
303
- cp2y: number,
304
- x: number,
305
- y: number
306
- ) {
307
- this.__path +=
308
- "C" + cp1x + " " + cp1y + "," + cp2x + " " + cp2y + "," + x + " " + y
309
- return this
310
- }
311
-
312
- // 绑定事件
313
- bind(eventType: string, callback: (event: Event, target: SVGElement) => void) {
314
- this.__useEl.addEventListener(eventType, function (event: Event) {
315
- callback.call(this, event, this)
316
- }, false)
317
- return this
318
- }
319
-
320
-
321
- // 线性渐变
322
- createLinearGradient(x0: number, y0: number, x1: number, y1: number) {
323
- return linearGradient(this.__svg, x0, y0, x1, y1)
324
- }
325
-
326
- // 环形渐变
327
- createRadialGradient(cx: number, cy: number, r: number) {
328
- return radialGradient(this.__svg, cx, cy, r)
329
- }
330
- }
331
-
332
- export default SVG
1
+ import type { default as SVGConfigType, svgElType, svgBoardType } from "../../../types/SVGConfig"
2
+
3
+ import { initText, initCircle, initPath, initRect, initArc } from "./config"
4
+ import { toNode, setAttribute, getAttribute, full, fill, stroke } from "./tool"
5
+ import rotate from "../../rotate"
6
+ import { linearGradient, radialGradient } from "./gradient"
7
+ import defaultFactory from "./default"
8
+
9
+ class SVG {
10
+ readonly name: string = "SVG"
11
+
12
+ // 用于记录配置
13
+ private __config = defaultFactory()
14
+
15
+ // 作用的节点
16
+ private __useEl: SVGElement
17
+
18
+ // 路径(和canvas2D的类似)
19
+ private __path: string = ""
20
+ private __currentPosition: number[] = []
21
+
22
+ protected __svg: SVGElement
23
+ constructor(svg: SVGElement) {
24
+ this.__svg = svg
25
+ }
26
+
27
+ // 属性设置或获取
28
+ config(params: SVGConfigType) {
29
+ if (typeof params !== "object") {
30
+ return this.__config[params]
31
+ } else {
32
+ for (const key in params) {
33
+ (this.__config as any)[key] = (params as any)[key]
34
+ }
35
+ }
36
+ return this
37
+ }
38
+
39
+ reset() {
40
+ this.config(defaultFactory())
41
+ return this
42
+ }
43
+
44
+ /**
45
+ * 基础方法
46
+ * ---------------------------------
47
+ */
48
+
49
+ // 标记应用节点
50
+ // 也就是后续操作都会作用在此节点
51
+ useEl(el: SVGElement) {
52
+ this.__useEl = el
53
+ return this
54
+ }
55
+
56
+ // 获取当前应用的节点
57
+ getEl() {
58
+ return this.__useEl
59
+ }
60
+
61
+ // 追加节点
62
+ // el可以是结点或字符串,字符串的话表示节点名称
63
+ // context可选,表示追加位置,可选,默认根svg
64
+ // 此外,和appendBoard等操作一样,执行后新加入的结点会自动变成应用节点
65
+ appendEl(el: svgElType, context?: SVGElement) {
66
+ context = context || this.__svg
67
+
68
+ if (typeof el == "string") el = toNode(el)
69
+ context.appendChild(el as SVGElement)
70
+
71
+ this.__useEl = el as SVGElement
72
+ return this
73
+ }
74
+
75
+ // 追加绘制板
76
+ // 参数和appendEl类似,只是el如果是字符串的话,表示需要绘制对应什么内容,
77
+ // 比如el = “arc”,表示画弧(不是路径arc),那么我们会创建path节点,因为我们是使用path实现的
78
+ appendBoard(el: svgBoardType, context?: SVGElement) {
79
+ let _el: svgBoardType | string = el
80
+
81
+ if (typeof el == "string")
82
+ _el =
83
+ {
84
+ text: "text",
85
+ path: "path",
86
+ arc: "path",
87
+ circle: "circle",
88
+ rect: "path",
89
+ }[el] || ""
90
+
91
+ if (_el == "") throw new Error("Unsupported drawing method:" + el)
92
+ return this.appendEl(_el as svgElType, context)
93
+ }
94
+
95
+ // 删除当前维护的节点
96
+ remove() {
97
+ if (!this.__useEl) {
98
+ throw new Error("Currently, no node can be deleted.")
99
+ } else {
100
+ ((this.__useEl as SVGElement).parentNode as SVGElement).removeChild(
101
+ this.__useEl
102
+ )
103
+ }
104
+ return this
105
+ }
106
+
107
+ // 设置或获取节点属性
108
+ attr(params: any) {
109
+ if (!this.__useEl)
110
+ throw new Error("Currently, no node can be modified or viewed.")
111
+
112
+ if (typeof params !== "object") {
113
+ return getAttribute(this.__useEl, params)
114
+ } else {
115
+ for (const key in params) {
116
+ setAttribute(this.__useEl, key, params[key])
117
+ }
118
+ return this
119
+ }
120
+ }
121
+
122
+ /**
123
+ * 绘制方法
124
+ * ---------------------------------
125
+ */
126
+
127
+ // 文字
128
+ // deg表示文字旋转角度,是角度值,不是弧度
129
+ fillText(text: string, x: number, y: number, deg: number = 0) {
130
+ initText(this.__useEl, this.__config, x, y, deg)
131
+ this.__useEl.textContent = text
132
+ fill(this.__useEl, this.__config)
133
+ return this
134
+ }
135
+ strokeText(text: string, x: number, y: number, deg: number = 0) {
136
+ initText(this.__useEl, this.__config, x, y, deg)
137
+ this.__useEl.textContent = text
138
+ stroke(this.__useEl, this.__config)
139
+ return this
140
+ }
141
+ fullText(text: string, x: number, y: number, deg: number = 0) {
142
+ initText(this.__useEl, this.__config, x, y, deg)
143
+ this.__useEl.textContent = text
144
+ full(this.__useEl, this.__config)
145
+ return this
146
+ }
147
+
148
+ // 弧
149
+ fillArc(
150
+ cx: number,
151
+ cy: number,
152
+ r1: number,
153
+ r2: number,
154
+ beginDeg: number,
155
+ deg: number
156
+ ) {
157
+ initArc(this.__useEl, this.__config, cx, cy, r1, r2, beginDeg, deg)
158
+ fill(this.__useEl, this.__config)
159
+ return this
160
+ }
161
+ strokeArc(
162
+ cx: number,
163
+ cy: number,
164
+ r1: number,
165
+ r2: number,
166
+ beginDeg: number,
167
+ deg: number
168
+ ) {
169
+ initArc(this.__useEl, this.__config, cx, cy, r1, r2, beginDeg, deg)
170
+ stroke(this.__useEl, this.__config)
171
+ return this
172
+ }
173
+ fullArc(
174
+ cx: number,
175
+ cy: number,
176
+ r1: number,
177
+ r2: number,
178
+ beginDeg: number,
179
+ deg: number
180
+ ) {
181
+ initArc(this.__useEl, this.__config, cx, cy, r1, r2, beginDeg, deg)
182
+ full(this.__useEl, this.__config)
183
+ return this
184
+ }
185
+
186
+ // 圆形
187
+ fillCircle(cx: number, cy: number, r: number) {
188
+ initCircle(this.__useEl, cx, cy, r)
189
+ fill(this.__useEl, this.__config)
190
+ return this
191
+ }
192
+ strokeCircle(cx: number, cy: number, r: number) {
193
+ initCircle(this.__useEl, cx, cy, r)
194
+ stroke(this.__useEl, this.__config)
195
+ return this
196
+ }
197
+ fullCircle(cx: number, cy: number, r: number) {
198
+ initCircle(this.__useEl, cx, cy, r)
199
+ full(this.__useEl, this.__config)
200
+ return this
201
+ }
202
+
203
+ // 矩形
204
+ fillRect(x: number, y: number, width: number, height: number) {
205
+ initRect(this.__useEl, this.__config, x, y, width, height)
206
+ fill(this.__useEl, this.__config)
207
+ return this
208
+ }
209
+ strokeRect(x: number, y: number, width: number, height: number) {
210
+ initRect(this.__useEl, this.__config, x, y, width, height)
211
+ stroke(this.__useEl, this.__config)
212
+ return this
213
+ }
214
+ fullRect(x: number, y: number, width: number, height: number) {
215
+ initRect(this.__useEl, this.__config, x, y, width, height)
216
+ full(this.__useEl, this.__config)
217
+ return this
218
+ }
219
+
220
+ // 路径
221
+ beginPath() {
222
+ this.__currentPosition = []
223
+ this.__path = ""
224
+ return this
225
+ }
226
+ closePath() {
227
+ this.__path += "Z"
228
+ return this
229
+ }
230
+ moveTo(x: number, y: number) {
231
+ this.__currentPosition = [x, y]
232
+
233
+ this.__path += "M" + x + " " + y
234
+ return this
235
+ }
236
+ lineTo(x: number, y: number) {
237
+ this.__currentPosition = [x, y]
238
+
239
+ this.__path += (this.__path == "" ? "M" : "L") + x + " " + y
240
+ return this
241
+ }
242
+ fill() {
243
+ initPath(this.__useEl, this.__path)
244
+ fill(this.__useEl, this.__config)
245
+ return this
246
+ }
247
+ stroke() {
248
+ initPath(this.__useEl, this.__path)
249
+ stroke(this.__useEl, this.__config)
250
+ return this
251
+ }
252
+ full() {
253
+ initPath(this.__useEl, this.__path)
254
+ full(this.__useEl, this.__config)
255
+ return this
256
+ }
257
+
258
+ arc(x: number, y: number, r: number, beginDeg: number, deg: number) {
259
+ const begPosition = rotate(x, y, (beginDeg / 180) * Math.PI, x + r, y)
260
+ const endPosition = rotate(
261
+ x,
262
+ y,
263
+ ((beginDeg + deg) / 180) * Math.PI,
264
+ x + r,
265
+ y
266
+ )
267
+ // 如果当前没有路径,说明是开始的,就移动到正确位置
268
+ if (this.__path == "") {
269
+ this.__path += "M" + begPosition[0] + "," + begPosition[1]
270
+ }
271
+ // 如果当前有路径,位置不正确,应该画到正确位置(和canvas保持一致)
272
+ else if (
273
+ begPosition[0] != this.__currentPosition[0] ||
274
+ begPosition[1] != this.__currentPosition[1]
275
+ ) {
276
+ this.__path += "L" + begPosition[0] + "," + begPosition[1]
277
+ }
278
+ this.__path +=
279
+ "A" +
280
+ r +
281
+ "," +
282
+ r +
283
+ " 0 " +
284
+ (deg > 180 || deg < -180 ? 1 : 0) +
285
+ "," +
286
+ (deg > 0 ? 1 : 0) +
287
+ " " +
288
+ endPosition[0] +
289
+ "," +
290
+ endPosition[1]
291
+ return this
292
+ }
293
+
294
+ // 路径 - 贝塞尔曲线
295
+ quadraticCurveTo(cpx: number, cpy: number, x: number, y: number) {
296
+ this.__path += "Q" + cpx + " " + cpy + "," + x + " " + y
297
+ return this
298
+ }
299
+ bezierCurveTo(
300
+ cp1x: number,
301
+ cp1y: number,
302
+ cp2x: number,
303
+ cp2y: number,
304
+ x: number,
305
+ y: number
306
+ ) {
307
+ this.__path +=
308
+ "C" + cp1x + " " + cp1y + "," + cp2x + " " + cp2y + "," + x + " " + y
309
+ return this
310
+ }
311
+
312
+ // 绑定事件
313
+ bind(eventType: string, callback: (event: Event, target: SVGElement) => void) {
314
+ this.__useEl.addEventListener(eventType, function (event: Event) {
315
+ callback.call(this, event, this)
316
+ }, false)
317
+ return this
318
+ }
319
+
320
+
321
+ // 线性渐变
322
+ createLinearGradient(x0: number, y0: number, x1: number, y1: number) {
323
+ return linearGradient(this.__svg, x0, y0, x1, y1)
324
+ }
325
+
326
+ // 环形渐变
327
+ createRadialGradient(cx: number, cy: number, r: number) {
328
+ return radialGradient(this.__svg, cx, cy, r)
329
+ }
330
+ }
331
+
332
+ export default SVG