vislite 1.3.0 → 1.4.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/AUTHORS.txt +6 -6
  2. package/CHANGELOG +12 -5
  3. package/LICENSE +20 -20
  4. package/README.md +284 -284
  5. package/lib/BarLayout/index.es.d.ts +3 -0
  6. package/lib/BarLayout/index.es.js +467 -0
  7. package/lib/BarLayout/index.es.min.d.ts +3 -0
  8. package/lib/BarLayout/index.es.min.js +10 -0
  9. package/lib/Buffer/index.es.js +1 -1
  10. package/lib/Buffer/index.es.min.js +1 -1
  11. package/lib/Canvas/index.es.js +2 -2
  12. package/lib/Canvas/index.es.min.js +1 -1
  13. package/lib/Cardinal/index.es.js +1 -1
  14. package/lib/Cardinal/index.es.min.js +1 -1
  15. package/lib/Eoap/index.es.js +1 -1
  16. package/lib/Eoap/index.es.min.js +1 -1
  17. package/lib/Hermite/index.es.js +1 -1
  18. package/lib/Hermite/index.es.min.js +1 -1
  19. package/lib/MapCoordinate/index.es.js +1 -1
  20. package/lib/MapCoordinate/index.es.min.js +1 -1
  21. package/lib/Matrix4/index.es.js +1 -1
  22. package/lib/Matrix4/index.es.min.js +1 -1
  23. package/lib/Mercator/index.es.js +1 -1
  24. package/lib/Mercator/index.es.min.js +1 -1
  25. package/lib/PieLayout/index.es.d.ts +3 -0
  26. package/lib/PieLayout/index.es.js +234 -0
  27. package/lib/PieLayout/index.es.min.d.ts +3 -0
  28. package/lib/PieLayout/index.es.min.js +9 -0
  29. package/lib/RawCanvas/index.es.js +2 -2
  30. package/lib/RawCanvas/index.es.min.js +1 -1
  31. package/lib/SVG/index.es.js +29 -6
  32. package/lib/SVG/index.es.min.js +2 -2
  33. package/lib/Shader/index.es.js +1 -1
  34. package/lib/Shader/index.es.min.js +1 -1
  35. package/lib/Texture/index.es.js +1 -1
  36. package/lib/Texture/index.es.min.js +1 -1
  37. package/lib/TreeLayout/index.es.js +109 -102
  38. package/lib/TreeLayout/index.es.min.js +6 -2
  39. package/lib/animation/index.es.js +114 -103
  40. package/lib/animation/index.es.min.js +6 -2
  41. package/lib/assemble/index.es.js +1 -1
  42. package/lib/assemble/index.es.min.js +1 -1
  43. package/lib/getLoopColors/index.es.js +1 -1
  44. package/lib/getLoopColors/index.es.min.js +1 -1
  45. package/lib/getWebGLContext/index.es.js +1 -1
  46. package/lib/getWebGLContext/index.es.min.js +1 -1
  47. package/lib/index.umd.js +510 -158
  48. package/lib/index.umd.min.js +12 -2
  49. package/lib/initOption/index.es.js +1 -1
  50. package/lib/initOption/index.es.min.js +1 -1
  51. package/lib/mergeOption/index.es.js +1 -1
  52. package/lib/mergeOption/index.es.min.js +1 -1
  53. package/lib/move/index.es.js +1 -1
  54. package/lib/move/index.es.min.js +1 -1
  55. package/lib/rotate/index.es.js +1 -1
  56. package/lib/rotate/index.es.min.js +1 -1
  57. package/lib/ruler/index.es.js +1 -1
  58. package/lib/ruler/index.es.min.js +1 -1
  59. package/lib/scale/index.es.js +1 -1
  60. package/lib/scale/index.es.min.js +1 -1
  61. package/lib/throttle/index.es.js +55 -50
  62. package/lib/throttle/index.es.min.js +5 -1
  63. package/minialipay/ui-canvas/drawImage.js +35 -35
  64. package/minialipay/ui-canvas/index.acss +4 -4
  65. package/minialipay/ui-canvas/index.axml +3 -3
  66. package/minialipay/ui-canvas/index.d.ts +1 -1
  67. package/minialipay/ui-canvas/index.js +100 -100
  68. package/minialipay/ui-canvas/index.json +6 -6
  69. package/miniprogram/ui-canvas/drawImage.js +35 -35
  70. package/miniprogram/ui-canvas/index.js +117 -117
  71. package/miniprogram/ui-canvas/index.json +4 -4
  72. package/miniprogram/ui-canvas/index.wxml +4 -4
  73. package/miniprogram/ui-canvas/index.wxss +5 -5
  74. package/package/BarLayout/index.ts +3 -0
  75. package/package/Buffer/index.ts +2 -2
  76. package/package/Canvas/index.ts +2 -2
  77. package/package/Cardinal/index.ts +2 -2
  78. package/package/Eoap/index.ts +2 -2
  79. package/package/Hermite/index.ts +2 -2
  80. package/package/MapCoordinate/index.ts +2 -2
  81. package/package/Matrix4/index.ts +2 -2
  82. package/package/Mercator/index.ts +2 -2
  83. package/package/PieLayout/index.ts +3 -0
  84. package/package/RawCanvas/index.ts +2 -2
  85. package/package/SVG/index.ts +2 -2
  86. package/package/Shader/index.ts +2 -2
  87. package/package/Texture/index.ts +2 -2
  88. package/package/TreeLayout/index.ts +2 -2
  89. package/package/animation/index.ts +5 -2
  90. package/package/assemble/index.ts +2 -2
  91. package/package/getLoopColors/index.ts +2 -2
  92. package/package/getWebGLContext/index.ts +40 -40
  93. package/package/index.ts +4 -0
  94. package/package/initOption/index.ts +2 -2
  95. package/package/mergeOption/index.ts +2 -2
  96. package/package/move/index.ts +2 -2
  97. package/package/rotate/index.ts +2 -2
  98. package/package/ruler/index.ts +2 -2
  99. package/package/scale/index.ts +2 -2
  100. package/package/throttle/index.ts +1 -1
  101. package/package.json +3 -3
  102. package/src/Canvas.ts +84 -84
  103. package/src/Eoap.ts +66 -66
  104. package/src/Matrix4/index.ts +84 -84
  105. package/src/Matrix4/move.ts +12 -12
  106. package/src/Matrix4/rotate.ts +15 -15
  107. package/src/Matrix4/scale.ts +11 -11
  108. package/src/Matrix4/transform.ts +64 -64
  109. package/src/Mercator.ts +27 -27
  110. package/src/SVG.ts +31 -0
  111. package/src/common/assemble.ts +22 -22
  112. package/src/common/canvas/arc.ts +51 -51
  113. package/src/common/canvas/config.ts +176 -176
  114. package/src/common/canvas/default.ts +64 -64
  115. package/src/common/canvas/gradient.ts +1 -1
  116. package/src/common/canvas/index.ts +188 -188
  117. package/src/common/canvas/painter.ts +443 -443
  118. package/src/common/canvas/texts.ts +18 -18
  119. package/src/common/map/getBoundary.ts +15 -15
  120. package/src/common/map/tool.ts +29 -29
  121. package/src/common/option.ts +29 -29
  122. package/src/common/setStyle.ts +5 -5
  123. package/src/common/svg/config.ts +213 -213
  124. package/src/common/svg/default.ts +2 -2
  125. package/src/common/svg/gradient.ts +2 -2
  126. package/src/common/svg/index.ts +1 -1
  127. package/src/common/svg/tool.ts +51 -51
  128. package/src/common/tree/index.ts +25 -25
  129. package/src/common/tree/toInnerTree.ts +61 -61
  130. package/src/common/tree/toPlainTree.ts +3 -0
  131. package/src/common/type.ts +26 -26
  132. package/src/common/webgl/buffer.ts +79 -79
  133. package/src/common/webgl/getWebGLContext.ts +45 -45
  134. package/src/common/webgl/shader.ts +75 -75
  135. package/src/common/webgl/texture.ts +1 -0
  136. package/src/coordinate/MapCoordinate.ts +80 -80
  137. package/src/getLoopColors.ts +42 -42
  138. package/src/interpolation/Cardinal.ts +110 -110
  139. package/src/interpolation/Hermite.ts +65 -65
  140. package/src/layout/BarLayout.ts +249 -0
  141. package/src/layout/PieLayout.ts +142 -0
  142. package/src/layout/TreeLayout.ts +4 -1
  143. package/src/move.ts +7 -7
  144. package/src/rotate.ts +7 -7
  145. package/src/ruler.ts +209 -209
  146. package/src/scale.ts +6 -6
  147. package/types/Bar.d.ts +92 -0
  148. package/types/BarConfig.d.ts +5 -0
  149. package/types/BarLayout.d.ts +49 -0
  150. package/types/BarOption.d.ts +32 -0
  151. package/types/Buffer.d.ts +23 -23
  152. package/types/Canvas.d.ts +352 -352
  153. package/types/CanvasConfig.d.ts +88 -88
  154. package/types/CanvasOption.d.ts +8 -8
  155. package/types/CanvasOpts.d.ts +9 -9
  156. package/types/Cardinal.d.ts +13 -13
  157. package/types/Gradient.d.ts +14 -14
  158. package/types/Hermite.d.ts +18 -18
  159. package/types/Map.d.ts +9 -9
  160. package/types/MapConfig.d.ts +27 -27
  161. package/types/MapCoordinate.d.ts +22 -22
  162. package/types/Matrix4.d.ts +47 -47
  163. package/types/Pie.d.ts +74 -0
  164. package/types/PieConfig.d.ts +27 -0
  165. package/types/PieLayout.d.ts +41 -0
  166. package/types/PieOption.d.ts +22 -0
  167. package/types/SVG.d.ts +4 -0
  168. package/types/SVGConfig.d.ts +71 -71
  169. package/types/Shader.d.ts +16 -16
  170. package/types/Texture.d.ts +16 -16
  171. package/types/Tree.d.ts +74 -74
  172. package/types/TreeConfig.d.ts +36 -36
  173. package/types/TreeLayout.d.ts +59 -59
  174. package/types/TreeOption.d.ts +48 -48
  175. package/types/animation.d.ts +7 -1
  176. package/types/assemble.d.ts +5 -5
  177. package/types/getLoopColors.d.ts +5 -5
  178. package/types/getWebGLContext.d.ts +7 -7
  179. package/types/index.d.ts +16 -0
  180. package/types/move.d.ts +5 -5
  181. package/types/option.d.ts +12 -12
  182. package/types/painterConfig.d.ts +4 -4
  183. package/types/rotate.d.ts +5 -5
  184. package/types/ruler.d.ts +10 -10
  185. package/types/scale.d.ts +5 -5
  186. package/types/throttle.d.ts +1 -1
  187. package/types/throttleOption.d.ts +1 -1
  188. package/types/ui-canvas.d.ts +4 -4
  189. package/types/uni-canvas.d.ts +3 -3
  190. package/uni-app/drawImage.js +19 -19
  191. package/uni-app/ui-canvas.vue +284 -284
