vislite 0.5.2 → 0.6.0-alpha.2
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.
- package/.editorconfig +18 -18
- package/.eslintrc.js +24 -0
- package/AUTHORS.txt +6 -6
- package/CHANGELOG +15 -1
- package/LICENSE +20 -20
- package/README.md +41 -2
- package/lib/Buffer/index.umd.js +2 -2
- package/lib/Buffer/index.umd.min.js +2 -2
- package/lib/Canvas/index.umd.js +19 -8
- package/lib/Canvas/index.umd.min.js +3 -3
- package/lib/Cardinal/index.umd.js +2 -2
- package/lib/Cardinal/index.umd.min.js +2 -2
- package/lib/Eoap/index.umd.js +2 -2
- package/lib/Eoap/index.umd.min.js +2 -2
- package/lib/Geometry/index.umd.js +7 -4
- package/lib/Geometry/index.umd.min.js +2 -2
- package/lib/Hermite/index.umd.js +2 -2
- package/lib/Hermite/index.umd.min.js +2 -2
- package/lib/Matrix4/index.umd.js +14 -8
- package/lib/Matrix4/index.umd.min.js +3 -3
- package/lib/Mercator/index.umd.js +2 -2
- package/lib/Mercator/index.umd.min.js +2 -2
- package/lib/OralCanvas/index.es.js +14 -6
- package/lib/OralCanvas/index.es.min.js +3 -3
- package/lib/OralWebGL/index.es.js +27 -19
- package/lib/OralWebGL/index.es.min.js +3 -3
- package/lib/SVG/index.umd.js +6 -4
- package/lib/SVG/index.umd.min.js +2 -2
- package/lib/Shader/index.umd.js +10 -10
- package/lib/Shader/index.umd.min.js +3 -3
- package/lib/Texture/index.umd.js +4 -3
- package/lib/Texture/index.umd.min.js +2 -2
- package/lib/TreeLayout/index.umd.js +8 -5
- package/lib/TreeLayout/index.umd.min.js +2 -2
- package/lib/WebGL/index.umd.js +27 -19
- package/lib/WebGL/index.umd.min.js +3 -3
- package/lib/animation/index.umd.js +4 -3
- package/lib/animation/index.umd.min.js +2 -2
- package/lib/formatColor/index.umd.js +2 -2
- package/lib/formatColor/index.umd.min.js +2 -2
- package/lib/getLoopColors/index.umd.js +2 -2
- package/lib/getLoopColors/index.umd.min.js +2 -2
- package/lib/getWebGLContext/index.umd.js +4 -3
- package/lib/getWebGLContext/index.umd.min.js +2 -2
- package/lib/index.umd.js +73 -34
- package/lib/index.umd.min.js +3 -3
- package/lib/move/index.umd.js +2 -2
- package/lib/move/index.umd.min.js +2 -2
- package/lib/resizeObserver/index.umd.js +4 -3
- package/lib/resizeObserver/index.umd.min.js +2 -2
- package/lib/rotate/index.umd.js +2 -2
- package/lib/rotate/index.umd.min.js +2 -2
- package/lib/ruler/index.umd.js +14 -2
- package/lib/ruler/index.umd.min.js +3 -3
- package/lib/scale/index.umd.js +2 -2
- package/lib/scale/index.umd.min.js +2 -2
- package/lib/throttle/index.umd.js +2 -2
- package/lib/throttle/index.umd.min.js +2 -2
- package/lib/viewHandler/index.umd.js +4 -4
- package/lib/viewHandler/index.umd.min.js +3 -3
- package/miniprogram/ui-canvas/index.js +107 -107
- package/miniprogram/ui-canvas/index.json +4 -4
- package/miniprogram/ui-canvas/index.wxml +4 -4
- package/miniprogram/ui-canvas/index.wxss +5 -5
- package/package/Buffer/index.ts +2 -2
- package/package/Canvas/index.ts +2 -2
- package/package/Cardinal/index.ts +2 -2
- package/package/Eoap/index.ts +2 -2
- package/package/Geometry/index.ts +2 -2
- package/package/Hermite/index.ts +2 -2
- package/package/Matrix4/index.ts +2 -2
- package/package/Mercator/index.ts +2 -2
- package/package/OralCanvas/index.ts +2 -2
- package/package/OralWebGL/index.ts +2 -2
- package/package/SVG/index.ts +2 -2
- package/package/Shader/index.ts +39 -39
- package/package/Texture/index.ts +2 -2
- package/package/TreeLayout/index.ts +1 -1
- package/package/WebGL/index.ts +2 -2
- package/package/animation/index.ts +2 -2
- package/package/formatColor/index.ts +2 -2
- package/package/getLoopColors/index.ts +2 -2
- package/package/getWebGLContext/index.ts +39 -39
- package/package/index.ts +76 -76
- package/package/move/index.ts +2 -2
- package/package/resizeObserver/index.ts +2 -2
- package/package/rotate/index.ts +2 -2
- package/package/ruler/index.ts +2 -2
- package/package/scale/index.ts +2 -2
- package/package/throttle/index.ts +2 -2
- package/package/viewHandler/index.ts +2 -2
- package/package.json +6 -2
- package/src/Canvas.ts +70 -67
- package/src/Eoap.ts +66 -66
- package/src/Geometry.ts +82 -82
- package/src/Matrix4/index.ts +17 -9
- package/src/Matrix4/move.ts +12 -12
- package/src/Matrix4/rotate.ts +15 -15
- package/src/Matrix4/scale.ts +11 -11
- package/src/Matrix4/transform.ts +64 -64
- package/src/Mercator.ts +27 -27
- package/src/SVG.ts +24 -24
- package/src/WebGL.ts +66 -66
- package/src/animation.ts +98 -98
- package/src/common/assemble.ts +22 -22
- package/src/common/canvas/arc.ts +51 -50
- package/src/common/canvas/config.ts +158 -158
- package/src/common/canvas/gradient.ts +29 -29
- package/src/common/canvas/index.ts +149 -140
- package/src/common/canvas/painter.ts +417 -426
- package/src/common/canvas/texts.ts +18 -18
- package/src/common/geometry/prism-horizontal.ts +35 -33
- package/src/common/geometry/prism-vertical.ts +40 -40
- package/src/common/geometry/sphere-fragment.ts +40 -39
- package/src/common/geometry/tool/circle.ts +11 -11
- package/src/common/mergeOption.ts +6 -6
- package/src/common/setStyle.ts +5 -5
- package/src/common/svg/config.ts +186 -186
- package/src/common/svg/dictionary.ts +1 -1
- package/src/common/svg/gradient.ts +63 -63
- package/src/common/svg/index.ts +356 -356
- package/src/common/svg/tool.ts +44 -44
- package/src/common/tree/index.ts +25 -25
- package/src/common/tree/toInnerTree.ts +57 -56
- package/src/common/tree/toPlainTree.ts +132 -131
- package/src/common/webgl/buffer.ts +79 -79
- package/src/common/webgl/doDraw.ts +108 -108
- package/src/common/webgl/getColorFactory.ts +26 -26
- package/src/common/webgl/getShader.ts +48 -48
- package/src/common/webgl/getTexture.ts +11 -11
- package/src/common/webgl/getWebGLContext.ts +28 -27
- package/src/common/webgl/index.ts +224 -223
- package/src/common/webgl/shader.ts +75 -75
- package/src/common/webgl/texture.ts +97 -96
- package/src/formatColor.ts +44 -44
- package/src/getLoopColors.ts +42 -42
- package/src/interpolation/Cardinal.ts +110 -110
- package/src/interpolation/Hermite.ts +65 -65
- package/src/{TreeLayout/index.ts → layout/TreeLayout.ts} +21 -21
- package/src/move.ts +7 -7
- package/src/resizeObserver.ts +37 -36
- package/src/rotate.ts +7 -7
- package/src/ruler.ts +41 -19
- package/src/scale.ts +6 -6
- package/src/shader/fsColor.c +7 -7
- package/src/shader/fsColors.c +7 -7
- package/src/shader/fsCube.c +8 -8
- package/src/shader/fsImage.c +8 -8
- package/src/shader/vsColor.c +17 -17
- package/src/shader/vsColors.c +13 -13
- package/src/shader/vsCube.c +13 -13
- package/src/shader/vsImage.c +13 -13
- package/src/throttle.ts +52 -51
- package/src/viewHandler.ts +158 -158
- package/types/Buffer.d.ts +23 -23
- package/types/Canvas.d.ts +8 -0
- package/types/CanvasConfig.d.ts +106 -106
- package/types/CanvasOption.d.ts +8 -7
- package/types/CanvasOpts.d.ts +10 -0
- package/types/Cardinal.d.ts +13 -13
- package/types/Geometry.d.ts +40 -40
- package/types/GeometryOption.d.ts +11 -11
- package/types/GeometryResult.d.ts +18 -18
- package/types/Gradient.d.ts +14 -14
- package/types/Hermite.d.ts +18 -18
- package/types/Map.d.ts +9 -9
- package/types/Matrix4.d.ts +5 -0
- package/types/Object3D.d.ts +114 -114
- package/types/SVG.d.ts +238 -238
- package/types/SVGConfig.d.ts +76 -76
- package/types/Scene3D.d.ts +6 -6
- package/types/Shader.d.ts +21 -21
- package/types/Texture.d.ts +16 -16
- package/types/Tree.d.ts +69 -69
- package/types/TreeConfig.d.ts +24 -24
- package/types/TreeLayout.d.ts +54 -54
- package/types/TreeOption.d.ts +48 -48
- package/types/WebGL.d.ts +38 -38
- package/types/WebGLOption.d.ts +7 -7
- package/types/animation.d.ts +6 -6
- package/types/formatColor.d.ts +2 -2
- package/types/getLoopColors.d.ts +2 -2
- package/types/getWebGLContext.d.ts +2 -2
- package/types/index.d.ts +175 -175
- package/types/move.d.ts +2 -2
- package/types/painterConfig.d.ts +2 -2
- package/types/resizeObserver.d.ts +2 -2
- package/types/rotate.d.ts +2 -2
- package/types/ruler.d.ts +7 -7
- package/types/scale.d.ts +2 -2
- package/types/throttle.d.ts +4 -4
- package/types/throttleOption.d.ts +21 -21
- package/types/viewHandler.d.ts +13 -13
- package/uni-app/ui-canvas.vue +239 -206
package/src/Geometry.ts
CHANGED
|
@@ -1,83 +1,83 @@
|
|
|
1
|
-
import type GeometryType from "../types/Geometry"
|
|
2
|
-
import type GeometryOptionType from "../types/GeometryOption"
|
|
3
|
-
import type GeometryResultType from "../types/GeometryResult"
|
|
4
|
-
|
|
5
|
-
import { splitNum } from './common/geometry/tool/circle'
|
|
6
|
-
import prismHorizontal from './common/geometry/prism-horizontal'
|
|
7
|
-
import prismVertical from './common/geometry/prism-vertical'
|
|
8
|
-
import sphereFragment from './common/geometry/sphere-fragment'
|
|
9
|
-
import mergeOption from './common/mergeOption'
|
|
10
|
-
|
|
11
|
-
class Geometry implements GeometryType {
|
|
12
|
-
readonly name: string = 'Geometry'
|
|
13
|
-
|
|
14
|
-
private __option: GeometryOptionType
|
|
15
|
-
|
|
16
|
-
constructor(option: GeometryOptionType = {}) {
|
|
17
|
-
this.__option = mergeOption(option, {
|
|
18
|
-
precision: 0.1, // 精度
|
|
19
|
-
normal: false, // 是否需要法向量
|
|
20
|
-
})
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
config(option: GeometryOptionType) {
|
|
24
|
-
for (
|
|
25
|
-
this.__option[key] = option[key]
|
|
26
|
-
}
|
|
27
|
-
return this
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
// 圆柱体
|
|
31
|
-
cylinder(x: number, y: number, z: number, radius: number, height: number): Array<GeometryResultType> {
|
|
32
|
-
|
|
33
|
-
// 求解出需要切割多少份比较合理
|
|
34
|
-
|
|
35
|
-
return this.prism(x, y, z, radius, height, num)
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
// 棱柱体
|
|
39
|
-
prism(x: number, y: number, z: number, radius: number, height: number, num: number): Array<GeometryResultType> {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
points: [],
|
|
43
|
-
length: 0,
|
|
44
|
-
method: "TRIANGLES" as const
|
|
45
|
-
}]
|
|
46
|
-
|
|
47
|
-
// 绘制底部的盖子
|
|
48
|
-
result[0].points.push(...prismHorizontal(this.__option.normal, x, y, z, radius, num, height > 0 ? -1 : 1))
|
|
49
|
-
|
|
50
|
-
// 绘制顶部的盖子
|
|
51
|
-
result[0].points.push(...prismHorizontal(this.__option.normal, x, y + height, z, radius, num, height > 0 ? 1 : -1))
|
|
52
|
-
|
|
53
|
-
// 绘制侧边部分
|
|
54
|
-
result[0].points.push(...prismVertical(this.__option.normal, x, y, z, radius, height, num))
|
|
55
|
-
|
|
56
|
-
result[0].length = 12 * num
|
|
57
|
-
return result
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// 球体
|
|
61
|
-
sphere(cx: number, cy: number, cz: number, radius: number): Array<GeometryResultType> {
|
|
62
|
-
|
|
63
|
-
// 求解出需要切割多少份比较合理
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
// 然后一瓣瓣的绘制
|
|
67
|
-
|
|
68
|
-
points: [],
|
|
69
|
-
length: 0,
|
|
70
|
-
method: "TRIANGLES" as const
|
|
71
|
-
}]
|
|
72
|
-
for (let i = 0; i < num; i++) {
|
|
73
|
-
result[0].points.push(...sphereFragment(this.__option.normal, cx, cy, cz, radius, num, i))
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
result[0].length = result[0].points.length / (this.__option.normal ? 6 : 3)
|
|
77
|
-
|
|
78
|
-
return result
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
}
|
|
82
|
-
|
|
1
|
+
import type GeometryType from "../types/Geometry"
|
|
2
|
+
import type GeometryOptionType from "../types/GeometryOption"
|
|
3
|
+
import type GeometryResultType from "../types/GeometryResult"
|
|
4
|
+
|
|
5
|
+
import { splitNum } from './common/geometry/tool/circle'
|
|
6
|
+
import prismHorizontal from './common/geometry/prism-horizontal'
|
|
7
|
+
import prismVertical from './common/geometry/prism-vertical'
|
|
8
|
+
import sphereFragment from './common/geometry/sphere-fragment'
|
|
9
|
+
import mergeOption from './common/mergeOption'
|
|
10
|
+
|
|
11
|
+
class Geometry implements GeometryType {
|
|
12
|
+
readonly name: string = 'Geometry'
|
|
13
|
+
|
|
14
|
+
private __option: GeometryOptionType
|
|
15
|
+
|
|
16
|
+
constructor(option: GeometryOptionType = {}) {
|
|
17
|
+
this.__option = mergeOption(option, {
|
|
18
|
+
precision: 0.1, // 精度
|
|
19
|
+
normal: false, // 是否需要法向量
|
|
20
|
+
})
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
config(option: GeometryOptionType) {
|
|
24
|
+
for (const key in option) {
|
|
25
|
+
this.__option[key] = option[key]
|
|
26
|
+
}
|
|
27
|
+
return this
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// 圆柱体
|
|
31
|
+
cylinder(x: number, y: number, z: number, radius: number, height: number): Array<GeometryResultType> {
|
|
32
|
+
|
|
33
|
+
// 求解出需要切割多少份比较合理
|
|
34
|
+
const num = splitNum(this.__option.precision, radius)
|
|
35
|
+
return this.prism(x, y, z, radius, height, num)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// 棱柱体
|
|
39
|
+
prism(x: number, y: number, z: number, radius: number, height: number, num: number): Array<GeometryResultType> {
|
|
40
|
+
|
|
41
|
+
const result = [{
|
|
42
|
+
points: [],
|
|
43
|
+
length: 0,
|
|
44
|
+
method: "TRIANGLES" as const
|
|
45
|
+
}]
|
|
46
|
+
|
|
47
|
+
// 绘制底部的盖子
|
|
48
|
+
result[0].points.push(...prismHorizontal(this.__option.normal, x, y, z, radius, num, height > 0 ? -1 : 1))
|
|
49
|
+
|
|
50
|
+
// 绘制顶部的盖子
|
|
51
|
+
result[0].points.push(...prismHorizontal(this.__option.normal, x, y + height, z, radius, num, height > 0 ? 1 : -1))
|
|
52
|
+
|
|
53
|
+
// 绘制侧边部分
|
|
54
|
+
result[0].points.push(...prismVertical(this.__option.normal, x, y, z, radius, height, num))
|
|
55
|
+
|
|
56
|
+
result[0].length = 12 * num
|
|
57
|
+
return result
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// 球体
|
|
61
|
+
sphere(cx: number, cy: number, cz: number, radius: number): Array<GeometryResultType> {
|
|
62
|
+
|
|
63
|
+
// 求解出需要切割多少份比较合理
|
|
64
|
+
const num = splitNum(this.__option.precision, radius)
|
|
65
|
+
|
|
66
|
+
// 然后一瓣瓣的绘制
|
|
67
|
+
const result = [{
|
|
68
|
+
points: [],
|
|
69
|
+
length: 0,
|
|
70
|
+
method: "TRIANGLES" as const
|
|
71
|
+
}]
|
|
72
|
+
for (let i = 0; i < num; i++) {
|
|
73
|
+
result[0].points.push(...sphereFragment(this.__option.normal, cx, cy, cz, radius, num, i))
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
result[0].length = result[0].points.length / (this.__option.normal ? 6 : 3)
|
|
77
|
+
|
|
78
|
+
return result
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
}
|
|
82
|
+
|
|
83
83
|
export default Geometry
|
package/src/Matrix4/index.ts
CHANGED
|
@@ -2,8 +2,8 @@ import type Matrix4Type from '../../types/Matrix4'
|
|
|
2
2
|
|
|
3
3
|
// 两个4x4矩阵相乘
|
|
4
4
|
// 或矩阵和齐次坐标相乘
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
const _multiply = function (matrix4: number[], param: number[]) {
|
|
6
|
+
const newParam: number[] = []
|
|
7
7
|
for (let i = 0; i < 4; i++)
|
|
8
8
|
for (let j = 0; j < param.length / 4; j++)
|
|
9
9
|
newParam[j * 4 + i] =
|
|
@@ -21,20 +21,28 @@ import _transform from './transform'
|
|
|
21
21
|
|
|
22
22
|
// 列主序存储的4x4矩阵
|
|
23
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
|
+
|
|
24
31
|
class Matrix4 implements Matrix4Type {
|
|
25
32
|
readonly name: string = 'Matrix4'
|
|
26
33
|
|
|
27
34
|
private __matrix4: number[]
|
|
28
35
|
|
|
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
|
-
]) {
|
|
36
|
+
constructor(initMatrix4: number[] = __initMatrix4) {
|
|
35
37
|
this.__matrix4 = initMatrix4
|
|
36
38
|
}
|
|
37
39
|
|
|
40
|
+
// 设置内置矩阵
|
|
41
|
+
setValue(initMatrix4: number[] = __initMatrix4) {
|
|
42
|
+
this.__matrix4 = initMatrix4
|
|
43
|
+
return this
|
|
44
|
+
}
|
|
45
|
+
|
|
38
46
|
// 移动
|
|
39
47
|
move(dis: number, a: number, b: number, c: number = 0) {
|
|
40
48
|
this.__matrix4 = _multiply(_move(dis, a, b, c), this.__matrix4)
|
|
@@ -43,7 +51,7 @@ class Matrix4 implements Matrix4Type {
|
|
|
43
51
|
|
|
44
52
|
// 旋转
|
|
45
53
|
rotate(deg: number, a1: number, b1: number, c1?: number, a2?: number, b2?: number, c2?: number) {
|
|
46
|
-
|
|
54
|
+
const matrix4s = _transform(a1, b1, c1, a2, b2, c2)
|
|
47
55
|
this.__matrix4 = _multiply(_multiply(_multiply(matrix4s[1], _rotate(deg)), matrix4s[0]), this.__matrix4)
|
|
48
56
|
return this
|
|
49
57
|
}
|
package/src/Matrix4/move.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
+
}
|
package/src/Matrix4/rotate.ts
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 围绕0Z轴旋转
|
|
3
|
-
* 其它的旋转可以借助transform实现
|
|
4
|
-
* 旋转角度单位采用弧度制
|
|
5
|
-
*/
|
|
6
|
-
export default function (deg: number) {
|
|
7
|
-
|
|
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
|
+
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
|
+
}
|
package/src/Matrix4/scale.ts
CHANGED
|
@@ -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
|
+
}
|
package/src/Matrix4/transform.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
import type SVGType from '../types/SVG'
|
|
2
|
-
|
|
3
|
-
import OralSVG from './common/svg/index'
|
|
4
|
-
|
|
5
|
-
class SVG extends OralSVG implements SVGType {
|
|
6
|
-
constructor(el: HTMLElement | null) {
|
|
7
|
-
if (!el) {
|
|
8
|
-
throw new Error("VISLite SVG:The mount point requires an HTMLElement type but encountered null.")
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
el.appendChild(ViewSVG)
|
|
15
|
-
|
|
16
|
-
ViewSVG.setAttribute("width", width + "")
|
|
17
|
-
ViewSVG.setAttribute("height", height + "")
|
|
18
|
-
|
|
19
|
-
ViewSVG.setAttribute("viewBox", "0 0 " + width + " " + height)
|
|
20
|
-
|
|
21
|
-
super(ViewSVG)
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|
|
1
|
+
import type SVGType from '../types/SVG'
|
|
2
|
+
|
|
3
|
+
import OralSVG from './common/svg/index'
|
|
4
|
+
|
|
5
|
+
class SVG extends OralSVG implements SVGType {
|
|
6
|
+
constructor(el: HTMLElement | null) {
|
|
7
|
+
if (!el) {
|
|
8
|
+
throw new Error("VISLite SVG:The mount point requires an HTMLElement type but encountered null.")
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const width = el.clientWidth, height = el.clientHeight
|
|
12
|
+
|
|
13
|
+
const ViewSVG = document.createElementNS("http://www.w3.org/2000/svg", 'svg')
|
|
14
|
+
el.appendChild(ViewSVG)
|
|
15
|
+
|
|
16
|
+
ViewSVG.setAttribute("width", width + "")
|
|
17
|
+
ViewSVG.setAttribute("height", height + "")
|
|
18
|
+
|
|
19
|
+
ViewSVG.setAttribute("viewBox", "0 0 " + width + " " + height)
|
|
20
|
+
|
|
21
|
+
super(ViewSVG)
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
25
|
export default SVG
|
package/src/WebGL.ts
CHANGED
|
@@ -1,67 +1,67 @@
|
|
|
1
|
-
import type WebGLOptionType from '../types/WebGLOption'
|
|
2
|
-
import type WebGLType from '../types/WebGL'
|
|
3
|
-
|
|
4
|
-
import OralWebGL from './common/webgl/index'
|
|
5
|
-
import mergeOption from './common/mergeOption'
|
|
6
|
-
|
|
7
|
-
class WebGL extends OralWebGL implements WebGLType {
|
|
8
|
-
constructor(el: HTMLElement | null, option: WebGLOptionType = {}) {
|
|
9
|
-
if (!el) {
|
|
10
|
-
throw new Error("VISLite WebGL:The mount point requires an HTMLElement type but encountered null.")
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
option = mergeOption(option, {
|
|
14
|
-
region: true
|
|
15
|
-
})
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
let ViewCanvas: HTMLCanvasElement, RegionCanvas: HTMLCanvasElement
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
// 如果已经初始化过了
|
|
24
|
-
if (_el._vislite_canvas_) {
|
|
25
|
-
ViewCanvas = _el._vislite_canvas_[0]
|
|
26
|
-
RegionCanvas = _el._vislite_canvas_[1]
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
// 否则就初始化
|
|
30
|
-
else {
|
|
31
|
-
|
|
32
|
-
if (option.region) {
|
|
33
|
-
|
|
34
|
-
RegionCanvas = document.createElement('canvas')
|
|
35
|
-
el.appendChild(RegionCanvas)
|
|
36
|
-
|
|
37
|
-
RegionCanvas.style.position = 'absolute'
|
|
38
|
-
RegionCanvas.style.zIndex = "-1"
|
|
39
|
-
RegionCanvas.style.opacity = "0"
|
|
40
|
-
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
ViewCanvas = document.createElement('canvas')
|
|
44
|
-
el.appendChild(ViewCanvas)
|
|
45
|
-
|
|
46
|
-
_el._vislite_canvas_ = [ViewCanvas, RegionCanvas]
|
|
47
|
-
|
|
48
|
-
el.setAttribute('vislite', 'WebGL')
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
// 设置画布大小
|
|
52
|
-
for (
|
|
53
|
-
|
|
54
|
-
if (canvas) {
|
|
55
|
-
canvas.style.width = width + "px"
|
|
56
|
-
canvas.setAttribute('width', width + "")
|
|
57
|
-
|
|
58
|
-
canvas.style.height = height + "px"
|
|
59
|
-
canvas.setAttribute('height', height + "")
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
super(ViewCanvas, RegionCanvas)
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
1
|
+
import type WebGLOptionType from '../types/WebGLOption'
|
|
2
|
+
import type WebGLType from '../types/WebGL'
|
|
3
|
+
|
|
4
|
+
import OralWebGL from './common/webgl/index'
|
|
5
|
+
import mergeOption from './common/mergeOption'
|
|
6
|
+
|
|
7
|
+
class WebGL extends OralWebGL implements WebGLType {
|
|
8
|
+
constructor(el: HTMLElement | null, option: WebGLOptionType = {}) {
|
|
9
|
+
if (!el) {
|
|
10
|
+
throw new Error("VISLite WebGL:The mount point requires an HTMLElement type but encountered null.")
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
option = mergeOption(option, {
|
|
14
|
+
region: true
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
const width = el.clientWidth, height = el.clientHeight
|
|
18
|
+
|
|
19
|
+
let ViewCanvas: HTMLCanvasElement, RegionCanvas: HTMLCanvasElement
|
|
20
|
+
|
|
21
|
+
const _el = el as any
|
|
22
|
+
|
|
23
|
+
// 如果已经初始化过了
|
|
24
|
+
if (_el._vislite_canvas_) {
|
|
25
|
+
ViewCanvas = _el._vislite_canvas_[0]
|
|
26
|
+
RegionCanvas = _el._vislite_canvas_[1]
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// 否则就初始化
|
|
30
|
+
else {
|
|
31
|
+
|
|
32
|
+
if (option.region) {
|
|
33
|
+
|
|
34
|
+
RegionCanvas = document.createElement('canvas')
|
|
35
|
+
el.appendChild(RegionCanvas)
|
|
36
|
+
|
|
37
|
+
RegionCanvas.style.position = 'absolute'
|
|
38
|
+
RegionCanvas.style.zIndex = "-1"
|
|
39
|
+
RegionCanvas.style.opacity = "0"
|
|
40
|
+
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
ViewCanvas = document.createElement('canvas')
|
|
44
|
+
el.appendChild(ViewCanvas)
|
|
45
|
+
|
|
46
|
+
_el._vislite_canvas_ = [ViewCanvas, RegionCanvas]
|
|
47
|
+
|
|
48
|
+
el.setAttribute('vislite', 'WebGL')
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// 设置画布大小
|
|
52
|
+
for (const canvas of [ViewCanvas, RegionCanvas]) {
|
|
53
|
+
|
|
54
|
+
if (canvas) {
|
|
55
|
+
canvas.style.width = width + "px"
|
|
56
|
+
canvas.setAttribute('width', width + "")
|
|
57
|
+
|
|
58
|
+
canvas.style.height = height + "px"
|
|
59
|
+
canvas.setAttribute('height', height + "")
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
super(ViewCanvas, RegionCanvas)
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
67
|
export default WebGL
|