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
|
@@ -1,66 +1,66 @@
|
|
|
1
|
-
import type HermiteType from '../../types/Hermite'
|
|
2
|
-
|
|
3
|
-
class Hermite implements HermiteType {
|
|
4
|
-
readonly name: string = 'Hermite'
|
|
5
|
-
|
|
6
|
-
private __u: number // 张弛系数
|
|
7
|
-
|
|
8
|
-
private __MR: number[]
|
|
9
|
-
private __a: number
|
|
10
|
-
private __b: number
|
|
11
|
-
|
|
12
|
-
constructor(u: number = 0.5) {
|
|
13
|
-
this.__u = u
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* 设置点的位置
|
|
18
|
-
* @param {Number} x1 左边点的位置
|
|
19
|
-
* @param {Number} y1
|
|
20
|
-
* @param {Number} x2 右边点的位置
|
|
21
|
-
* @param {Number} y2
|
|
22
|
-
* @param {Number} s1 两个点的斜率
|
|
23
|
-
* @param {Number} s2
|
|
24
|
-
*/
|
|
25
|
-
setP(x1: number, y1: number, x2: number, y2: number, s1: number, s2: number) {
|
|
26
|
-
if (x1 < x2) {
|
|
27
|
-
// 记录原始尺寸
|
|
28
|
-
this.__a = x1
|
|
29
|
-
this.__b = x2
|
|
30
|
-
|
|
31
|
-
p4 = this.__u * s2
|
|
32
|
-
// 缩放到[0,1]定义域
|
|
33
|
-
y1 /= (x2 - x1)
|
|
34
|
-
y2 /= (x2 - x1)
|
|
35
|
-
// MR是提前计算好的多项式通解矩阵
|
|
36
|
-
// 为了加速计算
|
|
37
|
-
// 如上面说的
|
|
38
|
-
// 统一在[0,1]上计算后再通过缩放和移动恢复
|
|
39
|
-
// 避免了动态求解矩阵的麻烦
|
|
40
|
-
this.__MR = [
|
|
41
|
-
2 * y1 - 2 * y2 + p3 + p4,
|
|
42
|
-
3 * y2 - 3 * y1 - 2 * p3 - p4,
|
|
43
|
-
p3,
|
|
44
|
-
y1
|
|
45
|
-
]
|
|
46
|
-
} else throw new Error('The point x-position should be increamented!')
|
|
47
|
-
return this
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* 根据x值返回y值
|
|
53
|
-
* @param {Number} x
|
|
54
|
-
*/
|
|
55
|
-
use(x: number) {
|
|
56
|
-
if (this.__MR) {
|
|
57
|
-
|
|
58
|
-
sx2 = sx * sx,
|
|
59
|
-
sx3 = sx * sx2
|
|
60
|
-
|
|
61
|
-
return sResult * (this.__b - this.__a)
|
|
62
|
-
} else throw new Error('You shoud first set the position!')
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
1
|
+
import type HermiteType from '../../types/Hermite'
|
|
2
|
+
|
|
3
|
+
class Hermite implements HermiteType {
|
|
4
|
+
readonly name: string = 'Hermite'
|
|
5
|
+
|
|
6
|
+
private __u: number // 张弛系数
|
|
7
|
+
|
|
8
|
+
private __MR: number[]
|
|
9
|
+
private __a: number
|
|
10
|
+
private __b: number
|
|
11
|
+
|
|
12
|
+
constructor(u: number = 0.5) {
|
|
13
|
+
this.__u = u
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* 设置点的位置
|
|
18
|
+
* @param {Number} x1 左边点的位置
|
|
19
|
+
* @param {Number} y1
|
|
20
|
+
* @param {Number} x2 右边点的位置
|
|
21
|
+
* @param {Number} y2
|
|
22
|
+
* @param {Number} s1 两个点的斜率
|
|
23
|
+
* @param {Number} s2
|
|
24
|
+
*/
|
|
25
|
+
setP(x1: number, y1: number, x2: number, y2: number, s1: number, s2: number) {
|
|
26
|
+
if (x1 < x2) {
|
|
27
|
+
// 记录原始尺寸
|
|
28
|
+
this.__a = x1
|
|
29
|
+
this.__b = x2
|
|
30
|
+
const p3 = this.__u * s1,
|
|
31
|
+
p4 = this.__u * s2
|
|
32
|
+
// 缩放到[0,1]定义域
|
|
33
|
+
y1 /= (x2 - x1)
|
|
34
|
+
y2 /= (x2 - x1)
|
|
35
|
+
// MR是提前计算好的多项式通解矩阵
|
|
36
|
+
// 为了加速计算
|
|
37
|
+
// 如上面说的
|
|
38
|
+
// 统一在[0,1]上计算后再通过缩放和移动恢复
|
|
39
|
+
// 避免了动态求解矩阵的麻烦
|
|
40
|
+
this.__MR = [
|
|
41
|
+
2 * y1 - 2 * y2 + p3 + p4,
|
|
42
|
+
3 * y2 - 3 * y1 - 2 * p3 - p4,
|
|
43
|
+
p3,
|
|
44
|
+
y1
|
|
45
|
+
]
|
|
46
|
+
} else throw new Error('The point x-position should be increamented!')
|
|
47
|
+
return this
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* 根据x值返回y值
|
|
53
|
+
* @param {Number} x
|
|
54
|
+
*/
|
|
55
|
+
use(x: number) {
|
|
56
|
+
if (this.__MR) {
|
|
57
|
+
const sx = (x - this.__a) / (this.__b - this.__a),
|
|
58
|
+
sx2 = sx * sx,
|
|
59
|
+
sx3 = sx * sx2
|
|
60
|
+
const sResult = sx3 * this.__MR[0] + sx2 * this.__MR[1] + sx * this.__MR[2] + this.__MR[3]
|
|
61
|
+
return sResult * (this.__b - this.__a)
|
|
62
|
+
} else throw new Error('You shoud first set the position!')
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
66
|
export default Hermite
|
|
@@ -35,11 +35,11 @@ class TreeLayout extends Tree implements TreeLayoutType {
|
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
use(initTree: any, noOpens = {}) {
|
|
38
|
-
|
|
38
|
+
const tree = super.use(initTree, noOpens)
|
|
39
39
|
|
|
40
40
|
// 校对偏差
|
|
41
41
|
if (this.__option.offsetX != 0 || this.__option.offsetY != 0) {
|
|
42
|
-
for (
|
|
42
|
+
for (const key in tree.node) {
|
|
43
43
|
if (!tree.node[key].show) {
|
|
44
44
|
|
|
45
45
|
let deep = 0, pid = key
|
|
@@ -57,13 +57,13 @@ class TreeLayout extends Tree implements TreeLayoutType {
|
|
|
57
57
|
if (this.__option.type == 'rect') {
|
|
58
58
|
if (this.__option.direction == 'LR' || this.__option.direction == "RL") {
|
|
59
59
|
|
|
60
|
-
|
|
61
|
-
|
|
60
|
+
const perW = this.__option.height / tree.size
|
|
61
|
+
const perD = this.__option.width / (tree.deep - 1)
|
|
62
62
|
|
|
63
|
-
|
|
64
|
-
|
|
63
|
+
const balanceW = this.__option.y - this.__option.height * 0.5
|
|
64
|
+
const flag = this.__option.direction == 'LR' ? 1 : -1
|
|
65
65
|
|
|
66
|
-
for (
|
|
66
|
+
for (const key in tree.node) {
|
|
67
67
|
if (tree.deep == 1) {
|
|
68
68
|
tree.node[key].left = this.__option.x + this.__option.width * 0.5 * flag
|
|
69
69
|
tree.node[key].top = this.__option.y
|
|
@@ -74,18 +74,18 @@ class TreeLayout extends Tree implements TreeLayoutType {
|
|
|
74
74
|
}
|
|
75
75
|
} else if (this.__option.direction == 'TB' || this.__option.direction == "BT") {
|
|
76
76
|
|
|
77
|
-
|
|
78
|
-
|
|
77
|
+
const perW = this.__option.width / tree.size
|
|
78
|
+
const perD = this.__option.height / (tree.deep - 1)
|
|
79
79
|
|
|
80
|
-
|
|
81
|
-
|
|
80
|
+
const balanceW = this.__option.x - this.__option.width * 0.5
|
|
81
|
+
const flag = this.__option.direction == 'TB' ? 1 : -1
|
|
82
82
|
|
|
83
|
-
for (
|
|
83
|
+
for (const key in tree.node) {
|
|
84
84
|
if (tree.deep == 1) {
|
|
85
85
|
tree.node[key].left = this.__option.x
|
|
86
86
|
tree.node[key].top = this.__option.y + this.__option.height * 0.5 * flag
|
|
87
87
|
} else {
|
|
88
|
-
|
|
88
|
+
const left = tree.node[key].left
|
|
89
89
|
|
|
90
90
|
tree.node[key].left = tree.node[key].top * perW + balanceW
|
|
91
91
|
tree.node[key].top = this.__option.y + (left - 0.5) * perD * flag
|
|
@@ -95,16 +95,16 @@ class TreeLayout extends Tree implements TreeLayoutType {
|
|
|
95
95
|
}
|
|
96
96
|
|
|
97
97
|
} else if (this.__option.type == 'circle') {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
98
|
+
const cx = this.__option.x, cy = this.__option.y
|
|
99
|
+
const deg = Math.PI * 2 / tree.size
|
|
100
|
+
const per = this.__option.radius / (tree.deep - 1)
|
|
101
101
|
|
|
102
|
-
for (
|
|
102
|
+
for (const key in tree.node) {
|
|
103
103
|
if (tree.node[key].left == 0.5) {
|
|
104
104
|
tree.node[key].left = cx
|
|
105
105
|
tree.node[key].top = cy
|
|
106
106
|
} else {
|
|
107
|
-
|
|
107
|
+
const position = rotate(cx, cy, deg * tree.node[key].top, cx + (tree.node[key].left - 0.5) * per, cy)
|
|
108
108
|
|
|
109
109
|
tree.node[key].left = position[0]
|
|
110
110
|
tree.node[key].top = position[1]
|
|
@@ -135,13 +135,13 @@ class TreeLayout extends Tree implements TreeLayoutType {
|
|
|
135
135
|
}
|
|
136
136
|
|
|
137
137
|
private doUpdate() {
|
|
138
|
-
|
|
138
|
+
const newTree = this.use(this.__oralTree, this.__noOpens)
|
|
139
139
|
|
|
140
|
-
|
|
140
|
+
const cacheTree = JSON.parse(JSON.stringify(newTree))
|
|
141
141
|
|
|
142
142
|
animation((deep) => {
|
|
143
143
|
|
|
144
|
-
for (
|
|
144
|
+
for (const key in cacheTree.node) {
|
|
145
145
|
if (newTree.node[key].show || this.__preTree.node[key].show) {
|
|
146
146
|
cacheTree.node[key].show = true
|
|
147
147
|
|
package/src/move.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
// 点(x,y)沿着向量(ax,ay)方向移动距离d
|
|
2
|
-
export default function (ax: number, ay: number, d: number, x: number, y: number): [number, number] {
|
|
3
|
-
|
|
4
|
-
return [
|
|
5
|
-
ax * d / sqrt + x,
|
|
6
|
-
ay * d / sqrt + y
|
|
7
|
-
]
|
|
1
|
+
// 点(x,y)沿着向量(ax,ay)方向移动距离d
|
|
2
|
+
export default function (ax: number, ay: number, d: number, x: number, y: number): [number, number] {
|
|
3
|
+
const sqrt = Math.sqrt(ax * ax + ay * ay)
|
|
4
|
+
return [
|
|
5
|
+
ax * d / sqrt + x,
|
|
6
|
+
ay * d / sqrt + y
|
|
7
|
+
]
|
|
8
8
|
}
|
package/src/resizeObserver.ts
CHANGED
|
@@ -1,37 +1,38 @@
|
|
|
1
|
-
let observer: ResizeObserver
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
1
|
+
let observer: ResizeObserver
|
|
2
|
+
|
|
3
|
+
const attrValueToCallback = {}
|
|
4
|
+
let uniqueid = 0
|
|
5
|
+
|
|
6
|
+
export default function (el: HTMLElement | null, callback: Function) {
|
|
7
|
+
|
|
8
|
+
try {
|
|
9
|
+
|
|
10
|
+
if (!observer) {
|
|
11
|
+
observer = new ResizeObserver(entries => {
|
|
12
|
+
for (const entry of entries) {
|
|
13
|
+
attrValueToCallback[(entry.target as any)._resize_observer_]()
|
|
14
|
+
}
|
|
15
|
+
})
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
uniqueid++
|
|
19
|
+
|
|
20
|
+
(el as any)._resize_observer_ = uniqueid
|
|
21
|
+
attrValueToCallback[uniqueid] = callback
|
|
22
|
+
|
|
23
|
+
observer.observe(el)
|
|
24
|
+
|
|
25
|
+
return function () {
|
|
26
|
+
if (observer) {
|
|
27
|
+
observer.unobserve(el)
|
|
28
|
+
delete attrValueToCallback[(el as any)._resize_observer_]
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
} catch (e) {
|
|
33
|
+
callback()
|
|
34
|
+
|
|
35
|
+
// 如果浏览器不支持此接口
|
|
36
|
+
console.error('ResizeObserver undefined!')
|
|
37
|
+
}
|
|
37
38
|
}
|
package/src/rotate.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
// 点(x,y)围绕中心(cx,cy)旋转deg度
|
|
2
|
-
export default function (cx: number, cy: number, deg: number, x: number, y: number): [number, number] {
|
|
3
|
-
|
|
4
|
-
return [
|
|
5
|
-
(x - cx) * cos - (y - cy) * sin + cx,
|
|
6
|
-
(x - cx) * sin + (y - cy) * cos + cy
|
|
7
|
-
]
|
|
1
|
+
// 点(x,y)围绕中心(cx,cy)旋转deg度
|
|
2
|
+
export default function (cx: number, cy: number, deg: number, x: number, y: number): [number, number] {
|
|
3
|
+
const cos = Math.cos(deg), sin = Math.sin(deg)
|
|
4
|
+
return [
|
|
5
|
+
(x - cx) * cos - (y - cy) * sin + cx,
|
|
6
|
+
(x - cx) * sin + (y - cy) * cos + cy
|
|
7
|
+
]
|
|
8
8
|
}
|
package/src/ruler.ts
CHANGED
|
@@ -7,7 +7,7 @@ export default function (maxValue: number, minValue: number, num: number, option
|
|
|
7
7
|
|
|
8
8
|
// 如果最大值最小值反了
|
|
9
9
|
if (maxValue < minValue) {
|
|
10
|
-
|
|
10
|
+
const temp = minValue
|
|
11
11
|
minValue = maxValue
|
|
12
12
|
maxValue = temp
|
|
13
13
|
}
|
|
@@ -18,12 +18,12 @@ export default function (maxValue: number, minValue: number, num: number, option
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
// 为了变成 -100 ~ 100 需要放大或者缩小的倍数
|
|
21
|
-
|
|
21
|
+
const times100 =
|
|
22
22
|
|
|
23
23
|
(function (_value) {
|
|
24
24
|
|
|
25
25
|
// 先确定基调,是放大还是缩小
|
|
26
|
-
|
|
26
|
+
const _times100_base = (_value < 100 && _value > -100) ? 10 : 0.1
|
|
27
27
|
|
|
28
28
|
// 记录当前缩放倍数
|
|
29
29
|
let _times100 = -1, _tiemsValue = _value
|
|
@@ -59,11 +59,11 @@ export default function (maxValue: number, minValue: number, num: number, option
|
|
|
59
59
|
|
|
60
60
|
|
|
61
61
|
// 求解出 -100 ~ 100 的最佳间距值 后直接转换原来的倍数
|
|
62
|
-
|
|
62
|
+
const distance100_oral = Math.ceil((maxValue - minValue) * times100 / num)
|
|
63
63
|
|
|
64
|
-
|
|
64
|
+
const getResult = (changValue: number) => {
|
|
65
65
|
// 校对一下
|
|
66
|
-
|
|
66
|
+
const distance100 = {
|
|
67
67
|
3: 2,
|
|
68
68
|
4: 5,
|
|
69
69
|
6: 5,
|
|
@@ -86,12 +86,12 @@ export default function (maxValue: number, minValue: number, num: number, option
|
|
|
86
86
|
27: 25
|
|
87
87
|
}[distance100_oral + changValue] || (distance100_oral + changValue)
|
|
88
88
|
|
|
89
|
-
|
|
89
|
+
const distance = distance100 / times100
|
|
90
90
|
|
|
91
91
|
// 最小值,也就是起点
|
|
92
|
-
|
|
92
|
+
const begin = Math.floor(minValue / distance) * distance
|
|
93
93
|
|
|
94
|
-
|
|
94
|
+
const rulerArray = []
|
|
95
95
|
// 获取最终的刻度尺数组
|
|
96
96
|
rulerArray.push(begin)
|
|
97
97
|
for (let index = 1; rulerArray[rulerArray.length - 1] < maxValue; index++) {
|
|
@@ -103,10 +103,10 @@ export default function (maxValue: number, minValue: number, num: number, option
|
|
|
103
103
|
|
|
104
104
|
let rulerArray = getResult(0)
|
|
105
105
|
|
|
106
|
-
|
|
107
|
-
|
|
106
|
+
const balanceMax = () => {
|
|
107
|
+
const rulerArray_temp = []
|
|
108
108
|
|
|
109
|
-
|
|
109
|
+
const changeDist = rulerArray[rulerArray.length - 1] - option.max
|
|
110
110
|
for (let index = 0; index < rulerArray.length; index++) {
|
|
111
111
|
if (index + 1 < rulerArray.length && rulerArray[index + 1] - changeDist < minValue) {
|
|
112
112
|
// 多余的
|
|
@@ -118,10 +118,10 @@ export default function (maxValue: number, minValue: number, num: number, option
|
|
|
118
118
|
return rulerArray_temp
|
|
119
119
|
}
|
|
120
120
|
|
|
121
|
-
|
|
122
|
-
|
|
121
|
+
const balanceMin = () => {
|
|
122
|
+
const rulerArray_temp = []
|
|
123
123
|
|
|
124
|
-
|
|
124
|
+
const changeDist = rulerArray[0] - option.min
|
|
125
125
|
for (let index = 0; index < rulerArray.length; index++) {
|
|
126
126
|
rulerArray_temp[index] = rulerArray[index] - changeDist
|
|
127
127
|
if (maxValue <= rulerArray_temp[index]) break
|
|
@@ -135,20 +135,20 @@ export default function (maxValue: number, minValue: number, num: number, option
|
|
|
135
135
|
// 上下界限制
|
|
136
136
|
if ('max' in option && 'min' in option && option.max >= maxValue && option.min <= minValue) {
|
|
137
137
|
|
|
138
|
-
|
|
138
|
+
const isAnswer = () => {
|
|
139
139
|
|
|
140
140
|
// 先判断原始的是否可行
|
|
141
141
|
if (rulerArray[0] >= option.min && rulerArray[rulerArray.length - 1] <= option.max) return true
|
|
142
142
|
|
|
143
143
|
// 再判断max调整是否可行
|
|
144
|
-
|
|
144
|
+
const rulerArray_max = balanceMax()
|
|
145
145
|
if (rulerArray_max[0] >= option.min && rulerArray_max[rulerArray_max.length - 1] <= option.max) {
|
|
146
146
|
rulerArray = rulerArray_max
|
|
147
147
|
return true
|
|
148
148
|
}
|
|
149
149
|
|
|
150
150
|
// 再判断max调整是否可行
|
|
151
|
-
|
|
151
|
+
const rulerArray_min = balanceMin()
|
|
152
152
|
if (rulerArray_min[0] >= option.min && rulerArray_min[rulerArray_max.length - 1] <= option.max) {
|
|
153
153
|
rulerArray = rulerArray_min
|
|
154
154
|
return true
|
|
@@ -184,5 +184,27 @@ export default function (maxValue: number, minValue: number, num: number, option
|
|
|
184
184
|
}
|
|
185
185
|
}
|
|
186
186
|
}
|
|
187
|
+
|
|
188
|
+
// 对结果进行对齐
|
|
189
|
+
// 2023年11月15日 于南京
|
|
190
|
+
for (let index = 0; index < rulerArray.length; index++) {
|
|
191
|
+
let valStr = rulerArray[index] + ""
|
|
192
|
+
|
|
193
|
+
// 只有小数需要处理
|
|
194
|
+
if (/\./.test(valStr)) {
|
|
195
|
+
|
|
196
|
+
// 1.0999999999999999
|
|
197
|
+
if (/9{7,}$/.test(valStr)) {
|
|
198
|
+
valStr = valStr.replace(/9{7,}$/, '')
|
|
199
|
+
rulerArray[index] = +(valStr.substring(0, valStr.length - 1) + ((+valStr[valStr.length - 1]) + 1))
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// 0.30000000000000004
|
|
203
|
+
else if (/0{7,}\d$/.test(valStr)) {
|
|
204
|
+
rulerArray[index] = +(valStr.replace(/0{7,}\d$/, ''))
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
187
209
|
return rulerArray
|
|
188
|
-
}
|
|
210
|
+
}
|
package/src/scale.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
// 点(x,y)围绕中心(cx,cy)缩放times倍
|
|
2
|
-
export default function (cx: number, cy: number, times: number, x: number, y: number): [number, number] {
|
|
3
|
-
return [
|
|
4
|
-
times * (x - cx) + cx,
|
|
5
|
-
times * (y - cy) + cy
|
|
6
|
-
]
|
|
1
|
+
// 点(x,y)围绕中心(cx,cy)缩放times倍
|
|
2
|
+
export default function (cx: number, cy: number, times: number, x: number, y: number): [number, number] {
|
|
3
|
+
return [
|
|
4
|
+
times * (x - cx) + cx,
|
|
5
|
+
times * (y - cy) + cy
|
|
6
|
+
]
|
|
7
7
|
}
|
package/src/shader/fsColor.c
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
precision mediump float;
|
|
2
|
-
|
|
3
|
-
uniform vec4 u_color;
|
|
4
|
-
|
|
5
|
-
void main()
|
|
6
|
-
{
|
|
7
|
-
gl_FragColor = u_color;
|
|
1
|
+
precision mediump float;
|
|
2
|
+
|
|
3
|
+
uniform vec4 u_color;
|
|
4
|
+
|
|
5
|
+
void main()
|
|
6
|
+
{
|
|
7
|
+
gl_FragColor = u_color;
|
|
8
8
|
}
|
package/src/shader/fsColors.c
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
precision mediump float;
|
|
2
|
-
|
|
3
|
-
varying vec4 v_color;
|
|
4
|
-
|
|
5
|
-
void main()
|
|
6
|
-
{
|
|
7
|
-
gl_FragColor = v_color;
|
|
1
|
+
precision mediump float;
|
|
2
|
+
|
|
3
|
+
varying vec4 v_color;
|
|
4
|
+
|
|
5
|
+
void main()
|
|
6
|
+
{
|
|
7
|
+
gl_FragColor = v_color;
|
|
8
8
|
}
|
package/src/shader/fsCube.c
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
precision mediump float;
|
|
2
|
-
|
|
3
|
-
varying vec3 v_normal;
|
|
4
|
-
uniform samplerCube u_texture;
|
|
5
|
-
|
|
6
|
-
void main()
|
|
7
|
-
{
|
|
8
|
-
gl_FragColor = textureCube(u_texture, normalize(v_normal));
|
|
1
|
+
precision mediump float;
|
|
2
|
+
|
|
3
|
+
varying vec3 v_normal;
|
|
4
|
+
uniform samplerCube u_texture;
|
|
5
|
+
|
|
6
|
+
void main()
|
|
7
|
+
{
|
|
8
|
+
gl_FragColor = textureCube(u_texture, normalize(v_normal));
|
|
9
9
|
}
|
package/src/shader/fsImage.c
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
precision mediump float;
|
|
2
|
-
|
|
3
|
-
uniform sampler2D u_sampler;
|
|
4
|
-
varying vec2 v_textcoord;
|
|
5
|
-
|
|
6
|
-
void main()
|
|
7
|
-
{
|
|
8
|
-
gl_FragColor = texture2D(u_sampler, v_textcoord);
|
|
1
|
+
precision mediump float;
|
|
2
|
+
|
|
3
|
+
uniform sampler2D u_sampler;
|
|
4
|
+
varying vec2 v_textcoord;
|
|
5
|
+
|
|
6
|
+
void main()
|
|
7
|
+
{
|
|
8
|
+
gl_FragColor = texture2D(u_sampler, v_textcoord);
|
|
9
9
|
}
|
package/src/shader/vsColor.c
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
attribute vec4 a_position;
|
|
2
|
-
uniform mat4 u_matrix;
|
|
3
|
-
|
|
4
|
-
void main()
|
|
5
|
-
{
|
|
6
|
-
vec4 temp = u_matrix * a_position;
|
|
7
|
-
|
|
8
|
-
// 把原生的WebGL使用的左手坐标系变成了右手坐标系
|
|
9
|
-
temp.z = -1.0 * temp.z;
|
|
10
|
-
|
|
11
|
-
// 表示眼睛距离vec4(0.0,0.0,1.0)的距离
|
|
12
|
-
float dist = 4.0;
|
|
13
|
-
|
|
14
|
-
// 使用投影直接计算
|
|
15
|
-
// 为保证纹理和相对位置正确
|
|
16
|
-
// x、y、z的改变满足线性变换
|
|
17
|
-
gl_Position = vec4((dist + 1.0) * temp.x, (dist + 1.0) * temp.y, dist * (dist + temp.z) + 1.0 - dist * dist, temp.w * 2.0 * (dist + temp.z));
|
|
1
|
+
attribute vec4 a_position;
|
|
2
|
+
uniform mat4 u_matrix;
|
|
3
|
+
|
|
4
|
+
void main()
|
|
5
|
+
{
|
|
6
|
+
vec4 temp = u_matrix * a_position;
|
|
7
|
+
|
|
8
|
+
// 把原生的WebGL使用的左手坐标系变成了右手坐标系
|
|
9
|
+
temp.z = -1.0 * temp.z;
|
|
10
|
+
|
|
11
|
+
// 表示眼睛距离vec4(0.0,0.0,1.0)的距离
|
|
12
|
+
float dist = 4.0;
|
|
13
|
+
|
|
14
|
+
// 使用投影直接计算
|
|
15
|
+
// 为保证纹理和相对位置正确
|
|
16
|
+
// x、y、z的改变满足线性变换
|
|
17
|
+
gl_Position = vec4((dist + 1.0) * temp.x, (dist + 1.0) * temp.y, dist * (dist + temp.z) + 1.0 - dist * dist, temp.w * 2.0 * (dist + temp.z));
|
|
18
18
|
}
|
package/src/shader/vsColors.c
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
attribute vec4 a_position;
|
|
2
|
-
uniform mat4 u_matrix;
|
|
3
|
-
attribute vec4 a_color;
|
|
4
|
-
varying vec4 v_color;
|
|
5
|
-
|
|
6
|
-
void main()
|
|
7
|
-
{
|
|
8
|
-
vec4 temp = u_matrix * a_position;
|
|
9
|
-
temp.z = -1.0 * temp.z;
|
|
10
|
-
float dist = 4.0;
|
|
11
|
-
gl_Position = vec4((dist + 1.0) * temp.x, (dist + 1.0) * temp.y, dist * (dist + temp.z) + 1.0 - dist * dist, temp.w * 2.0 * (dist + temp.z));
|
|
12
|
-
|
|
13
|
-
v_color = a_color;
|
|
1
|
+
attribute vec4 a_position;
|
|
2
|
+
uniform mat4 u_matrix;
|
|
3
|
+
attribute vec4 a_color;
|
|
4
|
+
varying vec4 v_color;
|
|
5
|
+
|
|
6
|
+
void main()
|
|
7
|
+
{
|
|
8
|
+
vec4 temp = u_matrix * a_position;
|
|
9
|
+
temp.z = -1.0 * temp.z;
|
|
10
|
+
float dist = 4.0;
|
|
11
|
+
gl_Position = vec4((dist + 1.0) * temp.x, (dist + 1.0) * temp.y, dist * (dist + temp.z) + 1.0 - dist * dist, temp.w * 2.0 * (dist + temp.z));
|
|
12
|
+
|
|
13
|
+
v_color = a_color;
|
|
14
14
|
}
|
package/src/shader/vsCube.c
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
attribute vec4 a_position;
|
|
2
|
-
uniform mat4 u_matrix;
|
|
3
|
-
attribute vec4 a_normal;
|
|
4
|
-
varying vec3 v_normal;
|
|
5
|
-
|
|
6
|
-
void main()
|
|
7
|
-
{
|
|
8
|
-
vec4 temp = u_matrix * a_position;
|
|
9
|
-
temp.z = -1.0 * temp.z;
|
|
10
|
-
float dist = 4.0;
|
|
11
|
-
gl_Position = vec4((dist + 1.0) * temp.x, (dist + 1.0) * temp.y, dist * (dist + temp.z) + 1.0 - dist * dist, temp.w * 2.0 * (dist + temp.z));
|
|
12
|
-
|
|
13
|
-
v_normal = normalize(vec3(a_normal));
|
|
1
|
+
attribute vec4 a_position;
|
|
2
|
+
uniform mat4 u_matrix;
|
|
3
|
+
attribute vec4 a_normal;
|
|
4
|
+
varying vec3 v_normal;
|
|
5
|
+
|
|
6
|
+
void main()
|
|
7
|
+
{
|
|
8
|
+
vec4 temp = u_matrix * a_position;
|
|
9
|
+
temp.z = -1.0 * temp.z;
|
|
10
|
+
float dist = 4.0;
|
|
11
|
+
gl_Position = vec4((dist + 1.0) * temp.x, (dist + 1.0) * temp.y, dist * (dist + temp.z) + 1.0 - dist * dist, temp.w * 2.0 * (dist + temp.z));
|
|
12
|
+
|
|
13
|
+
v_normal = normalize(vec3(a_normal));
|
|
14
14
|
}
|