@@ -1,85 +1,85 @@
1
- import type Matrix4Type from '../../types/Matrix4'
2
-
3
- // 两个4x4矩阵相乘
4
- // 或矩阵和齐次坐标相乘
5
- const _multiply = function (matrix4: number[], param: number[]) {
6
- const newParam: number[] = []
7
- for (let i = 0; i < 4; i++)
8
- for (let j = 0; j < param.length / 4; j++)
9
- newParam[j * 4 + i] =
10
- matrix4[i] * param[j * 4] +
11
- matrix4[i + 4] * param[j * 4 + 1] +
12
- matrix4[i + 8] * param[j * 4 + 2] +
13
- matrix4[i + 12] * param[j * 4 + 3]
14
- return newParam
15
- }
16
-
17
- import _move from './move'
18
- import _rotate from './rotate'
19
- import _scale from './scale'
20
- import _transform from './transform'
21
-
22
- // 列主序存储的4x4矩阵
23
-
24
- const __initMatrix4 = [
25
- 1, 0, 0, 0,
26
- 0, 1, 0, 0,
27
- 0, 0, 1, 0,
28
- 0, 0, 0, 1
29
- ]
30
-
31
- class Matrix4 implements Matrix4Type {
32
- readonly name: string = 'Matrix4'
33
-
34
- private __matrix4: number[]
35
-
36
- constructor(initMatrix4: number[] = __initMatrix4) {
37
- this.__matrix4 = initMatrix4
38
- }
39
-
40
- // 设置内置矩阵
41
- setValue(initMatrix4: number[] = __initMatrix4) {
42
- this.__matrix4 = initMatrix4
43
- return this
44
- }
45
-
46
- // 移动
47
- move(dis: number, a: number, b: number, c: number = 0) {
48
- this.__matrix4 = _multiply(_move(dis, a, b, c), this.__matrix4)
49
- return this
50
- }
51
-
52
- // 旋转
53
- rotate(deg: number, a1: number, b1: number, c1?: number, a2?: number, b2?: number, c2?: number) {
54
- const matrix4s = _transform(a1, b1, c1, a2, b2, c2)
55
- this.__matrix4 = _multiply(_multiply(_multiply(matrix4s[1], _rotate(deg)), matrix4s[0]), this.__matrix4)
56
- return this
57
- }
58
-
59
- // 缩放
60
- scale(xTimes: number, yTimes: number, zTimes: number, cx: number = 0, cy: number = 0, cz: number = 0) {
61
- this.__matrix4 = _multiply(_scale(xTimes, yTimes, zTimes, cx, cy, cz), this.__matrix4)
62
- return this
63
- }
64
-
65
- // 乘法
66
- // 可以传入一个矩阵(matrix4,flag)
67
- multiply(newMatrix4: number[], flag: boolean = false) {
68
- this.__matrix4 = flag ? _multiply(this.__matrix4, newMatrix4) : _multiply(newMatrix4, this.__matrix4)
69
- return this
70
- }
71
-
72
- // 对一个坐标应用变换
73
- // 齐次坐标(x,y,z,w)
74
- use(x: number, y: number, z: number = 0, w: number = 1): [number, number, number, number] {
75
- // w为0表示点位于无穷远处,忽略
76
- return _multiply(this.__matrix4, [x, y, z, w]) as [number, number, number, number]
77
- }
78
-
79
- // 矩阵的值
80
- value() {
81
- return this.__matrix4
82
- }
83
- }
84
-
1
+ import type Matrix4Type from '../../types/Matrix4'
2
+
3
+ // 两个4x4矩阵相乘
4
+ // 或矩阵和齐次坐标相乘
5
+ const _multiply = function (matrix4: number[], param: number[]) {
6
+ const newParam: number[] = []
7
+ for (let i = 0; i < 4; i++)
8
+ for (let j = 0; j < param.length / 4; j++)
9
+ newParam[j * 4 + i] =
10
+ matrix4[i] * param[j * 4] +
11
+ matrix4[i + 4] * param[j * 4 + 1] +
12
+ matrix4[i + 8] * param[j * 4 + 2] +
13
+ matrix4[i + 12] * param[j * 4 + 3]
14
+ return newParam
15
+ }
16
+
17
+ import _move from './move'
18
+ import _rotate from './rotate'
19
+ import _scale from './scale'
20
+ import _transform from './transform'
21
+
22
+ // 列主序存储的4x4矩阵
23
+
24
+ const __initMatrix4 = [
25
+ 1, 0, 0, 0,
26
+ 0, 1, 0, 0,
27
+ 0, 0, 1, 0,
28
+ 0, 0, 0, 1
29
+ ]
30
+
31
+ class Matrix4 implements Matrix4Type {
32
+ readonly name: string = 'Matrix4'
33
+
34
+ private __matrix4: number[]
35
+
36
+ constructor(initMatrix4: number[] = __initMatrix4) {
37
+ this.__matrix4 = initMatrix4
38
+ }
39
+
40
+ // 设置内置矩阵
41
+ setValue(initMatrix4: number[] = __initMatrix4) {
42
+ this.__matrix4 = initMatrix4
43
+ return this
44
+ }
45
+
46
+ // 移动
47
+ move(dis: number, a: number, b: number, c: number = 0) {
48
+ this.__matrix4 = _multiply(_move(dis, a, b, c), this.__matrix4)
49
+ return this
50
+ }
51
+
52
+ // 旋转
53
+ rotate(deg: number, a1: number, b1: number, c1?: number, a2?: number, b2?: number, c2?: number) {
54
+ const matrix4s = _transform(a1, b1, c1, a2, b2, c2)
55
+ this.__matrix4 = _multiply(_multiply(_multiply(matrix4s[1], _rotate(deg)), matrix4s[0]), this.__matrix4)
56
+ return this
57
+ }
58
+
59
+ // 缩放
60
+ scale(xTimes: number, yTimes: number, zTimes: number, cx: number = 0, cy: number = 0, cz: number = 0) {
61
+ this.__matrix4 = _multiply(_scale(xTimes, yTimes, zTimes, cx, cy, cz), this.__matrix4)
62
+ return this
63
+ }
64
+
65
+ // 乘法
66
+ // 可以传入一个矩阵(matrix4,flag)
67
+ multiply(newMatrix4: number[], flag: boolean = false) {
68
+ this.__matrix4 = flag ? _multiply(this.__matrix4, newMatrix4) : _multiply(newMatrix4, this.__matrix4)
69
+ return this
70
+ }
71
+
72
+ // 对一个坐标应用变换
73
+ // 齐次坐标(x,y,z,w)
74
+ use(x: number, y: number, z: number = 0, w: number = 1): [number, number, number, number] {
75
+ // w为0表示点位于无穷远处,忽略
76
+ return _multiply(this.__matrix4, [x, y, z, w]) as [number, number, number, number]
77
+ }
78
+
79
+ // 矩阵的值
80
+ value() {
81
+ return this.__matrix4
82
+ }
83
+ }
84
+
85
85
  export default Matrix4
