vislite 0.1.0 → 0.2.0-alpha.7

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 (112) hide show
  1. package/AUTHORS.txt +6 -6
  2. package/CHANGELOG +24 -1
  3. package/LICENSE +20 -20
  4. package/README.md +53 -38
  5. package/lib/Canvas/index.umd.js +135 -46
  6. package/lib/Canvas/index.umd.min.js +7 -3
  7. package/lib/Cardinal/index.umd.js +6 -2
  8. package/lib/Cardinal/index.umd.min.js +6 -2
  9. package/lib/Eoap/index.umd.js +9 -5
  10. package/lib/Eoap/index.umd.min.js +6 -2
  11. package/lib/Hermite/index.umd.js +6 -2
  12. package/lib/Hermite/index.umd.min.js +6 -2
  13. package/lib/Matrix4/index.umd.js +6 -2
  14. package/lib/Matrix4/index.umd.min.js +6 -2
  15. package/lib/Mercator/index.umd.js +42 -0
  16. package/lib/Mercator/index.umd.min.js +15 -0
  17. package/lib/OralCanvas/index.es.js +124 -44
  18. package/lib/OralCanvas/index.es.min.js +7 -3
  19. package/lib/OralWebGL/index.es.js +567 -0
  20. package/lib/OralWebGL/index.es.min.js +15 -0
  21. package/lib/SVG/index.umd.js +16 -5
  22. package/lib/SVG/index.umd.min.js +7 -3
  23. package/lib/WebGL/index.umd.js +626 -0
  24. package/lib/WebGL/index.umd.min.js +15 -0
  25. package/lib/animation/index.umd.js +6 -2
  26. package/lib/animation/index.umd.min.js +6 -2
  27. package/lib/getLoopColors/index.umd.js +6 -2
  28. package/lib/getLoopColors/index.umd.min.js +6 -2
  29. package/lib/index.umd.js +1514 -863
  30. package/lib/index.umd.min.js +7 -3
  31. package/lib/rotate/index.umd.js +6 -2
  32. package/lib/rotate/index.umd.min.js +6 -2
  33. package/lib/ruler/index.umd.js +6 -2
  34. package/lib/ruler/index.umd.min.js +6 -2
  35. package/lib/viewHandler/index.umd.js +129 -0
  36. package/lib/viewHandler/index.umd.min.js +15 -0
  37. package/miniprogram/ui-canvas/index.js +18 -3
  38. package/miniprogram/ui-canvas/index.json +4 -4
  39. package/miniprogram/ui-canvas/index.wxml +4 -4
  40. package/miniprogram/ui-canvas/index.wxss +5 -5
  41. package/package/Canvas/index.ts +1 -1
  42. package/package/Cardinal/index.ts +2 -2
  43. package/package/Eoap/index.ts +2 -2
  44. package/package/Hermite/index.ts +2 -2
  45. package/package/Matrix4/index.ts +2 -2
  46. package/package/Mercator/index.ts +3 -0
  47. package/package/OralCanvas/index.ts +1 -1
  48. package/package/OralWebGL/index.ts +2 -0
  49. package/package/SVG/index.ts +2 -2
  50. package/package/WebGL/index.ts +2 -0
  51. package/package/animation/index.ts +2 -2
  52. package/package/getLoopColors/index.ts +2 -2
  53. package/package/index.ts +32 -9
  54. package/package/rotate/index.ts +2 -2
  55. package/package/ruler/index.ts +2 -2
  56. package/package/viewHandler/index.ts +3 -0
  57. package/package.json +11 -2
  58. package/src/Canvas.ts +10 -1
  59. package/src/Eoap.ts +5 -5
  60. package/src/Matrix4/index.ts +76 -76
  61. package/src/Matrix4/move.ts +12 -12
  62. package/src/Matrix4/rotate.ts +15 -15
  63. package/src/Matrix4/scale.ts +11 -11
  64. package/src/Matrix4/transform.ts +64 -64
  65. package/src/Mercator.ts +27 -0
  66. package/src/SVG.ts +1 -1
  67. package/src/WebGL.ts +53 -0
  68. package/src/animation.ts +99 -99
  69. package/src/common/assemble.ts +23 -0
  70. package/src/common/canvas/arc.ts +50 -50
  71. package/src/common/canvas/config.ts +7 -6
  72. package/src/common/canvas/index.ts +29 -28
  73. package/src/common/canvas/painter.ts +51 -8
  74. package/src/common/canvas/texts.ts +19 -0
  75. package/src/common/setStyle.ts +5 -5
  76. package/src/common/svg/config.ts +127 -126
  77. package/src/common/svg/index.ts +13 -3
  78. package/src/common/svg/tool.ts +43 -42
  79. package/src/common/webgl/buffer.ts +80 -0
  80. package/src/common/webgl/doDraw.ts +97 -0
  81. package/src/common/webgl/getColorFactory.ts +27 -0
  82. package/src/common/webgl/getShader.ts +62 -0
  83. package/src/common/webgl/getTexture.ts +12 -0
  84. package/src/common/webgl/getWebGLContext.ts +28 -0
  85. package/src/common/webgl/index.ts +212 -0
  86. package/src/common/webgl/shader.ts +76 -0
  87. package/src/common/webgl/texture.ts +99 -0
  88. package/src/getLoopColors.ts +42 -42
  89. package/src/interpolation/Cardinal.ts +91 -91
  90. package/src/interpolation/Hermite.ts +65 -65
  91. package/src/rotate.ts +7 -7
  92. package/src/ruler.ts +99 -99
  93. package/src/viewHandler.ts +140 -0
  94. package/types/Canvas.d.ts +220 -283
  95. package/types/CanvasConfig.d.ts +81 -0
  96. package/types/Cardinal.d.ts +13 -13
  97. package/types/Hermite.d.ts +18 -18
  98. package/types/Map.d.ts +10 -0
  99. package/types/Matrix4.d.ts +42 -42
  100. package/types/Object3D.d.ts +106 -0
  101. package/types/SVG.d.ts +210 -264
  102. package/types/SVGConfig.d.ts +59 -0
  103. package/types/Scene3D.d.ts +7 -0
  104. package/types/WebGL.d.ts +29 -0
  105. package/types/animation.d.ts +6 -6
  106. package/types/getLoopColors.d.ts +2 -2
  107. package/types/index.d.ts +70 -26
  108. package/types/rotate.d.ts +2 -2
  109. package/types/ruler.d.ts +2 -2
  110. package/types/viewHandler.d.ts +13 -0
  111. package/uni-app/ui-canvas.vue +94 -20
  112. package/types/Eoap.d.ts +0 -10
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vislite",
3
- "version": "0.1.0",
3
+ "version": "0.2.0-alpha.7",
4
4
  "description": "灵活、快速、简单的数据可视化交互式跨端前端库",
