vislite 0.5.2 → 0.6.0-alpha.0

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 (191) hide show
  1. package/.editorconfig +18 -18
  2. package/AUTHORS.txt +6 -6
  3. package/CHANGELOG +13 -1
  4. package/LICENSE +20 -20
  5. package/README.md +41 -2
  6. package/lib/Buffer/index.umd.js +2 -2
  7. package/lib/Buffer/index.umd.min.js +2 -2
  8. package/lib/Canvas/index.umd.js +8 -2
  9. package/lib/Canvas/index.umd.min.js +3 -3
  10. package/lib/Cardinal/index.umd.js +2 -2
  11. package/lib/Cardinal/index.umd.min.js +2 -2
  12. package/lib/Eoap/index.umd.js +2 -2
  13. package/lib/Eoap/index.umd.min.js +2 -2
  14. package/lib/Geometry/index.umd.js +2 -2
  15. package/lib/Geometry/index.umd.min.js +2 -2
  16. package/lib/Hermite/index.umd.js +2 -2
  17. package/lib/Hermite/index.umd.min.js +2 -2
  18. package/lib/Matrix4/index.umd.js +14 -8
  19. package/lib/Matrix4/index.umd.min.js +3 -3
  20. package/lib/Mercator/index.umd.js +2 -2
  21. package/lib/Mercator/index.umd.min.js +2 -2
  22. package/lib/OralCanvas/index.es.js +8 -2
  23. package/lib/OralCanvas/index.es.min.js +3 -3
  24. package/lib/OralWebGL/index.es.js +22 -16
  25. package/lib/OralWebGL/index.es.min.js +3 -3
  26. package/lib/SVG/index.umd.js +2 -2
  27. package/lib/SVG/index.umd.min.js +2 -2
  28. package/lib/Shader/index.umd.js +10 -10
  29. package/lib/Shader/index.umd.min.js +3 -3
  30. package/lib/Texture/index.umd.js +2 -2
  31. package/lib/Texture/index.umd.min.js +2 -2
  32. package/lib/TreeLayout/index.umd.js +2 -2
  33. package/lib/TreeLayout/index.umd.min.js +2 -2
  34. package/lib/WebGL/index.umd.js +22 -16
  35. package/lib/WebGL/index.umd.min.js +3 -3
  36. package/lib/animation/index.umd.js +2 -2
  37. package/lib/animation/index.umd.min.js +2 -2
  38. package/lib/formatColor/index.umd.js +2 -2
  39. package/lib/formatColor/index.umd.min.js +2 -2
  40. package/lib/getLoopColors/index.umd.js +2 -2
  41. package/lib/getLoopColors/index.umd.min.js +2 -2
  42. package/lib/getWebGLContext/index.umd.js +2 -2
  43. package/lib/getWebGLContext/index.umd.min.js +2 -2
  44. package/lib/index.umd.js +40 -16
  45. package/lib/index.umd.min.js +3 -3
  46. package/lib/move/index.umd.js +2 -2
  47. package/lib/move/index.umd.min.js +2 -2
  48. package/lib/resizeObserver/index.umd.js +2 -2
  49. package/lib/resizeObserver/index.umd.min.js +2 -2
  50. package/lib/rotate/index.umd.js +2 -2
  51. package/lib/rotate/index.umd.min.js +2 -2
  52. package/lib/ruler/index.umd.js +14 -2
  53. package/lib/ruler/index.umd.min.js +3 -3
  54. package/lib/scale/index.umd.js +2 -2
  55. package/lib/scale/index.umd.min.js +2 -2
  56. package/lib/throttle/index.umd.js +2 -2
  57. package/lib/throttle/index.umd.min.js +2 -2
  58. package/lib/viewHandler/index.umd.js +2 -2
  59. package/lib/viewHandler/index.umd.min.js +2 -2
  60. package/miniprogram/ui-canvas/index.js +107 -107
  61. package/miniprogram/ui-canvas/index.json +4 -4
  62. package/miniprogram/ui-canvas/index.wxml +4 -4
  63. package/miniprogram/ui-canvas/index.wxss +5 -5
  64. package/package/Buffer/index.ts +2 -2
  65. package/package/Canvas/index.ts +2 -2
  66. package/package/Cardinal/index.ts +2 -2
  67. package/package/Eoap/index.ts +2 -2
  68. package/package/Geometry/index.ts +2 -2
  69. package/package/Hermite/index.ts +2 -2
  70. package/package/Matrix4/index.ts +2 -2
  71. package/package/Mercator/index.ts +2 -2
  72. package/package/OralCanvas/index.ts +2 -2
  73. package/package/OralWebGL/index.ts +2 -2
  74. package/package/SVG/index.ts +2 -2
  75. package/package/Shader/index.ts +39 -39
  76. package/package/Texture/index.ts +2 -2
  77. package/package/TreeLayout/index.ts +1 -1
  78. package/package/WebGL/index.ts +2 -2
  79. package/package/animation/index.ts +2 -2
  80. package/package/formatColor/index.ts +2 -2
  81. package/package/getLoopColors/index.ts +2 -2
  82. package/package/getWebGLContext/index.ts +39 -39
  83. package/package/index.ts +76 -76
  84. package/package/move/index.ts +2 -2
  85. package/package/resizeObserver/index.ts +2 -2
  86. package/package/rotate/index.ts +2 -2
  87. package/package/ruler/index.ts +2 -2
  88. package/package/scale/index.ts +2 -2
  89. package/package/throttle/index.ts +2 -2
  90. package/package/viewHandler/index.ts +2 -2
  91. package/package.json +1 -1
  92. package/src/Canvas.ts +67 -67
  93. package/src/Eoap.ts +66 -66
  94. package/src/Geometry.ts +82 -82
  95. package/src/Matrix4/index.ts +14 -6
  96. package/src/Matrix4/move.ts +12 -12
  97. package/src/Matrix4/rotate.ts +15 -15
  98. package/src/Matrix4/scale.ts +11 -11
  99. package/src/Matrix4/transform.ts +64 -64
  100. package/src/Mercator.ts +27 -27
  101. package/src/SVG.ts +24 -24
  102. package/src/WebGL.ts +66 -66
  103. package/src/animation.ts +98 -98
  104. package/src/common/assemble.ts +22 -22
  105. package/src/common/canvas/arc.ts +50 -50
  106. package/src/common/canvas/config.ts +158 -158
  107. package/src/common/canvas/gradient.ts +29 -29
  108. package/src/common/canvas/index.ts +147 -139
  109. package/src/common/canvas/painter.ts +426 -426
  110. package/src/common/canvas/texts.ts +18 -18
  111. package/src/common/geometry/prism-horizontal.ts +33 -33
  112. package/src/common/geometry/prism-vertical.ts +40 -40
  113. package/src/common/geometry/sphere-fragment.ts +39 -39
  114. package/src/common/geometry/tool/circle.ts +11 -11
  115. package/src/common/mergeOption.ts +6 -6
  116. package/src/common/setStyle.ts +5 -5
  117. package/src/common/svg/config.ts +186 -186
  118. package/src/common/svg/gradient.ts +63 -63
  119. package/src/common/svg/index.ts +356 -356
  120. package/src/common/svg/tool.ts +44 -44
  121. package/src/common/tree/index.ts +25 -25
  122. package/src/common/tree/toInnerTree.ts +56 -56
  123. package/src/common/tree/toPlainTree.ts +131 -131
  124. package/src/common/webgl/buffer.ts +79 -79
  125. package/src/common/webgl/doDraw.ts +108 -108
  126. package/src/common/webgl/getColorFactory.ts +26 -26
  127. package/src/common/webgl/getShader.ts +48 -48
  128. package/src/common/webgl/getTexture.ts +11 -11
  129. package/src/common/webgl/getWebGLContext.ts +27 -27
  130. package/src/common/webgl/index.ts +223 -223
  131. package/src/common/webgl/shader.ts +75 -75
  132. package/src/common/webgl/texture.ts +96 -96
  133. package/src/formatColor.ts +44 -44
  134. package/src/getLoopColors.ts +42 -42
  135. package/src/interpolation/Cardinal.ts +110 -110
  136. package/src/interpolation/Hermite.ts +65 -65
  137. package/src/move.ts +7 -7
  138. package/src/resizeObserver.ts +36 -36
  139. package/src/rotate.ts +7 -7
  140. package/src/ruler.ts +23 -1
  141. package/src/scale.ts +6 -6
  142. package/src/shader/fsColor.c +7 -7
  143. package/src/shader/fsColors.c +7 -7
  144. package/src/shader/fsCube.c +8 -8
  145. package/src/shader/fsImage.c +8 -8
  146. package/src/shader/vsColor.c +17 -17
  147. package/src/shader/vsColors.c +13 -13
  148. package/src/shader/vsCube.c +13 -13
  149. package/src/shader/vsImage.c +13 -13
  150. package/src/throttle.ts +51 -51
  151. package/src/viewHandler.ts +158 -158
  152. package/types/Buffer.d.ts +23 -23
  153. package/types/Canvas.d.ts +8 -0
  154. package/types/CanvasConfig.d.ts +106 -106
  155. package/types/CanvasOption.d.ts +7 -7
  156. package/types/Cardinal.d.ts +13 -13
  157. package/types/Geometry.d.ts +40 -40
  158. package/types/GeometryOption.d.ts +11 -11
  159. package/types/GeometryResult.d.ts +18 -18
  160. package/types/Gradient.d.ts +14 -14
  161. package/types/Hermite.d.ts +18 -18
  162. package/types/Map.d.ts +9 -9
  163. package/types/Matrix4.d.ts +5 -0
  164. package/types/Object3D.d.ts +114 -114
  165. package/types/SVG.d.ts +238 -238
  166. package/types/SVGConfig.d.ts +76 -76
  167. package/types/Scene3D.d.ts +6 -6
  168. package/types/Shader.d.ts +21 -21
  169. package/types/Texture.d.ts +16 -16
  170. package/types/Tree.d.ts +69 -69
  171. package/types/TreeConfig.d.ts +24 -24
  172. package/types/TreeLayout.d.ts +54 -54
  173. package/types/TreeOption.d.ts +48 -48
  174. package/types/WebGL.d.ts +38 -38
  175. package/types/WebGLOption.d.ts +7 -7
  176. package/types/animation.d.ts +6 -6
  177. package/types/formatColor.d.ts +2 -2
  178. package/types/getLoopColors.d.ts +2 -2
  179. package/types/getWebGLContext.d.ts +2 -2
  180. package/types/index.d.ts +175 -175
  181. package/types/move.d.ts +2 -2
  182. package/types/painterConfig.d.ts +2 -2
  183. package/types/resizeObserver.d.ts +2 -2
  184. package/types/rotate.d.ts +2 -2
  185. package/types/ruler.d.ts +7 -7
  186. package/types/scale.d.ts +2 -2
  187. package/types/throttle.d.ts +4 -4
  188. package/types/throttleOption.d.ts +21 -21
  189. package/types/viewHandler.d.ts +13 -13
  190. package/uni-app/ui-canvas.vue +239 -206
  191. /package/src/{TreeLayout/index.ts → layout/TreeLayout.ts} +0 -0