@@ -1,12 +1,12 @@
1
- /**
2
- * 在(a,b,c)方向位移d
3
- */
4
- export default function (d: number, a: number, b: number, c: number = 0) {
5
- const sqrt = Math.sqrt(a * a + b * b + c * c)
6
- return [
7
- 1, 0, 0, 0,
8
- 0, 1, 0, 0,
9
- 0, 0, 1, 0,
10
- a * d / sqrt, b * d / sqrt, c * d / sqrt, 1
11
- ]
12
- }
1
+ /**
2
+ * 在(a,b,c)方向位移d
3
+ */
4
+ export default function (d: number, a: number, b: number, c: number = 0) {
5
+ const sqrt = Math.sqrt(a * a + b * b + c * c)
6
+ return [
7
+ 1, 0, 0, 0,
8
+ 0, 1, 0, 0,
9
+ 0, 0, 1, 0,
10
+ a * d / sqrt, b * d / sqrt, c * d / sqrt, 1
11
+ ]
12
+ }
@@ -1,15 +1,15 @@
1
- /**
2
- * 围绕OZ轴旋转
3
- * 其它的旋转可以借助transform实现
4
- * 旋转角度单位采用弧度制
5
- */
6
- export default function (deg: number) {
7
- const sin = Math.sin(deg),
8
- cos = Math.cos(deg)
9
- return [
10
- cos, sin, 0, 0,
11
- -sin, cos, 0, 0,
12
- 0, 0, 1, 0,
13
- 0, 0, 0, 1
14
- ]
15
- }
1
+ /**
2
+ * 围绕OZ轴旋转
3
+ * 其它的旋转可以借助transform实现
4
+ * 旋转角度单位采用弧度制
5
+ */
6
+ export default function (deg: number) {
7
+ const sin = Math.sin(deg),
8
+ cos = Math.cos(deg)
9
+ return [
10
+ cos, sin, 0, 0,
11
+ -sin, cos, 0, 0,
12
+ 0, 0, 1, 0,
13
+ 0, 0, 0, 1
14
+ ]
15
+ }
@@ -1,11 +1,11 @@
1
- /**
2
- * 围绕圆心x、y和z分别缩放xTimes, yTimes和zTimes倍
3
- */
4
- export default function (xTimes: number, yTimes: number, zTimes: number, cx: number = 0, cy: number = 0, cz: number = 0) {
5
- return [
6
- xTimes, 0, 0, 0,
7
- 0, yTimes, 0, 0,
8
- 0, 0, zTimes, 0,
9
- cx - cx * xTimes, cy - cy * yTimes, cz - cz * zTimes, 1
10
- ]
11
- }
1
+ /**
2
+ * 围绕圆心x、y和z分别缩放xTimes, yTimes和zTimes倍
3
+ */
4
+ export default function (xTimes: number, yTimes: number, zTimes: number, cx: number = 0, cy: number = 0, cz: number = 0) {
5
+ return [
6
+ xTimes, 0, 0, 0,
7
+ 0, yTimes, 0, 0,
8
+ 0, 0, zTimes, 0,
9
+ cx - cx * xTimes, cy - cy * yTimes, cz - cz * zTimes, 1
10
+ ]
11
+ }
@@ -1,64 +1,64 @@
1
- /**
2
- * 针对任意射线(a1,b1,c1)->(a2,b2,c2)
3
- * 计算出两个变换矩阵
4
- * 分别为:任意射线变成OZ轴变换矩阵 + OZ轴变回原来的射线的变换矩阵
5
- */
6
- export default function (a1: number, b1: number, c1?: number, a2?: number, b2?: number, c2?: number) {
7
-
8
- if (typeof a1 === 'number' && typeof b1 === 'number') {
9
-
10
- // 如果设置两个点
11
- // 表示二维上围绕某个点旋转
12
- if (typeof c1 !== 'number') {
13
- c1 = 0
14
- a2 = a1
15
- b2 = b1
16
- c2 = 1
17
- }
18
- // 只设置三个点(设置不足六个点都认为只设置了三个点)
19
- // 表示围绕从原点出发的射线旋转
20
- else if (typeof a2 !== 'number' || typeof b2 !== 'number' || typeof c2 !== 'number') {
21
- a2 = a1
22
- b2 = b1
23
- c2 = c1
24
- a1 = 0
25
- b1 = 0
26
- c1 = 0
27
- }
28
-
29
- if (a1 == a2 && b1 == b2 && c1 == c2) throw new Error('It\'s not a legitimate ray!')
30
-
31
- const sqrt1 = Math.sqrt((a2 - a1) * (a2 - a1) + (b2 - b1) * (b2 - b1)),
32
- cos1 = sqrt1 != 0 ? (b2 - b1) / sqrt1 : 1,
33
- sin1 = sqrt1 != 0 ? (a2 - a1) / sqrt1 : 0,
34
-
35
- b = (a2 - a1) * sin1 + (b2 - b1) * cos1,
36
- c = c2 - c1,
37
-
38
- sqrt2 = Math.sqrt(b * b + c * c),
39
- cos2 = sqrt2 != 0 ? c / sqrt2 : 1,
40
- sin2 = sqrt2 != 0 ? b / sqrt2 : 0
41
-
42
- return [
43
-
44
- // 任意射线变成OZ轴变换矩阵
45
- [
46
- cos1, cos2 * sin1, sin1 * sin2, 0,
47
- -sin1, cos1 * cos2, cos1 * sin2, 0,
48
- 0, -sin2, cos2, 0,
49
- b1 * sin1 - a1 * cos1, c1 * sin2 - a1 * sin1 * cos2 - b1 * cos1 * cos2, -a1 * sin1 * sin2 - b1 * cos1 * sin2 - c1 * cos2, 1
50
- ],
51
-
52
- // OZ轴变回原来的射线的变换矩阵
53
- [
54
- cos1, -sin1, 0, 0,
55
- cos2 * sin1, cos2 * cos1, -sin2, 0,
56
- sin1 * sin2, cos1 * sin2, cos2, 0,
57
- a1, b1, c1, 1
58
- ]
59
-
60
- ]
61
- } else {
62
- throw new Error('a1 and b1 is required!')
63
- }
64
- }
1
+ /**
2
+ * 针对任意射线(a1,b1,c1)->(a2,b2,c2)
3
+ * 计算出两个变换矩阵
4
+ * 分别为:任意射线变成OZ轴变换矩阵 + OZ轴变回原来的射线的变换矩阵
5
+ */
6
+ export default function (a1: number, b1: number, c1?: number, a2?: number, b2?: number, c2?: number) {
7
+
8
+ if (typeof a1 === 'number' && typeof b1 === 'number') {
9
+
10
+ // 如果设置两个点
11
+ // 表示二维上围绕某个点旋转
12
+ if (typeof c1 !== 'number') {
13
+ c1 = 0
14
+ a2 = a1
15
+ b2 = b1
16
+ c2 = 1
17
+ }
18
+ // 只设置三个点(设置不足六个点都认为只设置了三个点)
19
+ // 表示围绕从原点出发的射线旋转
20
+ else if (typeof a2 !== 'number' || typeof b2 !== 'number' || typeof c2 !== 'number') {
21
+ a2 = a1
22
+ b2 = b1
23
+ c2 = c1
24
+ a1 = 0
25
+ b1 = 0
26
+ c1 = 0
27
+ }
28
+
29
+ if (a1 == a2 && b1 == b2 && c1 == c2) throw new Error('It\'s not a legitimate ray!')
30
+
31
+ const sqrt1 = Math.sqrt((a2 - a1) * (a2 - a1) + (b2 - b1) * (b2 - b1)),
32
+ cos1 = sqrt1 != 0 ? (b2 - b1) / sqrt1 : 1,
33
+ sin1 = sqrt1 != 0 ? (a2 - a1) / sqrt1 : 0,
34
+
35
+ b = (a2 - a1) * sin1 + (b2 - b1) * cos1,
36
+ c = c2 - c1,
37
+
38
+ sqrt2 = Math.sqrt(b * b + c * c),
39
+ cos2 = sqrt2 != 0 ? c / sqrt2 : 1,
40
+ sin2 = sqrt2 != 0 ? b / sqrt2 : 0
41
+
42
+ return [
43
+
44
+ // 任意射线变成OZ轴变换矩阵
45
+ [
46
+ cos1, cos2 * sin1, sin1 * sin2, 0,
47
+ -sin1, cos1 * cos2, cos1 * sin2, 0,
48
+ 0, -sin2, cos2, 0,
49
+ b1 * sin1 - a1 * cos1, c1 * sin2 - a1 * sin1 * cos2 - b1 * cos1 * cos2, -a1 * sin1 * sin2 - b1 * cos1 * sin2 - c1 * cos2, 1
50
+ ],
51
+
52
+ // OZ轴变回原来的射线的变换矩阵
53
+ [
54
+ cos1, -sin1, 0, 0,
55
+ cos2 * sin1, cos2 * cos1, -sin2, 0,
56
+ sin1 * sin2, cos1 * sin2, cos2, 0,
57
+ a1, b1, c1, 1
58
+ ]
59
+
60
+ ]
61
+ } else {
62
+ throw new Error('a1 and b1 is required!')
63
+ }
64
+ }
package/src/Mercator.ts CHANGED
@@ -1,28 +1,28 @@
1
- import type MapType from '../types/Map'
2
-
3
- /* 墨卡托投影 */
4
- class Mercator implements MapType {
5
- readonly name: string = 'Mercator'
6
-
7
- use: (λ: number, φ: number) => [number, number, number]
8
- constructor(scale: number = 7, center: number[] = [107, 36]) {
9
-
10
- const perimeter = 100 * scale * Math.PI // 半周长
11
-
12
- const help = perimeter / 180
13
-
14
- const cx = help * center[0] // 中心横坐标
15
- const cy = -1 * help * center[1] // 中心纵坐标
16
-
17
- this.use = (λ: number, φ: number) => {
18
- return [
19
- (help * λ - cx) * 0.8,
20
- -1 * help * φ - cy,
21
- 0
22
- ]
23
- }
24
- }
25
-
26
- }
27
-
1
+ import type MapType from '../types/Map'
2
+
3
+ /* 墨卡托投影 */
4
+ class Mercator implements MapType {
5
+ readonly name: string = 'Mercator'
6
+
7
+ use: (λ: number, φ: number) => [number, number, number]
8
+ constructor(scale: number = 7, center: number[] = [107, 36]) {
9
+
10
+ const perimeter = 100 * scale * Math.PI // 半周长
11
+
12
+ const help = perimeter / 180
13
+
14
+ const cx = help * center[0] // 中心横坐标
15
+ const cy = -1 * help * center[1] // 中心纵坐标
16
+
17
+ this.use = (λ: number, φ: number) => {
18
+ return [
19
+ (help * λ - cx) * 0.8,
20
+ -1 * help * φ - cy,
21
+ 0
22
+ ]
23
+ }
24
+ }
25
+
26
+ }
27
+
28
28
  export default Mercator
