vislite 0.4.1 → 0.5.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.
- package/.editorconfig +18 -18
- package/AUTHORS.txt +6 -6
- package/CHANGELOG +16 -0
- package/LICENSE +20 -20
- package/README.md +69 -69
- package/lib/Buffer/index.umd.js +3 -3
- package/lib/Buffer/index.umd.min.js +3 -3
- package/lib/Canvas/index.umd.js +3 -3
- package/lib/Canvas/index.umd.min.js +3 -3
- package/lib/Cardinal/index.umd.js +3 -3
- package/lib/Cardinal/index.umd.min.js +3 -3
- package/lib/Eoap/index.umd.js +3 -3
- package/lib/Eoap/index.umd.min.js +3 -3
- package/lib/Geometry/index.umd.js +205 -0
- package/lib/Geometry/index.umd.min.js +11 -0
- package/lib/Hermite/index.umd.js +3 -3
- package/lib/Hermite/index.umd.min.js +3 -3
- package/lib/Matrix4/index.umd.js +3 -3
- package/lib/Matrix4/index.umd.min.js +3 -3
- package/lib/Mercator/index.umd.js +5 -4
- package/lib/Mercator/index.umd.min.js +4 -4
- package/lib/OralCanvas/index.es.js +3 -3
- package/lib/OralCanvas/index.es.min.js +3 -3
- package/lib/OralWebGL/index.es.js +11 -11
- package/lib/OralWebGL/index.es.min.js +4 -4
- package/lib/SVG/index.umd.js +10 -4
- package/lib/SVG/index.umd.min.js +4 -4
- package/lib/Shader/index.umd.js +11 -11
- package/lib/Shader/index.umd.min.js +4 -4
- package/lib/Texture/index.umd.js +3 -3
- package/lib/Texture/index.umd.min.js +3 -3
- package/lib/TreeLayout/index.umd.js +8 -5
- package/lib/TreeLayout/index.umd.min.js +4 -4
- package/lib/WebGL/index.umd.js +11 -11
- package/lib/WebGL/index.umd.min.js +4 -4
- package/lib/animation/index.umd.js +3 -3
- package/lib/animation/index.umd.min.js +3 -3
- package/lib/formatColor/index.umd.js +3 -3
- package/lib/formatColor/index.umd.min.js +3 -3
- package/lib/getLoopColors/index.umd.js +3 -3
- package/lib/getLoopColors/index.umd.min.js +3 -3
- package/lib/getWebGLContext/index.umd.js +3 -3
- package/lib/getWebGLContext/index.umd.min.js +3 -3
- package/lib/index.umd.js +166 -16
- package/lib/index.umd.min.js +4 -4
- package/lib/resizeObserver/index.umd.js +3 -3
- package/lib/resizeObserver/index.umd.min.js +3 -3
- package/lib/rotate/index.umd.js +3 -3
- package/lib/rotate/index.umd.min.js +3 -3
- package/lib/ruler/index.umd.js +3 -3
- package/lib/ruler/index.umd.min.js +3 -3
- package/lib/throttle/index.umd.js +3 -3
- package/lib/throttle/index.umd.min.js +3 -3
- package/lib/viewHandler/index.umd.js +3 -3
- 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 +3 -0
- 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 +2 -2
- 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 +6 -1
- package/package/resizeObserver/index.ts +2 -2
- package/package/rotate/index.ts +2 -2
- package/package/ruler/index.ts +2 -2
- package/package/throttle/index.ts +2 -2
- package/package/viewHandler/index.ts +2 -2
- package/package.json +3 -1
- package/src/Canvas.ts +67 -67
- package/src/Eoap.ts +1 -1
- package/src/Geometry.ts +83 -0
- package/src/Matrix4/index.ts +2 -2
- 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 +3 -2
- package/src/SVG.ts +24 -24
- package/src/TreeLayout/index.ts +4 -3
- 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 +50 -50
- package/src/common/canvas/config.ts +158 -158
- package/src/common/canvas/gradient.ts +29 -29
- package/src/common/canvas/index.ts +168 -168
- package/src/common/canvas/painter.ts +426 -426
- package/src/common/canvas/texts.ts +18 -18
- package/src/common/geometry/prism-horizontal.ts +33 -0
- package/src/common/geometry/prism-vertical.ts +40 -0
- package/src/common/geometry/sphere-fragment.ts +39 -0
- package/src/common/geometry/tool/circle.ts +12 -0
- package/src/common/mergeOption.ts +6 -6
- package/src/common/setStyle.ts +5 -5
- package/src/common/svg/config.ts +174 -174
- package/src/common/svg/index.ts +9 -1
- package/src/common/svg/tool.ts +44 -44
- package/src/common/tree/index.ts +25 -25
- package/src/common/tree/toInnerTree.ts +56 -56
- package/src/common/tree/toPlainTree.ts +131 -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 +27 -27
- package/src/common/webgl/index.ts +223 -223
- package/src/common/webgl/shader.ts +75 -75
- package/src/common/webgl/texture.ts +96 -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/resizeObserver.ts +36 -36
- package/src/rotate.ts +1 -1
- package/src/ruler.ts +188 -188
- 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 +51 -51
- package/src/viewHandler.ts +158 -158
- package/types/Buffer.d.ts +23 -23
- package/types/Canvas.d.ts +300 -300
- package/types/CanvasConfig.d.ts +24 -0
- package/types/CanvasOption.d.ts +7 -7
- package/types/Cardinal.d.ts +13 -13
- package/types/Geometry.d.ts +41 -0
- package/types/GeometryOption.d.ts +12 -0
- package/types/GeometryResult.d.ts +19 -0
- package/types/Gradient.d.ts +14 -14
- package/types/Hermite.d.ts +18 -18
- package/types/Map.d.ts +2 -2
- package/types/Matrix4.d.ts +4 -4
- package/types/Object3D.d.ts +114 -114
- package/types/SVG.d.ts +18 -13
- package/types/SVGConfig.d.ts +76 -60
- 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 +8 -2
- 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 +15 -1
- package/types/painterConfig.d.ts +2 -2
- package/types/resizeObserver.d.ts +2 -2
- package/types/rotate.d.ts +1 -1
- package/types/ruler.d.ts +7 -7
- 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 +222 -222
package/src/Canvas.ts
CHANGED
|
@@ -1,68 +1,68 @@
|
|
|
1
|
-
import type CanvasType from '../types/Canvas'
|
|
2
|
-
import type CanvasOptionType from '../types/CanvasOption'
|
|
3
|
-
|
|
4
|
-
import OralCanvas from './common/canvas/index'
|
|
5
|
-
import mergeOption from './common/mergeOption'
|
|
6
|
-
|
|
7
|
-
class Canvas extends OralCanvas implements CanvasType {
|
|
8
|
-
private __canvas: HTMLCanvasElement
|
|
9
|
-
constructor(el: HTMLElement | null, option: CanvasOptionType = {}) {
|
|
10
|
-
if (!el) {
|
|
11
|
-
throw new Error("VISLite Canvas:The mount point requires an HTMLElement type but encountered null.")
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
option = mergeOption(option, {
|
|
15
|
-
region: true
|
|
16
|
-
})
|
|
17
|
-
|
|
18
|
-
let width = el.clientWidth, height = el.clientHeight
|
|
19
|
-
|
|
20
|
-
let ViewCanvas: HTMLCanvasElement, RegionCanvas: HTMLCanvasElement
|
|
21
|
-
|
|
22
|
-
let _el = el as any
|
|
23
|
-
|
|
24
|
-
// 如果已经初始化过了
|
|
25
|
-
if (_el._vislite_canvas_) {
|
|
26
|
-
ViewCanvas = _el._vislite_canvas_[0]
|
|
27
|
-
RegionCanvas = _el._vislite_canvas_[1]
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
// 否则就初始化
|
|
31
|
-
else {
|
|
32
|
-
ViewCanvas = document.createElement('canvas')
|
|
33
|
-
el.appendChild(ViewCanvas)
|
|
34
|
-
|
|
35
|
-
if (option.region) {
|
|
36
|
-
RegionCanvas = document.createElement('canvas')
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
_el._vislite_canvas_ = [ViewCanvas, RegionCanvas]
|
|
40
|
-
|
|
41
|
-
el.setAttribute('vislite', 'Canvas')
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
// 设置画布大小
|
|
45
|
-
for (let canvas of [ViewCanvas, RegionCanvas]) {
|
|
46
|
-
|
|
47
|
-
if (canvas) {
|
|
48
|
-
canvas.style.width = width + "px"
|
|
49
|
-
canvas.setAttribute('width', width + "")
|
|
50
|
-
|
|
51
|
-
canvas.style.height = height + "px"
|
|
52
|
-
canvas.setAttribute('height', height + "")
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
super(ViewCanvas, RegionCanvas)
|
|
57
|
-
|
|
58
|
-
this.__canvas = ViewCanvas
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
toDataURL(): Promise<string> {
|
|
62
|
-
return new Promise(resolve => {
|
|
63
|
-
resolve(this.__canvas.toDataURL())
|
|
64
|
-
})
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
1
|
+
import type CanvasType from '../types/Canvas'
|
|
2
|
+
import type CanvasOptionType from '../types/CanvasOption'
|
|
3
|
+
|
|
4
|
+
import OralCanvas from './common/canvas/index'
|
|
5
|
+
import mergeOption from './common/mergeOption'
|
|
6
|
+
|
|
7
|
+
class Canvas extends OralCanvas implements CanvasType {
|
|
8
|
+
private __canvas: HTMLCanvasElement
|
|
9
|
+
constructor(el: HTMLElement | null, option: CanvasOptionType = {}) {
|
|
10
|
+
if (!el) {
|
|
11
|
+
throw new Error("VISLite Canvas:The mount point requires an HTMLElement type but encountered null.")
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
option = mergeOption(option, {
|
|
15
|
+
region: true
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
let width = el.clientWidth, height = el.clientHeight
|
|
19
|
+
|
|
20
|
+
let ViewCanvas: HTMLCanvasElement, RegionCanvas: HTMLCanvasElement
|
|
21
|
+
|
|
22
|
+
let _el = el as any
|
|
23
|
+
|
|
24
|
+
// 如果已经初始化过了
|
|
25
|
+
if (_el._vislite_canvas_) {
|
|
26
|
+
ViewCanvas = _el._vislite_canvas_[0]
|
|
27
|
+
RegionCanvas = _el._vislite_canvas_[1]
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// 否则就初始化
|
|
31
|
+
else {
|
|
32
|
+
ViewCanvas = document.createElement('canvas')
|
|
33
|
+
el.appendChild(ViewCanvas)
|
|
34
|
+
|
|
35
|
+
if (option.region) {
|
|
36
|
+
RegionCanvas = document.createElement('canvas')
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
_el._vislite_canvas_ = [ViewCanvas, RegionCanvas]
|
|
40
|
+
|
|
41
|
+
el.setAttribute('vislite', 'Canvas')
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// 设置画布大小
|
|
45
|
+
for (let canvas of [ViewCanvas, RegionCanvas]) {
|
|
46
|
+
|
|
47
|
+
if (canvas) {
|
|
48
|
+
canvas.style.width = width + "px"
|
|
49
|
+
canvas.setAttribute('width', width + "")
|
|
50
|
+
|
|
51
|
+
canvas.style.height = height + "px"
|
|
52
|
+
canvas.setAttribute('height', height + "")
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
super(ViewCanvas, RegionCanvas)
|
|
57
|
+
|
|
58
|
+
this.__canvas = ViewCanvas
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
toDataURL(): Promise<string> {
|
|
62
|
+
return new Promise(resolve => {
|
|
63
|
+
resolve(this.__canvas.toDataURL())
|
|
64
|
+
})
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
68
|
export default Canvas
|
package/src/Eoap.ts
CHANGED
package/src/Geometry.ts
ADDED
|
@@ -0,0 +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 (let 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
|
+
let 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
|
+
let 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
|
+
let num = splitNum(this.__option.precision, radius)
|
|
65
|
+
|
|
66
|
+
// 然后一瓣瓣的绘制
|
|
67
|
+
let 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
|
+
export default Geometry
|
package/src/Matrix4/index.ts
CHANGED
|
@@ -63,9 +63,9 @@ class Matrix4 implements Matrix4Type {
|
|
|
63
63
|
|
|
64
64
|
// 对一个坐标应用变换
|
|
65
65
|
// 齐次坐标(x,y,z,w)
|
|
66
|
-
use(x: number, y: number, z: number = 0, w: number = 1) {
|
|
66
|
+
use(x: number, y: number, z: number = 0, w: number = 1): [number, number, number, number] {
|
|
67
67
|
// w为0表示点位于无穷远处,忽略
|
|
68
|
-
return _multiply(this.__matrix4, [x, y, z, w])
|
|
68
|
+
return _multiply(this.__matrix4, [x, y, z, w]) as [number, number, number, number]
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
// 矩阵的值
|
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
|
-
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
|
+
}
|
package/src/Matrix4/rotate.ts
CHANGED
|
@@ -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
|
+
}
|
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
|
-
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
|
+
}
|
package/src/Mercator.ts
CHANGED
|
@@ -4,7 +4,7 @@ import type MapType from '../types/Map'
|
|
|
4
4
|
class Mercator implements MapType {
|
|
5
5
|
readonly name: string = 'Mercator'
|
|
6
6
|
|
|
7
|
-
use: (λ: number, φ: number) => number
|
|
7
|
+
use: (λ: number, φ: number) => [number, number, number]
|
|
8
8
|
constructor(scale: number = 7, center: number[] = [107, 36]) {
|
|
9
9
|
|
|
10
10
|
let perimeter = 100 * scale * Math.PI // 半周长
|
|
@@ -17,7 +17,8 @@ class Mercator implements MapType {
|
|
|
17
17
|
this.use = (λ: number, φ: number) => {
|
|
18
18
|
return [
|
|
19
19
|
(help * λ - cx) * 0.8,
|
|
20
|
-
-1 * help * φ - cy
|
|
20
|
+
-1 * help * φ - cy,
|
|
21
|
+
0
|
|
21
22
|
]
|
|
22
23
|
}
|
|
23
24
|
}
|
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
|
-
let width = el.clientWidth, height = el.clientHeight
|
|
12
|
-
|
|
13
|
-
let 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
|
-
|
|
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
|
+
let width = el.clientWidth, height = el.clientHeight
|
|
12
|
+
|
|
13
|
+
let 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/TreeLayout/index.ts
CHANGED
|
@@ -34,7 +34,7 @@ class TreeLayout extends Tree implements TreeLayoutType {
|
|
|
34
34
|
return this
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
use(initTree: any, noOpens
|
|
37
|
+
use(initTree: any, noOpens = {}) {
|
|
38
38
|
let tree = super.use(initTree, noOpens)
|
|
39
39
|
|
|
40
40
|
// 校对偏差
|
|
@@ -115,11 +115,12 @@ class TreeLayout extends Tree implements TreeLayoutType {
|
|
|
115
115
|
return tree
|
|
116
116
|
}
|
|
117
117
|
|
|
118
|
-
bind(initTree: any, renderBack: (tree: TreeResultType) => void) {
|
|
118
|
+
bind(initTree: any, renderBack: (tree: TreeResultType) => void, noOpens = {}) {
|
|
119
119
|
this.__rback = renderBack
|
|
120
120
|
this.__oralTree = initTree
|
|
121
|
+
this.__noOpens = noOpens
|
|
121
122
|
|
|
122
|
-
this.__preTree = this.use(this.__oralTree)
|
|
123
|
+
this.__preTree = this.use(this.__oralTree, this.__noOpens)
|
|
123
124
|
this.__rback(this.__preTree)
|
|
124
125
|
|
|
125
126
|
return this
|