package/src/animation.ts CHANGED
@@ -1,99 +1,99 @@
1
- //当前正在运动的动画的tick函数堆栈
2
- let $timers: any[] = []
3
- //唯一定时器的定时间隔
4
- let $interval = 13
5
- //定时器ID
6
- let $timerId: any
7
-
8
- /**
9
- * 动画轮播
10
- * @param {function} doback 轮询函数,有一个形参deep,0-1,表示执行进度
11
- * @param {number} duration 动画时长,可选
12
- * @param {function} callback 动画结束回调,可选,有一个形参deep,0-1,表示执行进度
13
- *
14
- * @returns {function} 返回一个函数,调用该函数,可以提前结束动画
15
- */
16
- export default function (doback: (deep: number) => void, duration: number = 400, callback: (deep: number) => void = () => { }): Function {
17
-
18
- let clock = {
19
- //把tick函数推入堆栈
20
- "timer": function (tick: (deep: number) => void, duration: number, callback: (deep: number) => void) {
21
- if (!tick) {
22
- throw new Error('Tick is required!')
23
- }
24
- let id = new Date().valueOf() + "_" + (Math.random() * 1000).toFixed(0)
25
- $timers.push({
26
- "id": id,
27
- "createTime": new Date(),
28
- "tick": tick,
29
- "duration": duration,
30
- "callback": callback
31
- });
32
- clock.start()
33
- return id
34
- },
35
-
36
- //开启唯一的定时器timerId
37
- "start": function () {
38
- if (!$timerId) {
39
- $timerId = setInterval(clock.tick, $interval)
40
- }
41
- },
42
-
43
- //被定时器调用,遍历timers堆栈
44
- "tick": function () {
45
- let createTime: Date, flag: number, tick: (deep: number) => void, callback: (deep: number) => void, timer: any, duration: number, passTime: number,
46
- timers: any[] = $timers
47
- $timers = []
48
- $timers.length = 0
49
- for (flag = 0; flag < timers.length; flag++) {
50
- //初始化数据
51
- timer = timers[flag]
52
- createTime = timer.createTime
53
- tick = timer.tick
54
- duration = timer.duration
55
- callback = timer.callback
56
-
57
- //执行
58
- passTime = (+new Date().valueOf() - createTime.valueOf()) / duration
59
- passTime = passTime > 1 ? 1 : passTime
60
- tick(passTime)
61
- if (passTime < 1 && timer.id) {
62
- //动画没有结束再添加
63
- $timers.push(timer)
64
- } else {
65
- callback(passTime)
66
- }
67
- }
68
- if ($timers.length <= 0) {
69
- clock.stop()
70
- }
71
- },
72
-
73
- //停止定时器,重置timerId=null
74
- "stop": function () {
75
- if ($timerId) {
76
- clearInterval($timerId)
77
- $timerId = null
78
- }
79
- }
80
- }
81
-
82
- let id = clock.timer(function (deep: number) {
83
- //其中deep为0-1,表示改变的程度
84
- doback(deep)
85
- }, duration, callback)
86
-
87
- // 返回一个函数
88
- // 用于在动画结束前结束动画
89
- return function () {
90
- let i: string
91
- for (i in $timers) {
92
- if ($timers[i].id == id) {
93
- $timers[i].id = void 0
94
- return
95
- }
96
- }
97
- }
98
-
1
+ //当前正在运动的动画的tick函数堆栈
2
+ let $timers: any[] = []
3
+ //唯一定时器的定时间隔
4
+ let $interval = 13
5
+ //定时器ID
6
+ let $timerId: any
7
+
8
+ /**
9
+ * 动画轮播
10
+ * @param {function} doback 轮询函数,有一个形参deep,0-1,表示执行进度
11
+ * @param {number} duration 动画时长,可选
12
+ * @param {function} callback 动画结束回调,可选,有一个形参deep,0-1,表示执行进度
13
+ *
14
+ * @returns {function} 返回一个函数,调用该函数,可以提前结束动画
15
+ */
16
+ export default function (doback: (deep: number) => void, duration: number = 400, callback: (deep: number) => void = () => { }): Function {
17
+
18
+ let clock = {
19
+ //把tick函数推入堆栈
20
+ "timer": function (tick: (deep: number) => void, duration: number, callback: (deep: number) => void) {
21
+ if (!tick) {
22
+ throw new Error('Tick is required!')
23
+ }
24
+ let id = new Date().valueOf() + "_" + (Math.random() * 1000).toFixed(0)
25
+ $timers.push({
26
+ "id": id,
27
+ "createTime": new Date(),
28
+ "tick": tick,
29
+ "duration": duration,
30
+ "callback": callback
31
+ });
32
+ clock.start()
33
+ return id
34
+ },
35
+
36
+ //开启唯一的定时器timerId
37
+ "start": function () {
38
+ if (!$timerId) {
39
+ $timerId = setInterval(clock.tick, $interval)
40
+ }
41
+ },
42
+
43
+ //被定时器调用,遍历timers堆栈
44
+ "tick": function () {
45
+ let createTime: Date, flag: number, tick: (deep: number) => void, callback: (deep: number) => void, timer: any, duration: number, passTime: number,
46
+ timers: any[] = $timers
47
+ $timers = []
48
+ $timers.length = 0
49
+ for (flag = 0; flag < timers.length; flag++) {
50
+ //初始化数据
51
+ timer = timers[flag]
52
+ createTime = timer.createTime
53
+ tick = timer.tick
54
+ duration = timer.duration
55
+ callback = timer.callback
56
+
57
+ //执行
58
+ passTime = (+new Date().valueOf() - createTime.valueOf()) / duration
59
+ passTime = passTime > 1 ? 1 : passTime
60
+ tick(passTime)
61
+ if (passTime < 1 && timer.id) {
62
+ //动画没有结束再添加
63
+ $timers.push(timer)
64
+ } else {
65
+ callback(passTime)
66
+ }
67
+ }
68
+ if ($timers.length <= 0) {
69
+ clock.stop()
70
+ }
71
+ },
72
+
73
+ //停止定时器,重置timerId=null
74
+ "stop": function () {
75
+ if ($timerId) {
76
+ clearInterval($timerId)
77
+ $timerId = null
78
+ }
79
+ }
80
+ }
81
+
82
+ let id = clock.timer(function (deep: number) {
83
+ //其中deep为0-1,表示改变的程度
84
+ doback(deep)
85
+ }, duration, callback)
86
+
87
+ // 返回一个函数
88
+ // 用于在动画结束前结束动画
89
+ return function () {
90
+ let i: string
91
+ for (i in $timers) {
92
+ if ($timers[i].id == id) {
93
+ $timers[i].id = void 0
94
+ return
95
+ }
96
+ }
97
+ }
98
+
99
99
  }
@@ -1,23 +1,23 @@
1
- export default function (begin: number, end: number, step: number, count: number) {
2
- let val = []
3
- for (let index = 0; index < count; index++) val[index] = begin
4
-
5
- // 非常类似进制数,每次调用都+1
6
- return function () {
7
- for (let i = 0; i < count; i++) {
8
-
9
- // 如果当前位可以进1
10
- if (val[i] + step < end) {
11
- val[i] = +(val[i] + step).toFixed(7)
12
- break
13
- }
14
-
15
- // 如果当前位不可以,那当前位归0,尝试下一位
16
- else if (i < count - 1) {
17
- val[i] = begin
18
- }
19
- }
20
-
21
- return val
22
- }
1
+ export default function (begin: number, end: number, step: number, count: number) {
2
+ let val = []
3
+ for (let index = 0; index < count; index++) val[index] = begin
4
+
5
+ // 非常类似进制数,每次调用都+1
6
+ return function () {
7
+ for (let i = 0; i < count; i++) {
8
+
9
+ // 如果当前位可以进1
10
+ if (val[i] + step < end) {
11
+ val[i] = +(val[i] + step).toFixed(7)
12
+ break
13
+ }
14
+
15
+ // 如果当前位不可以,那当前位归0,尝试下一位
16
+ else if (i < count - 1) {
17
+ val[i] = begin
18
+ }
19
+ }
20
+
21
+ return val
22
+ }
23
23
  }
@@ -1,50 +1,50 @@
1
-
2
- // 点(x,y)围绕中心(cx,cy)旋转deg度
3
-
4
- let rotate = function (cx: number, cy: number, deg: number, x: number, y: number) {
5
- let cos = Math.cos(deg), sin = Math.sin(deg)
6
- return [
7
- +((x - cx) * cos - (y - cy) * sin + cx).toFixed(7),
8
- +((x - cx) * sin + (y - cy) * cos + cy).toFixed(7)
9
- ]
10
- }
11
-
12
- // r1和r2,内半径和外半径
13
- // beginA起点弧度,rotateA旋转弧度式
14
-
15
- export default function (beginA: number, rotateA: number, cx: number, cy: number, r1: number, r2: number, doback: Function) {
16
-
17
- // 保证逆时针也是可以的
18
- if (rotateA < 0) {
19
- beginA += rotateA
20
- rotateA *= -1
21
- }
22
-
23
- let temp: number[] = [], p: number[]
24
-
25
- // 内部
26
- p = rotate(0, 0, beginA, r1, 0)
27
- temp[0] = p[0]
28
- temp[1] = p[1]
29
- p = rotate(0, 0, rotateA, p[0], p[1])
30
- temp[2] = p[0]
31
- temp[3] = p[1]
32
-
33
- // 外部
34
- p = rotate(0, 0, beginA, r2, 0)
35
- temp[4] = p[0]
36
- temp[5] = p[1]
37
- p = rotate(0, 0, rotateA, p[0], p[1])
38
- temp[6] = p[0]
39
- temp[7] = p[1]
40
-
41
- doback(
42
- beginA, beginA + rotateA,
43
- temp[0] + cx, temp[1] + cy,
44
- temp[4] + cx, temp[5] + cy,
45
- temp[2] + cx, temp[3] + cy,
46
- temp[6] + cx, temp[7] + cy,
47
- (r2 - r1) * 0.5
48
- )
49
-
50
- }
1
+
2
+ // 点(x,y)围绕中心(cx,cy)旋转deg度
3
+
4
+ let rotate = function (cx: number, cy: number, deg: number, x: number, y: number) {
5
+ let cos = Math.cos(deg), sin = Math.sin(deg)
6
+ return [
7
+ +((x - cx) * cos - (y - cy) * sin + cx).toFixed(7),
8
+ +((x - cx) * sin + (y - cy) * cos + cy).toFixed(7)
9
+ ]
10
+ }
11
+
12
+ // r1和r2,内半径和外半径
13
+ // beginA起点弧度,rotateA旋转弧度式
14
+
15
+ export default function (beginA: number, rotateA: number, cx: number, cy: number, r1: number, r2: number, doback: Function) {
16
+
17
+ // 保证逆时针也是可以的
18
+ if (rotateA < 0) {
19
+ beginA += rotateA
20
+ rotateA *= -1
21
+ }
22
+
23
+ let temp: number[] = [], p: number[]
24
+
25
+ // 内部
26
+ p = rotate(0, 0, beginA, r1, 0)
27
+ temp[0] = p[0]
28
+ temp[1] = p[1]
29
+ p = rotate(0, 0, rotateA, p[0], p[1])
30
+ temp[2] = p[0]
31
+ temp[3] = p[1]
32
+
33
+ // 外部
34
+ p = rotate(0, 0, beginA, r2, 0)
35
+ temp[4] = p[0]
36
+ temp[5] = p[1]
37
+ p = rotate(0, 0, rotateA, p[0], p[1])
38
+ temp[6] = p[0]
39
+ temp[7] = p[1]
40
+
41
+ doback(
42
+ beginA, beginA + rotateA,
43
+ temp[0] + cx, temp[1] + cy,
44
+ temp[4] + cx, temp[5] + cy,
45
+ temp[2] + cx, temp[3] + cy,
46
+ temp[6] + cx, temp[7] + cy,
47
+ (r2 - r1) * 0.5
48
+ )
49
+
50
+ }
@@ -1,158 +1,158 @@
1
- import type CanvasConfigType from "../../../types/CanvasConfig"
2
-
3
- import arc from "./arc"
4
-
5
- // 文字统一设置方法
6
- export let initText = function (
7
- painter: CanvasRenderingContext2D,
8
- config: CanvasConfigType,
9
- x: number,
10
- y: number,
11
- deg: number
12
- ) {
13
- painter.beginPath();
14
- painter.translate(x, y);
15
- painter.rotate(deg);
16
- painter.font =
17
- config.fontStyle +
18
- " " +
19
- config.fontWeight +
20
- " " +
21
- config.fontSize +
22
- "px " +
23
- config.fontFamily;
24
- return painter
25
- }
26
-
27
- // 画弧统一设置方法
28
- export let initArc = function (
29
- painter: CanvasRenderingContext2D,
30
- config: CanvasConfigType,
31
- cx: number,
32
- cy: number,
33
- r1: number,
34
- r2: number,
35
- beginDeg: number,
36
- deg: number
37
- ) {
38
- if (r1 > r2) {
39
- let temp = r1
40
- r1 = r2
41
- r2 = temp
42
- }
43
-
44
- beginDeg = beginDeg % (Math.PI * 2)
45
-
46
- // 当|deg|>=2π的时候都认为是一个圆环
47
- // 为什么不取2π比较,是怕部分浏览器浮点不精确
48
- if (deg >= Math.PI * 1.999999 || deg <= -Math.PI * 1.999999) {
49
- deg = Math.PI * 2
50
- } else {
51
- deg = deg % (Math.PI * 2)
52
- }
53
-
54
- arc(
55
- beginDeg,
56
- deg,
57
- cx,
58
- cy,
59
- r1,
60
- r2,
61
- function (
62
- beginA: number,
63
- endA: number,
64
- begInnerX: number,
65
- begInnerY: number,
66
- begOuterX: number,
67
- begOuterY: number,
68
- endInnerX: number,
69
- endInnerY: number,
70
- endOuterX: number,
71
- endOuterY: number,
72
- r: number
73
- ) {
74
- if (r < 0) r = -r
75
- painter.beginPath()
76
- painter.moveTo(begInnerX, begInnerY)
77
- painter.arc(
78
- // (圆心x,圆心y,半径,开始角度,结束角度,true逆时针/false顺时针)
79
- cx,
80
- cy,
81
- r1,
82
- beginA,
83
- endA,
84
- false
85
- )
86
- // 结尾
87
- if (config.arcEndCap == "round")
88
- painter.arc(
89
- (endInnerX + endOuterX) * 0.5,
90
- (endInnerY + endOuterY) * 0.5,
91
- r,
92
- endA - Math.PI,
93
- endA,
94
- true
95
- )
96
- else if (config.arcEndCap == "-round")
97
- painter.arc(
98
- (endInnerX + endOuterX) * 0.5,
99
- (endInnerY + endOuterY) * 0.5,
100
- r,
101
- endA - Math.PI,
102
- endA,
103
- false
104
- )
105
- else painter.lineTo(endOuterX, endOuterY)
106
-
107
- painter.arc(cx, cy, r2, endA, beginA, true)
108
- // 开头
109
- if (config.arcStartCap == "round")
110
- painter.arc(
111
- (begInnerX + begOuterX) * 0.5,
112
- (begInnerY + begOuterY) * 0.5,
113
- r,
114
- beginA,
115
- beginA - Math.PI,
116
- true
117
- )
118
- else if (config.arcStartCap == "-round")
119
- painter.arc(
120
- (begInnerX + begOuterX) * 0.5,
121
- (begInnerY + begOuterY) * 0.5,
122
- r,
123
- beginA,
124
- beginA - Math.PI,
125
- false
126
- )
127
- else painter.lineTo(begInnerX, begInnerY)
128
- }
129
- )
130
- if (config.arcStartCap == "butt") painter.closePath()
131
- return painter
132
- }
133
-
134
- // 画圆统一设置方法
135
- export let initCircle = function (
136
- painter: CanvasRenderingContext2D,
137
- cx: number,
138
- cy: number,
139
- r: number
140
- ) {
141
- painter.beginPath()
142
- painter.moveTo(cx + r, cy)
143
- painter.arc(cx, cy, r, 0, Math.PI * 2)
144
- return painter
145
- };
146
-
147
- // 画矩形统一设置方法
148
- export let initRect = function (
149
- painter: CanvasRenderingContext2D,
150
- x: number,
151
- y: number,
152
- width: number,
153
- height: number
154
- ) {
155
- painter.beginPath()
156
- painter.rect(x, y, width, height)
157
- return painter
158
- }
1
+ import type CanvasConfigType from "../../../types/CanvasConfig"
2
+
3
+ import arc from "./arc"
4
+
5
+ // 文字统一设置方法
6
+ export let initText = function (
7
+ painter: CanvasRenderingContext2D,
8
+ config: CanvasConfigType,
9
+ x: number,
10
+ y: number,
11
+ deg: number
12
+ ) {
13
+ painter.beginPath();
14
+ painter.translate(x, y);
15
+ painter.rotate(deg);
16
+ painter.font =
17
+ config.fontStyle +
18
+ " " +
19
+ config.fontWeight +
20
+ " " +
21
+ config.fontSize +
22
+ "px " +
23
+ config.fontFamily;
24
+ return painter
25
+ }
26
+
27
+ // 画弧统一设置方法
28
+ export let initArc = function (
29
+ painter: CanvasRenderingContext2D,
30
+ config: CanvasConfigType,
31
+ cx: number,
32
+ cy: number,
33
+ r1: number,
34
+ r2: number,
35
+ beginDeg: number,
36
+ deg: number
37
+ ) {
38
+ if (r1 > r2) {
39
+ let temp = r1
40
+ r1 = r2
41
+ r2 = temp
42
+ }
43
+
44
+ beginDeg = beginDeg % (Math.PI * 2)
45
+
46
+ // 当|deg|>=2π的时候都认为是一个圆环
47
+ // 为什么不取2π比较,是怕部分浏览器浮点不精确
48
+ if (deg >= Math.PI * 1.999999 || deg <= -Math.PI * 1.999999) {
49
+ deg = Math.PI * 2
50
+ } else {
51
+ deg = deg % (Math.PI * 2)
52
+ }
53
+
54
+ arc(
55
+ beginDeg,
56
+ deg,
57
+ cx,
58
+ cy,
59
+ r1,
60
+ r2,
61
+ function (
62
+ beginA: number,
63
+ endA: number,
64
+ begInnerX: number,
65
+ begInnerY: number,
66
+ begOuterX: number,
67
+ begOuterY: number,
68
+ endInnerX: number,
69
+ endInnerY: number,
70
+ endOuterX: number,
71
+ endOuterY: number,
72
+ r: number
73
+ ) {
74
+ if (r < 0) r = -r
75
+ painter.beginPath()
76
+ painter.moveTo(begInnerX, begInnerY)
77
+ painter.arc(
78
+ // (圆心x,圆心y,半径,开始角度,结束角度,true逆时针/false顺时针)
79
+ cx,
80
+ cy,
81
+ r1,
82
+ beginA,
83
+ endA,
84
+ false
85
+ )
86
+ // 结尾
87
+ if (config.arcEndCap == "round")
88
+ painter.arc(
89
+ (endInnerX + endOuterX) * 0.5,
90
+ (endInnerY + endOuterY) * 0.5,
91
+ r,
92
+ endA - Math.PI,
93
+ endA,
94
+ true
95
+ )
96
+ else if (config.arcEndCap == "-round")
97
+ painter.arc(
98
+ (endInnerX + endOuterX) * 0.5,
99
+ (endInnerY + endOuterY) * 0.5,
100
+ r,
101
+ endA - Math.PI,
102
+ endA,
103
+ false
104
+ )
105
+ else painter.lineTo(endOuterX, endOuterY)
106
+
107
+ painter.arc(cx, cy, r2, endA, beginA, true)
108
+ // 开头
109
+ if (config.arcStartCap == "round")
110
+ painter.arc(
111
+ (begInnerX + begOuterX) * 0.5,
112
+ (begInnerY + begOuterY) * 0.5,
113
+ r,
114
+ beginA,
115
+ beginA - Math.PI,
116
+ true
117
+ )
118
+ else if (config.arcStartCap == "-round")
119
+ painter.arc(
120
+ (begInnerX + begOuterX) * 0.5,
121
+ (begInnerY + begOuterY) * 0.5,
122
+ r,
123
+ beginA,
124
+ beginA - Math.PI,
125
+ false
126
+ )
127
+ else painter.lineTo(begInnerX, begInnerY)
128
+ }
129
+ )
130
+ if (config.arcStartCap == "butt") painter.closePath()
131
+ return painter
132
+ }
133
+
134
+ // 画圆统一设置方法
135
+ export let initCircle = function (
136
+ painter: CanvasRenderingContext2D,
137
+ cx: number,
138
+ cy: number,
139
+ r: number
140
+ ) {
141
+ painter.beginPath()
142
+ painter.moveTo(cx + r, cy)
143
+ painter.arc(cx, cy, r, 0, Math.PI * 2)
144
+ return painter
145
+ };
146
+
147
+ // 画矩形统一设置方法
148
+ export let initRect = function (
149
+ painter: CanvasRenderingContext2D,
150
+ x: number,
151
+ y: number,
152
+ width: number,
153
+ height: number
154
+ ) {
155
+ painter.beginPath()
156
+ painter.rect(x, y, width, height)
157
+ return painter
158
+ }