package/src/SVG.ts CHANGED
@@ -3,6 +3,7 @@ import type SVGType from '../types/SVG'
3
3
  import OralSVG from './common/svg/index'
4
4
 
5
5
  class SVG extends OralSVG implements SVGType {
6
+ private __el: HTMLElement
6
7
  constructor(el: HTMLElement | null) {
7
8
  if (!el) {
8
9
  throw new Error("VISLite SVG:The mount point requires an HTMLElement type but encountered null.")
@@ -19,6 +20,36 @@ class SVG extends OralSVG implements SVGType {
19
20
  ViewSVG.setAttribute("viewBox", "0 0 " + width + " " + height)
20
21
 
21
22
  super(ViewSVG)
23
+
24
+ this.__el = el
25
+ }
26
+
27
+ toDataURL(): Promise<string> {
28
+ return new Promise(resolve => {
29
+ const width = this.__el.clientWidth, height = this.__el.clientHeight
30
+
31
+ let img = document.createElement('img');
32
+
33
+ img.setAttribute('width', width + "");
34
+ img.setAttribute('height', height + "");
35
+ let base64_svg = "data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' width='" + width + "' height='" + height + "'>" + this.__svg.innerHTML.replace(/"/g, "'") + "</svg>";
36
+ img.setAttribute('src', base64_svg);
37
+
38
+ setTimeout(function () {
39
+
40
+ // 准备画布
41
+ let canvas = document.createElement('canvas');
42
+ canvas.setAttribute('width', width + "");
43
+ canvas.setAttribute('height', height + "");
44
+
45
+ let painter = canvas.getContext('2d');
46
+
47
+ // 绘制截图
48
+ if (painter) painter.drawImage(img, 0, 0, width, height);
49
+
50
+ resolve(canvas.toDataURL());
51
+ }, 100);
52
+ })
22
53
  }
23
54
  }
24
55
 
@@ -1,23 +1,23 @@
1
- export default function (begin: number, end: number, step: number, count: number) {
2
- const val: Array<number> = []
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
+ const val: Array<number> = []
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,51 +1,51 @@
1
-
2
- // 点(x,y)围绕中心(cx,cy)旋转deg度
3
-
4
- const rotate = function (cx: number, cy: number, deg: number, x: number, y: number) {
5
- const 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
- const temp: number[] = []
24
- let p: number[]
25
-
26
- // 内部
27
- p = rotate(0, 0, beginA, r1, 0)
28
- temp[0] = p[0]
29
- temp[1] = p[1]
30
- p = rotate(0, 0, rotateA, p[0], p[1])
31
- temp[2] = p[0]
32
- temp[3] = p[1]
33
-
34
- // 外部
35
- p = rotate(0, 0, beginA, r2, 0)
36
- temp[4] = p[0]
37
- temp[5] = p[1]
38
- p = rotate(0, 0, rotateA, p[0], p[1])
39
- temp[6] = p[0]
40
- temp[7] = p[1]
41
-
42
- doback(
43
- beginA, beginA + rotateA,
44
- temp[0] + cx, temp[1] + cy,
45
- temp[4] + cx, temp[5] + cy,
46
- temp[2] + cx, temp[3] + cy,
47
- temp[6] + cx, temp[7] + cy,
48
- (r2 - r1) * 0.5
49
- )
50
-
51
- }
1
+
2
+ // 点(x,y)围绕中心(cx,cy)旋转deg度
3
+
4
+ const rotate = function (cx: number, cy: number, deg: number, x: number, y: number) {
5
+ const 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
+ const temp: number[] = []
24
+ let p: number[]
25
+
26
+ // 内部
27
+ p = rotate(0, 0, beginA, r1, 0)
28
+ temp[0] = p[0]
29
+ temp[1] = p[1]
30
+ p = rotate(0, 0, rotateA, p[0], p[1])
31
+ temp[2] = p[0]
32
+ temp[3] = p[1]
33
+
34
+ // 外部
35
+ p = rotate(0, 0, beginA, r2, 0)
36
+ temp[4] = p[0]
37
+ temp[5] = p[1]
38
+ p = rotate(0, 0, rotateA, p[0], p[1])
39
+ temp[6] = p[0]
40
+ temp[7] = p[1]
41
+
42
+ doback(
43
+ beginA, beginA + rotateA,
44
+ temp[0] + cx, temp[1] + cy,
45
+ temp[4] + cx, temp[5] + cy,
46
+ temp[2] + cx, temp[3] + cy,
47
+ temp[6] + cx, temp[7] + cy,
48
+ (r2 - r1) * 0.5
49
+ )
50
+
51
+ }