5
5
  "main": "./lib/index.umd.min.js",
6
6
  "typings": "./types/index.d.ts",
@@ -18,6 +18,15 @@
18
18
  "url": "git+https://github.com/oi-contrib/VISLite.git"
19
19
  },
20
20
  "keywords": [
21
+ "svg",
22
+ "webgl",
23
+ "typescript",
24
+ "canvas",
25
+ "vue",
26
+ "uniapp",
27
+ "miniprogram",
28
+ "image2d",
29
+ "image3d",
21
30
  "vislite"
22
31
  ],
23
32
  "author": {
@@ -46,4 +55,4 @@
46
55
  "webpack-cli": "^4.9.2",
47
56
  "webpack-dev-server": "^4.7.4"
48
57
  }
49
- }
58
+ }
package/src/Canvas.ts CHANGED
@@ -2,6 +2,7 @@ import CanvasType from '../types/Canvas'
2
2
  import OralCanvas from './common/canvas/index'
3
3
 
4
4
  class Canvas extends OralCanvas implements CanvasType {
5
+ private __canvas: HTMLCanvasElement
5
6
  constructor(el: HTMLElement | null) {
6
7
  if (!el) {
7
8
  throw new Error("VISLite Canvas:The mount point requires an HTMLElement type but encountered null.")
@@ -28,7 +29,7 @@ class Canvas extends OralCanvas implements CanvasType {
28
29
 
29
30
  _el._vislite_canvas_ = [ViewCanvas, RegionCanvas]
30
31
 
31
- el.setAttribute('vislite', 'inited')
32
+ el.setAttribute('vislite', 'Canvas')
32
33
  }
33
34
 
34
35
  // 设置画布大小
@@ -42,6 +43,14 @@ class Canvas extends OralCanvas implements CanvasType {
42
43
  }
43
44
 
44
45
  super(ViewCanvas, RegionCanvas)
46
+
47
+ this.__canvas = ViewCanvas
48
+ }
49
+
50
+ toDataURL(): Promise<string> {
51
+ return new Promise(resolve => {
52
+ resolve(this.__canvas.toDataURL())
53
+ })
45
54
  }
46
55
  }
47
56
 
package/src/Eoap.ts CHANGED
@@ -1,4 +1,4 @@
1
- import EoapType from '../types/Eoap'
1
+ import MapType from '../types/Map'
2
2
 
3
3
  // 围绕X轴旋转
4
4
  let rotateX = function (deg: number, x: number, y: number, z: number) {
@@ -19,7 +19,7 @@ let rotateZ = function (deg: number, x: number, y: number, z: number) {
19
19
  }
20
20
 
21
21
  /* 等角斜方位投影 */
22
- class Eoap implements EoapType {
22
+ class Eoap implements MapType {
23
23
  readonly name: string = 'Eoap'
24
24
 
25
25
  private __scale: number // 缩放比例
@@ -30,7 +30,7 @@ class Eoap implements EoapType {
30
30
  this.__center = center
31
31
  }
32
32
 
33
- use(longitude: number, latitude: number) {
33
+ use(λ: number, φ: number) {
34
34
  /**
35
35
  * 通过旋转的方法
36
36
  * 先旋转出点的位置
@@ -50,8 +50,8 @@ class Eoap implements EoapType {
50
50
  * 【除了经度为0的位置,不然纬度的旋转会改变原来的经度值,反过来不会】
51
51
  *
52
52
  */
53
- let p = rotateY((360 - latitude) / 180 * Math.PI, 100 * this.__scale, 0, 0)
54
- p = rotateZ(longitude / 180 * Math.PI, p[0], p[1], p[2])
53
+ let p = rotateY((360 - φ) / 180 * Math.PI, 100 * this.__scale, 0, 0)
54
+ p = rotateZ(λ / 180 * Math.PI, p[0], p[1], p[2])
55
55
  p = rotateZ((90 - this.__center[0]) / 180 * Math.PI, p[0], p[1], p[2])
56
56
  p = rotateX((90 - this.__center[1]) / 180 * Math.PI, p[0], p[1], p[2])
57
57
 
@@ -1,77 +1,77 @@
1
- import Matrix4Type from '../../types/Matrix4'
2
-
3
- // 两个4x4矩阵相乘
4
- // 或矩阵和齐次坐标相乘
5
- let _multiply = function (matrix4: number[], param: number[]) {
6
- let 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
- class Matrix4 implements Matrix4Type {
25
- readonly name: string = 'Matrix4'
26
-
27
- private __matrix4: number[]
28
-
29
- constructor(initMatrix4: number[] = [
30
- 1, 0, 0, 0,
31
- 0, 1, 0, 0,
32
- 0, 0, 1, 0,
33
- 0, 0, 0, 1
34
- ]) {
35
- this.__matrix4 = initMatrix4
36
- }
37
-
38
- // 移动
39
- move(dis: number, a: number, b: number, c: number = 0) {
40
- this.__matrix4 = _multiply(_move(dis, a, b, c), this.__matrix4)
41
- return this
42
- }
43
-
44
- // 旋转
45
- rotate(deg: number, a1: number, b1: number, c1?: number, a2?: number, b2?: number, c2?: number) {
46
- let matrix4s = _transform(a1, b1, c1, a2, b2, c2)
47
- this.__matrix4 = _multiply(_multiply(_multiply(matrix4s[1], _rotate(deg)), matrix4s[0]), this.__matrix4)
48
- return this
49
- }
50
-
51
- // 缩放
52
- scale(xTimes: number, yTimes: number, zTimes: number, cx: number = 0, cy: number = 0, cz: number = 0) {
53
- this.__matrix4 = _multiply(_scale(xTimes, yTimes, zTimes, cx, cy, cz), this.__matrix4)
54
- return this
55
- }
56
-
57
- // 乘法
58
- // 可以传入一个矩阵(matrix4,flag)
59
- multiply(newMatrix4: number[], flag: boolean = false) {
60
- this.__matrix4 = flag ? _multiply(this.__matrix4, newMatrix4) : _multiply(newMatrix4, this.__matrix4)
61
- return this
62
- }
63
-
64
- // 对一个坐标应用变换
65
- // 齐次坐标(x,y,z,w)
66
- use(x: number, y: number, z: number = 0, w: number = 1) {
67
- // w为0表示点位于无穷远处,忽略
68
- return _multiply(this.__matrix4, [x, y, z, w])
69
- }
70
-
71
- // 矩阵的值
72
- value() {
73
- return this.__matrix4
74
- }
75
- }
76
-
1
+ import Matrix4Type from '../../types/Matrix4'
2
+
3
+ // 两个4x4矩阵相乘
4
+ // 或矩阵和齐次坐标相乘
5
+ let _multiply = function (matrix4: number[], param: number[]) {
6
+ let 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
+ class Matrix4 implements Matrix4Type {
25
+ readonly name: string = 'Matrix4'
26
+
27
+ private __matrix4: number[]
28
+
29
+ constructor(initMatrix4: number[] = [
30
+ 1, 0, 0, 0,
31
+ 0, 1, 0, 0,
32
+ 0, 0, 1, 0,
33
+ 0, 0, 0, 1
34
+ ]) {
35
+ this.__matrix4 = initMatrix4
36
+ }
37
+
38
+ // 移动
39
+ move(dis: number, a: number, b: number, c: number = 0) {
40
+ this.__matrix4 = _multiply(_move(dis, a, b, c), this.__matrix4)
41
+ return this
42
+ }
43
+
44
+ // 旋转
45
+ rotate(deg: number, a1: number, b1: number, c1?: number, a2?: number, b2?: number, c2?: number) {
46
+ let matrix4s = _transform(a1, b1, c1, a2, b2, c2)
47
+ this.__matrix4 = _multiply(_multiply(_multiply(matrix4s[1], _rotate(deg)), matrix4s[0]), this.__matrix4)
48
+ return this
49
+ }
50
+
51
+ // 缩放
52
+ scale(xTimes: number, yTimes: number, zTimes: number, cx: number = 0, cy: number = 0, cz: number = 0) {
53
+ this.__matrix4 = _multiply(_scale(xTimes, yTimes, zTimes, cx, cy, cz), this.__matrix4)
54
+ return this
55
+ }
56
+
57
+ // 乘法
58
+ // 可以传入一个矩阵(matrix4,flag)
59
+ multiply(newMatrix4: number[], flag: boolean = false) {
60
+ this.__matrix4 = flag ? _multiply(this.__matrix4, newMatrix4) : _multiply(newMatrix4, this.__matrix4)
61
+ return this
62
+ }
63
+
64
+ // 对一个坐标应用变换
65
+ // 齐次坐标(x,y,z,w)
66
+ use(x: number, y: number, z: number = 0, w: number = 1) {
67
+ // w为0表示点位于无穷远处,忽略
68
+ return _multiply(this.__matrix4, [x, y, z, w])
69
+ }
70
+
71
+ // 矩阵的值
72
+ value() {
73
+ return this.__matrix4
74
+ }
75
+ }
76
+
77
77
  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
- let 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
+ let 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
- * 围绕0Z轴旋转
3
- * 其它的旋转可以借助transform实现
4
- * 旋转角度单位采用弧度制
5
- */
6
- export default function (deg: number) {
7
- let 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
+ * 围绕0Z轴旋转
3
+ * 其它的旋转可以借助transform实现
4
+ * 旋转角度单位采用弧度制
5
+ */
6
+ export default function (deg: number) {
7
+ let 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
- let 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
+ let 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
+ }
@@ -0,0 +1,27 @@
1
+ import MapType from '../types/Map'
2
+
3
+ /* 墨卡托投影 */
4
+ class Mercator implements MapType {
5
+ readonly name: string = 'Mercator'
6
+
7
+ use: (λ: number, φ: number) => number[]
8
+ constructor(scale: number = 7, center: number[] = [107, 36]) {
9
+
10
+ let perimeter = 100 * scale * Math.PI // 半周长
11
+
12
+ let help = perimeter / 180
13
+
14
+ let cx = help * center[0] // 中心横坐标
15
+ let cy = -1 * help * center[1] // 中心纵坐标
16
+
17
+ this.use = (λ: number, φ: number) => {
18
+ return [
19
+ (help * λ - cx) * 0.8,
20
+ -1 * help * φ - cy
21
+ ]
22
+ }
23
+ }
24
+
25
+ }
26
+
27
+ export default Mercator
package/src/SVG.ts CHANGED
@@ -4,7 +4,7 @@ import OralSVG from './common/svg/index'
4
4
  class SVG extends OralSVG implements SVGType {
5
5
  constructor(el: HTMLElement | null) {
6
6
  if (!el) {
7
- throw new Error("VISLite SVG :The mount point requires an HTMLElement type but encountered null.")
7
+ throw new Error("VISLite SVG:The mount point requires an HTMLElement type but encountered null.")
8
8
  }
9
9
 
10
10
  let width = el.clientWidth, height = el.clientHeight
package/src/WebGL.ts ADDED
@@ -0,0 +1,53 @@
1
+ import WebGLType from '../types/WebGL'
2
+ import OralWebGL from './common/webgl/index'
3
+
4
+ class WebGL extends OralWebGL implements WebGLType {
5
+ constructor(el: HTMLElement | null) {
6
+ if (!el) {
7
+ throw new Error("VISLite WebGL:The mount point requires an HTMLElement type but encountered null.")
8
+ }
9
+
10
+ let width = el.clientWidth, height = el.clientHeight
11
+
12
+ let ViewCanvas: HTMLCanvasElement, RegionCanvas: HTMLCanvasElement
13
+
14
+ let _el = el as any
15
+
16
+ // 如果已经初始化过了
17
+ if (_el._vislite_canvas_) {
18
+ ViewCanvas = _el._vislite_canvas_[0]
19
+ RegionCanvas = _el._vislite_canvas_[1]
20
+ }
21
+
22
+ // 否则就初始化
23
+ else {
24
+
25
+ RegionCanvas = document.createElement('canvas')
26
+ el.appendChild(RegionCanvas)
27
+
28
+ RegionCanvas.style.position = 'absolute'
29
+ RegionCanvas.style.zIndex = "-1"
30
+
31
+ ViewCanvas = document.createElement('canvas')
32
+ el.appendChild(ViewCanvas)
33
+
34
+ _el._vislite_canvas_ = [ViewCanvas, RegionCanvas]
35
+
36
+ el.setAttribute('vislite', 'WebGL')
37
+ }
38
+
39
+ // 设置画布大小
40
+ for (let canvas of [ViewCanvas, RegionCanvas]) {
41
+
42
+ canvas.style.width = width + "px"
43
+ canvas.setAttribute('width', width + "")
44
+
45
+ canvas.style.height = height + "px"
46
+ canvas.setAttribute('height', height + "")
47
+ }
48
+
49
+ super(ViewCanvas, RegionCanvas)
50
+ }
51
+ }
52
+
53
+ export default WebGL