vislite 1.7.0-alpha.0 → 1.7.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/AUTHORS.txt +6 -6
- package/CHANGELOG +13 -3
- package/LICENSE +20 -20
- package/README.md +1 -49
- package/lib/BarLayout/index.es.js +1 -1
- package/lib/BarLayout/index.es.min.js +1 -1
- package/lib/Buffer/index.es.js +1 -1
- package/lib/Buffer/index.es.min.js +1 -1
- package/lib/Canvas/index.es.js +1 -1
- package/lib/Canvas/index.es.min.js +1 -1
- package/lib/Cardinal/index.es.js +1 -1
- package/lib/Cardinal/index.es.min.js +1 -1
- package/lib/Eoap/index.es.js +1 -1
- package/lib/Eoap/index.es.min.js +1 -1
- package/lib/Hermite/index.es.js +1 -1
- package/lib/Hermite/index.es.min.js +1 -1
- package/lib/MapCoordinate/index.es.js +1 -1
- package/lib/MapCoordinate/index.es.min.js +1 -1
- package/lib/Matrix4/index.es.js +1 -1
- package/lib/Matrix4/index.es.min.js +1 -1
- package/lib/Mercator/index.es.js +1 -1
- package/lib/Mercator/index.es.min.js +1 -1
- package/lib/PieLayout/index.es.js +1 -1
- package/lib/PieLayout/index.es.min.js +1 -1
- package/lib/RawCanvas/index.es.js +1 -1
- package/lib/RawCanvas/index.es.min.js +1 -1
- package/lib/SVG/index.es.js +91 -2
- package/lib/SVG/index.es.min.js +2 -2
- package/lib/Shader/index.es.js +1 -1
- package/lib/Shader/index.es.min.js +1 -1
- package/lib/Texture/index.es.js +1 -1
- package/lib/Texture/index.es.min.js +1 -1
- package/lib/TreeLayout/index.es.js +1 -1
- package/lib/TreeLayout/index.es.min.js +1 -1
- package/lib/animation/index.es.js +1 -1
- package/lib/animation/index.es.min.js +1 -1
- package/lib/assemble/index.es.js +1 -1
- package/lib/assemble/index.es.min.js +1 -1
- package/lib/getLoopColors/index.es.js +1 -1
- package/lib/getLoopColors/index.es.min.js +1 -1
- package/lib/getWebGLContext/index.es.js +1 -1
- package/lib/getWebGLContext/index.es.min.js +1 -1
- package/lib/index.umd.js +91 -2
- package/lib/index.umd.min.js +3 -3
- package/lib/initOption/index.es.js +1 -1
- package/lib/initOption/index.es.min.js +1 -1
- package/lib/mergeOption/index.es.js +1 -1
- package/lib/mergeOption/index.es.min.js +1 -1
- package/lib/move/index.es.js +1 -1
- package/lib/move/index.es.min.js +1 -1
- package/lib/rotate/index.es.js +1 -1
- package/lib/rotate/index.es.min.js +1 -1
- package/lib/ruler/index.es.js +1 -1
- package/lib/ruler/index.es.min.js +1 -1
- package/lib/scale/index.es.js +1 -1
- package/lib/scale/index.es.min.js +1 -1
- package/lib/throttle/index.es.js +1 -1
- package/lib/throttle/index.es.min.js +1 -1
- package/minialipay/ui-canvas/drawImage.js +35 -35
- package/minialipay/ui-canvas/index.acss +4 -4
- package/minialipay/ui-canvas/index.axml +3 -3
- package/minialipay/ui-canvas/index.d.ts +1 -1
- package/minialipay/ui-canvas/index.js +100 -100
- package/minialipay/ui-canvas/index.json +6 -6
- package/miniprogram/ui-canvas/drawImage.js +35 -35
- package/miniprogram/ui-canvas/index.js +125 -125
- 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/BarLayout/index.ts +2 -2
- 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/Hermite/index.ts +2 -2
- package/package/MapCoordinate/index.ts +2 -2
- package/package/Matrix4/index.ts +2 -2
- package/package/Mercator/index.ts +2 -2
- package/package/PieLayout/index.ts +2 -2
- package/package/RawCanvas/index.ts +2 -2
- package/package/SVG/index.ts +2 -2
- package/package/Shader/index.ts +2 -2
- package/package/Texture/index.ts +2 -2
- package/package/TreeLayout/index.ts +2 -2
- package/package/animation/index.ts +5 -5
- package/package/assemble/index.ts +2 -2
- package/package/getLoopColors/index.ts +2 -2
- package/package/getWebGLContext/index.ts +40 -40
- package/package/index.ts +84 -84
- package/package/initOption/index.ts +2 -2
- package/package/mergeOption/index.ts +2 -2
- package/package/move/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.json +1 -1
- package/src/Canvas.ts +89 -89
- package/src/Eoap.ts +66 -66
- package/src/Matrix4/index.ts +84 -84
- 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 +55 -55
- package/src/common/assemble.ts +22 -22
- package/src/common/canvas/arc.ts +51 -51
- package/src/common/canvas/config.ts +176 -176
- package/src/common/canvas/default.ts +64 -64
- package/src/common/canvas/gradient.ts +31 -31
- package/src/common/canvas/index.ts +188 -188
- package/src/common/canvas/painter.ts +453 -453
- package/src/common/canvas/texts.ts +18 -18
- package/src/common/map/getBoundary.ts +15 -15
- package/src/common/map/tool.ts +29 -29
- package/src/common/option.ts +29 -29
- package/src/common/setStyle.ts +5 -5
- package/src/common/svg/config.ts +213 -213
- package/src/common/svg/default.ts +29 -29
- package/src/common/svg/gradient.ts +53 -53
- package/src/common/svg/index.ts +89 -2
- package/src/common/svg/tool.ts +51 -51
- package/src/common/tree/index.ts +25 -25
- package/src/common/tree/toInnerTree.ts +61 -61
- package/src/common/tree/toPlainTree.ts +135 -135
- package/src/common/type.ts +26 -26
- package/src/common/webgl/buffer.ts +79 -79
- package/src/common/webgl/getWebGLContext.ts +45 -45
- package/src/common/webgl/shader.ts +75 -75
- package/src/common/webgl/texture.ts +98 -98
- package/src/coordinate/MapCoordinate.ts +80 -80
- package/src/getLoopColors.ts +42 -42
- package/src/interpolation/Cardinal.ts +110 -110
- package/src/interpolation/Hermite.ts +65 -65
- package/src/layout/BarLayout.ts +249 -249
- package/src/layout/PieLayout.ts +144 -144
- package/src/layout/TreeLayout.ts +200 -200
- package/src/move.ts +7 -7
- package/src/rotate.ts +7 -7
- package/src/ruler.ts +209 -209
- package/src/scale.ts +6 -6
- package/types/Bar.d.ts +91 -91
- package/types/BarConfig.d.ts +4 -4
- package/types/BarLayout.d.ts +48 -48
- package/types/BarOption.d.ts +31 -31
- package/types/Buffer.d.ts +23 -23
- package/types/Canvas.d.ts +375 -375
- package/types/CanvasConfig.d.ts +88 -88
- package/types/CanvasOption.d.ts +13 -13
- package/types/CanvasOpts.d.ts +9 -9
- package/types/Cardinal.d.ts +13 -13
- package/types/Gradient.d.ts +14 -14
- package/types/Hermite.d.ts +18 -18
- package/types/Map.d.ts +9 -9
- package/types/MapConfig.d.ts +27 -27
- package/types/MapCoordinate.d.ts +22 -22
- package/types/Matrix4.d.ts +47 -47
- package/types/Pie.d.ts +73 -73
- package/types/PieConfig.d.ts +26 -26
- package/types/PieLayout.d.ts +40 -40
- package/types/PieOption.d.ts +21 -21
- package/types/SVG.d.ts +31 -0
- package/types/SVGConfig.d.ts +71 -71
- package/types/Shader.d.ts +16 -16
- package/types/Texture.d.ts +16 -16
- package/types/Tree.d.ts +74 -74
- package/types/TreeConfig.d.ts +36 -36
- package/types/TreeLayout.d.ts +59 -59
- package/types/TreeOption.d.ts +48 -48
- package/types/animation.d.ts +11 -11
- package/types/assemble.d.ts +5 -5
- package/types/getLoopColors.d.ts +5 -5
- package/types/getWebGLContext.d.ts +7 -7
- package/types/index.d.ts +195 -195
- package/types/move.d.ts +5 -5
- package/types/option.d.ts +12 -12
- package/types/painterConfig.d.ts +4 -4
- package/types/rotate.d.ts +5 -5
- package/types/ruler.d.ts +10 -10
- package/types/scale.d.ts +5 -5
- package/types/throttle.d.ts +5 -5
- package/types/ui-canvas.d.ts +4 -4
- package/types/uni-canvas.d.ts +3 -3
- package/uni-app/drawImage.js +19 -19
- package/uni-app/ui-canvas.vue +295 -295
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
import type { arcCapType, textAlignType, textBaselineType, lineCapType, lineJoinType } from "../../../types/painterConfig"
|
|
2
|
-
|
|
3
|
-
export default function () {
|
|
4
|
-
return {
|
|
5
|
-
// 颜色
|
|
6
|
-
fillStyle: "rgb(0,0,0)",
|
|
7
|
-
strokeStyle: "rgb(0,0,0)",
|
|
8
|
-
|
|
9
|
-
// 文字对齐方式
|
|
10
|
-
textAlign: <textAlignType>"left",
|
|
11
|
-
textBaseline: <textBaselineType>"middle",
|
|
12
|
-
|
|
13
|
-
// 文字
|
|
14
|
-
"fontSize": 16,
|
|
15
|
-
"fontFamily": "sans-serif",
|
|
16
|
-
|
|
17
|
-
// arc二端闭合方式['butt':直线闭合,'round':圆帽闭合]
|
|
18
|
-
"arcStartCap": <arcCapType>"butt",
|
|
19
|
-
"arcEndCap": <arcCapType>"butt",
|
|
20
|
-
|
|
21
|
-
// 线条
|
|
22
|
-
lineDash: [],
|
|
23
|
-
lineWidth: 1,
|
|
24
|
-
lineCap: <lineCapType>"butt",
|
|
25
|
-
lineJoin: <lineJoinType>"miter",
|
|
26
|
-
|
|
27
|
-
// 矩形圆角半径
|
|
28
|
-
"rectRadius": []
|
|
29
|
-
}
|
|
1
|
+
import type { arcCapType, textAlignType, textBaselineType, lineCapType, lineJoinType } from "../../../types/painterConfig"
|
|
2
|
+
|
|
3
|
+
export default function () {
|
|
4
|
+
return {
|
|
5
|
+
// 颜色
|
|
6
|
+
fillStyle: "rgb(0,0,0)",
|
|
7
|
+
strokeStyle: "rgb(0,0,0)",
|
|
8
|
+
|
|
9
|
+
// 文字对齐方式
|
|
10
|
+
textAlign: <textAlignType>"left",
|
|
11
|
+
textBaseline: <textBaselineType>"middle",
|
|
12
|
+
|
|
13
|
+
// 文字
|
|
14
|
+
"fontSize": 16,
|
|
15
|
+
"fontFamily": "sans-serif",
|
|
16
|
+
|
|
17
|
+
// arc二端闭合方式['butt':直线闭合,'round':圆帽闭合]
|
|
18
|
+
"arcStartCap": <arcCapType>"butt",
|
|
19
|
+
"arcEndCap": <arcCapType>"butt",
|
|
20
|
+
|
|
21
|
+
// 线条
|
|
22
|
+
lineDash: [],
|
|
23
|
+
lineWidth: 1,
|
|
24
|
+
lineCap: <lineCapType>"butt",
|
|
25
|
+
lineJoin: <lineJoinType>"miter",
|
|
26
|
+
|
|
27
|
+
// 矩形圆角半径
|
|
28
|
+
"rectRadius": []
|
|
29
|
+
}
|
|
30
30
|
}
|
|
@@ -1,53 +1,53 @@
|
|
|
1
|
-
import { initDefs } from './config'
|
|
2
|
-
import { toNode, setAttribute } from "./tool"
|
|
3
|
-
|
|
4
|
-
const enhanceGradient = function (gradient: SVGElement, gradientId: string) {
|
|
5
|
-
const enhanceGradient = {
|
|
6
|
-
"value": function () {
|
|
7
|
-
return "url(#" + gradientId + ")"
|
|
8
|
-
},
|
|
9
|
-
"setColor": function (stop: number, color: string) {
|
|
10
|
-
|
|
11
|
-
const stopEl = toNode("stop")
|
|
12
|
-
gradient.appendChild(stopEl)
|
|
13
|
-
setAttribute(stopEl, "offset", (stop * 100) + "%")
|
|
14
|
-
setAttribute(stopEl, "style", "stop-color:" + color + ";")
|
|
15
|
-
|
|
16
|
-
return enhanceGradient
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
return enhanceGradient
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
// 线性渐变
|
|
23
|
-
export const linearGradient = function (el: SVGElement, x0: number, y0: number, x1: number, y1: number) {
|
|
24
|
-
|
|
25
|
-
const defs = initDefs(el)
|
|
26
|
-
const gradientId = "visliteLg" + new Date().valueOf() + "" + (Math.random() * 1000000).toFixed(0)
|
|
27
|
-
|
|
28
|
-
const linearGradient = toNode("linearGradient")
|
|
29
|
-
defs.appendChild(linearGradient)
|
|
30
|
-
setAttribute(linearGradient, "id", gradientId)
|
|
31
|
-
setAttribute(linearGradient, "x1", x0 + "%")
|
|
32
|
-
setAttribute(linearGradient, "y1", y0 + "%")
|
|
33
|
-
setAttribute(linearGradient, "x2", x1 + "%")
|
|
34
|
-
setAttribute(linearGradient, "y2", y1 + "%")
|
|
35
|
-
|
|
36
|
-
return enhanceGradient(linearGradient, gradientId)
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
// 环形渐变
|
|
40
|
-
export const radialGradient = function (el: SVGElement, cx: number, cy: number, r: number) {
|
|
41
|
-
|
|
42
|
-
const defs = initDefs(el)
|
|
43
|
-
const gradientId = "visliteRg" + new Date().valueOf() + "" + (Math.random() * 1000000).toFixed(0)
|
|
44
|
-
|
|
45
|
-
const radialGradient = toNode("radialGradient")
|
|
46
|
-
defs.appendChild(radialGradient)
|
|
47
|
-
setAttribute(radialGradient, "id", gradientId)
|
|
48
|
-
setAttribute(radialGradient, "cx", cx + "%")
|
|
49
|
-
setAttribute(radialGradient, "cy", cy + "%")
|
|
50
|
-
setAttribute(radialGradient, "r", r + "%")
|
|
51
|
-
|
|
52
|
-
return enhanceGradient(radialGradient, gradientId)
|
|
53
|
-
}
|
|
1
|
+
import { initDefs } from './config'
|
|
2
|
+
import { toNode, setAttribute } from "./tool"
|
|
3
|
+
|
|
4
|
+
const enhanceGradient = function (gradient: SVGElement, gradientId: string) {
|
|
5
|
+
const enhanceGradient = {
|
|
6
|
+
"value": function () {
|
|
7
|
+
return "url(#" + gradientId + ")"
|
|
8
|
+
},
|
|
9
|
+
"setColor": function (stop: number, color: string) {
|
|
10
|
+
|
|
11
|
+
const stopEl = toNode("stop")
|
|
12
|
+
gradient.appendChild(stopEl)
|
|
13
|
+
setAttribute(stopEl, "offset", (stop * 100) + "%")
|
|
14
|
+
setAttribute(stopEl, "style", "stop-color:" + color + ";")
|
|
15
|
+
|
|
16
|
+
return enhanceGradient
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return enhanceGradient
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// 线性渐变
|
|
23
|
+
export const linearGradient = function (el: SVGElement, x0: number, y0: number, x1: number, y1: number) {
|
|
24
|
+
|
|
25
|
+
const defs = initDefs(el)
|
|
26
|
+
const gradientId = "visliteLg" + new Date().valueOf() + "" + (Math.random() * 1000000).toFixed(0)
|
|
27
|
+
|
|
28
|
+
const linearGradient = toNode("linearGradient")
|
|
29
|
+
defs.appendChild(linearGradient)
|
|
30
|
+
setAttribute(linearGradient, "id", gradientId)
|
|
31
|
+
setAttribute(linearGradient, "x1", x0 + "%")
|
|
32
|
+
setAttribute(linearGradient, "y1", y0 + "%")
|
|
33
|
+
setAttribute(linearGradient, "x2", x1 + "%")
|
|
34
|
+
setAttribute(linearGradient, "y2", y1 + "%")
|
|
35
|
+
|
|
36
|
+
return enhanceGradient(linearGradient, gradientId)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// 环形渐变
|
|
40
|
+
export const radialGradient = function (el: SVGElement, cx: number, cy: number, r: number) {
|
|
41
|
+
|
|
42
|
+
const defs = initDefs(el)
|
|
43
|
+
const gradientId = "visliteRg" + new Date().valueOf() + "" + (Math.random() * 1000000).toFixed(0)
|
|
44
|
+
|
|
45
|
+
const radialGradient = toNode("radialGradient")
|
|
46
|
+
defs.appendChild(radialGradient)
|
|
47
|
+
setAttribute(radialGradient, "id", gradientId)
|
|
48
|
+
setAttribute(radialGradient, "cx", cx + "%")
|
|
49
|
+
setAttribute(radialGradient, "cy", cy + "%")
|
|
50
|
+
setAttribute(radialGradient, "r", r + "%")
|
|
51
|
+
|
|
52
|
+
return enhanceGradient(radialGradient, gradientId)
|
|
53
|
+
}
|
package/src/common/svg/index.ts
CHANGED
|
@@ -19,6 +19,10 @@ class SVG {
|
|
|
19
19
|
private __path: string = ""
|
|
20
20
|
private __currentPosition: number[] = []
|
|
21
21
|
|
|
22
|
+
// 变换(和canvas2D的类似,内部维护了用于记录)
|
|
23
|
+
private __transform_history: Array<string> = []
|
|
24
|
+
private __transform_current = ""
|
|
25
|
+
|
|
22
26
|
protected __svg: SVGElement
|
|
23
27
|
constructor(svg: SVGElement) {
|
|
24
28
|
this.__svg = svg
|
|
@@ -85,7 +89,7 @@ class SVG {
|
|
|
85
89
|
path: "path",
|
|
86
90
|
arc: "path",
|
|
87
91
|
circle: "circle",
|
|
88
|
-
rect: "
|
|
92
|
+
rect: "path",
|
|
89
93
|
}[el] || ""
|
|
90
94
|
|
|
91
95
|
if (_el == "") throw new Error("Unsupported drawing method:" + el)
|
|
@@ -128,18 +132,27 @@ class SVG {
|
|
|
128
132
|
// deg表示文字旋转角度,是角度值,不是弧度
|
|
129
133
|
fillText(text: string, x: number, y: number, deg: number = 0) {
|
|
130
134
|
initText(this.__useEl, this.__config, x, y, deg)
|
|
135
|
+
this.attr({
|
|
136
|
+
transform: this.__transform_current
|
|
137
|
+
})
|
|
131
138
|
this.__useEl.textContent = text
|
|
132
139
|
fill(this.__useEl, this.__config)
|
|
133
140
|
return this
|
|
134
141
|
}
|
|
135
142
|
strokeText(text: string, x: number, y: number, deg: number = 0) {
|
|
136
143
|
initText(this.__useEl, this.__config, x, y, deg)
|
|
144
|
+
this.attr({
|
|
145
|
+
transform: this.__transform_current
|
|
146
|
+
})
|
|
137
147
|
this.__useEl.textContent = text
|
|
138
148
|
stroke(this.__useEl, this.__config)
|
|
139
149
|
return this
|
|
140
150
|
}
|
|
141
151
|
fullText(text: string, x: number, y: number, deg: number = 0) {
|
|
142
152
|
initText(this.__useEl, this.__config, x, y, deg)
|
|
153
|
+
this.attr({
|
|
154
|
+
transform: this.__transform_current
|
|
155
|
+
})
|
|
143
156
|
this.__useEl.textContent = text
|
|
144
157
|
full(this.__useEl, this.__config)
|
|
145
158
|
return this
|
|
@@ -155,6 +168,9 @@ class SVG {
|
|
|
155
168
|
deg: number
|
|
156
169
|
) {
|
|
157
170
|
initArc(this.__useEl, this.__config, cx, cy, r1, r2, beginDeg, deg)
|
|
171
|
+
this.attr({
|
|
172
|
+
transform: this.__transform_current
|
|
173
|
+
})
|
|
158
174
|
fill(this.__useEl, this.__config)
|
|
159
175
|
return this
|
|
160
176
|
}
|
|
@@ -167,6 +183,9 @@ class SVG {
|
|
|
167
183
|
deg: number
|
|
168
184
|
) {
|
|
169
185
|
initArc(this.__useEl, this.__config, cx, cy, r1, r2, beginDeg, deg)
|
|
186
|
+
this.attr({
|
|
187
|
+
transform: this.__transform_current
|
|
188
|
+
})
|
|
170
189
|
stroke(this.__useEl, this.__config)
|
|
171
190
|
return this
|
|
172
191
|
}
|
|
@@ -179,6 +198,9 @@ class SVG {
|
|
|
179
198
|
deg: number
|
|
180
199
|
) {
|
|
181
200
|
initArc(this.__useEl, this.__config, cx, cy, r1, r2, beginDeg, deg)
|
|
201
|
+
this.attr({
|
|
202
|
+
transform: this.__transform_current
|
|
203
|
+
})
|
|
182
204
|
full(this.__useEl, this.__config)
|
|
183
205
|
return this
|
|
184
206
|
}
|
|
@@ -186,16 +208,25 @@ class SVG {
|
|
|
186
208
|
// 圆形
|
|
187
209
|
fillCircle(cx: number, cy: number, r: number) {
|
|
188
210
|
initCircle(this.__useEl, cx, cy, r)
|
|
211
|
+
this.attr({
|
|
212
|
+
transform: this.__transform_current
|
|
213
|
+
})
|
|
189
214
|
fill(this.__useEl, this.__config)
|
|
190
215
|
return this
|
|
191
216
|
}
|
|
192
217
|
strokeCircle(cx: number, cy: number, r: number) {
|
|
193
218
|
initCircle(this.__useEl, cx, cy, r)
|
|
219
|
+
this.attr({
|
|
220
|
+
transform: this.__transform_current
|
|
221
|
+
})
|
|
194
222
|
stroke(this.__useEl, this.__config)
|
|
195
223
|
return this
|
|
196
224
|
}
|
|
197
225
|
fullCircle(cx: number, cy: number, r: number) {
|
|
198
226
|
initCircle(this.__useEl, cx, cy, r)
|
|
227
|
+
this.attr({
|
|
228
|
+
transform: this.__transform_current
|
|
229
|
+
})
|
|
199
230
|
full(this.__useEl, this.__config)
|
|
200
231
|
return this
|
|
201
232
|
}
|
|
@@ -203,16 +234,25 @@ class SVG {
|
|
|
203
234
|
// 矩形
|
|
204
235
|
fillRect(x: number, y: number, width: number, height: number) {
|
|
205
236
|
initRect(this.__useEl, this.__config, x, y, width, height)
|
|
237
|
+
this.attr({
|
|
238
|
+
transform: this.__transform_current
|
|
239
|
+
})
|
|
206
240
|
fill(this.__useEl, this.__config)
|
|
207
241
|
return this
|
|
208
242
|
}
|
|
209
243
|
strokeRect(x: number, y: number, width: number, height: number) {
|
|
210
244
|
initRect(this.__useEl, this.__config, x, y, width, height)
|
|
245
|
+
this.attr({
|
|
246
|
+
transform: this.__transform_current
|
|
247
|
+
})
|
|
211
248
|
stroke(this.__useEl, this.__config)
|
|
212
249
|
return this
|
|
213
250
|
}
|
|
214
251
|
fullRect(x: number, y: number, width: number, height: number) {
|
|
215
252
|
initRect(this.__useEl, this.__config, x, y, width, height)
|
|
253
|
+
this.attr({
|
|
254
|
+
transform: this.__transform_current
|
|
255
|
+
})
|
|
216
256
|
full(this.__useEl, this.__config)
|
|
217
257
|
return this
|
|
218
258
|
}
|
|
@@ -241,20 +281,38 @@ class SVG {
|
|
|
241
281
|
}
|
|
242
282
|
fill() {
|
|
243
283
|
initPath(this.__useEl, this.__path)
|
|
284
|
+
this.attr({
|
|
285
|
+
transform: this.__transform_current
|
|
286
|
+
})
|
|
244
287
|
fill(this.__useEl, this.__config)
|
|
245
288
|
return this
|
|
246
289
|
}
|
|
247
290
|
stroke() {
|
|
248
291
|
initPath(this.__useEl, this.__path)
|
|
292
|
+
this.attr({
|
|
293
|
+
transform: this.__transform_current
|
|
294
|
+
})
|
|
249
295
|
stroke(this.__useEl, this.__config)
|
|
250
296
|
return this
|
|
251
297
|
}
|
|
252
298
|
full() {
|
|
253
299
|
initPath(this.__useEl, this.__path)
|
|
300
|
+
this.attr({
|
|
301
|
+
transform: this.__transform_current
|
|
302
|
+
})
|
|
254
303
|
full(this.__useEl, this.__config)
|
|
255
304
|
return this
|
|
256
305
|
}
|
|
257
306
|
|
|
307
|
+
save() {
|
|
308
|
+
this.__transform_history.push(this.__transform_current);
|
|
309
|
+
return this
|
|
310
|
+
}
|
|
311
|
+
restore() {
|
|
312
|
+
if (this.__transform_history.length > 0) this.__transform_current = this.__transform_history.pop() as string;
|
|
313
|
+
return this
|
|
314
|
+
}
|
|
315
|
+
|
|
258
316
|
arc(x: number, y: number, r: number, beginDeg: number, deg: number) {
|
|
259
317
|
const begPosition = rotate(x, y, (beginDeg / 180) * Math.PI, x + r, y)
|
|
260
318
|
const endPosition = rotate(
|
|
@@ -317,7 +375,6 @@ class SVG {
|
|
|
317
375
|
return this
|
|
318
376
|
}
|
|
319
377
|
|
|
320
|
-
|
|
321
378
|
// 线性渐变
|
|
322
379
|
createLinearGradient(x0: number, y0: number, x1: number, y1: number) {
|
|
323
380
|
return linearGradient(this.__svg, x0, y0, x1, y1)
|
|
@@ -327,6 +384,36 @@ class SVG {
|
|
|
327
384
|
createRadialGradient(cx: number, cy: number, r: number) {
|
|
328
385
|
return radialGradient(this.__svg, cx, cy, r)
|
|
329
386
|
}
|
|
387
|
+
|
|
388
|
+
// 转换画布
|
|
389
|
+
translate(dx: number, dy: number) {
|
|
390
|
+
this.__transform_current += ' translate(' + dx + ',' + dy + ')'
|
|
391
|
+
return this
|
|
392
|
+
}
|
|
393
|
+
rotate(deg: number) {
|
|
394
|
+
this.__transform_current += ' rotate(' + deg + ')'
|
|
395
|
+
return this
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
// 扩展绘制方法
|
|
399
|
+
install(methods: {
|
|
400
|
+
[key: string]: Function
|
|
401
|
+
}): any {
|
|
402
|
+
for (const key in methods) {
|
|
403
|
+
|
|
404
|
+
if (key in this) {
|
|
405
|
+
throw new Error("VISLite SVG:Method already exists and cannot be overwritten.")
|
|
406
|
+
} else {
|
|
407
|
+
(this as any)[key] = (...args: any) => {
|
|
408
|
+
const value = methods[key].apply(this, args)
|
|
409
|
+
if (value != void 0) return value
|
|
410
|
+
return this
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
}
|
|
415
|
+
return this
|
|
416
|
+
}
|
|
330
417
|
}
|
|
331
418
|
|
|
332
419
|
export default SVG
|
package/src/common/svg/tool.ts
CHANGED
|
@@ -1,52 +1,52 @@
|
|
|
1
|
-
import type SVGConfigType from '../../../types/SVGConfig'
|
|
2
|
-
|
|
3
|
-
import { XLINK_ATTRIBUTE } from "./dictionary"
|
|
4
|
-
|
|
5
|
-
const setLineAttr = (el: SVGElement, config: SVGConfigType) => {
|
|
6
|
-
setAttribute(el, "stroke-dasharray", (config.lineDash as Array<number>).join(','))
|
|
7
|
-
setAttribute(el, "stroke-width", config.lineWidth + "")
|
|
8
|
-
setAttribute(el, "stroke-linecap", config.lineCap + "")
|
|
9
|
-
setAttribute(el, "stroke-linejoin", config.lineJoin + "")
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
// 新建节点
|
|
13
|
-
export function toNode(tagname: string) {
|
|
14
|
-
return document.createElementNS('http://www.w3.org/2000/svg', tagname)
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
// 设置属性
|
|
18
|
-
const _setAttribute = function (el: SVGElement, key: string, value: string | number) {
|
|
19
|
-
|
|
20
|
-
// 需要使用xlink命名空间的xml属性
|
|
21
|
-
if (XLINK_ATTRIBUTE.indexOf(key) > -1) {
|
|
22
|
-
el.setAttributeNS("http://www.w3.org/1999/xlink", 'xlink:' + key, value + "")
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
// 否则
|
|
26
|
-
else {
|
|
27
|
-
el.setAttribute(key, value + "")
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
export const setAttribute = _setAttribute
|
|
31
|
-
|
|
32
|
-
// 获取属性
|
|
33
|
-
export function getAttribute(el: SVGElement, key: string) {
|
|
34
|
-
if (XLINK_ATTRIBUTE.indexOf(key) > -1) key = 'xlink:' + key
|
|
35
|
-
return el.getAttribute(key)
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export function full(el: SVGElement, config: SVGConfigType) {
|
|
39
|
-
setLineAttr(el, config)
|
|
40
|
-
_setAttribute(el, "stroke", config.strokeStyle as string)
|
|
41
|
-
_setAttribute(el, "fill", config.fillStyle as string)
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
export function fill(el: SVGElement, config: SVGConfigType) {
|
|
45
|
-
_setAttribute(el, "fill", config.fillStyle as string)
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
export function stroke(el: SVGElement, config: SVGConfigType) {
|
|
49
|
-
setLineAttr(el, config)
|
|
50
|
-
_setAttribute(el, "stroke", config.strokeStyle as string)
|
|
51
|
-
_setAttribute(el, "fill", "none")
|
|
1
|
+
import type SVGConfigType from '../../../types/SVGConfig'
|
|
2
|
+
|
|
3
|
+
import { XLINK_ATTRIBUTE } from "./dictionary"
|
|
4
|
+
|
|
5
|
+
const setLineAttr = (el: SVGElement, config: SVGConfigType) => {
|
|
6
|
+
setAttribute(el, "stroke-dasharray", (config.lineDash as Array<number>).join(','))
|
|
7
|
+
setAttribute(el, "stroke-width", config.lineWidth + "")
|
|
8
|
+
setAttribute(el, "stroke-linecap", config.lineCap + "")
|
|
9
|
+
setAttribute(el, "stroke-linejoin", config.lineJoin + "")
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
// 新建节点
|
|
13
|
+
export function toNode(tagname: string) {
|
|
14
|
+
return document.createElementNS('http://www.w3.org/2000/svg', tagname)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// 设置属性
|
|
18
|
+
const _setAttribute = function (el: SVGElement, key: string, value: string | number) {
|
|
19
|
+
|
|
20
|
+
// 需要使用xlink命名空间的xml属性
|
|
21
|
+
if (XLINK_ATTRIBUTE.indexOf(key) > -1) {
|
|
22
|
+
el.setAttributeNS("http://www.w3.org/1999/xlink", 'xlink:' + key, value + "")
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// 否则
|
|
26
|
+
else {
|
|
27
|
+
el.setAttribute(key, value + "")
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export const setAttribute = _setAttribute
|
|
31
|
+
|
|
32
|
+
// 获取属性
|
|
33
|
+
export function getAttribute(el: SVGElement, key: string) {
|
|
34
|
+
if (XLINK_ATTRIBUTE.indexOf(key) > -1) key = 'xlink:' + key
|
|
35
|
+
return el.getAttribute(key)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function full(el: SVGElement, config: SVGConfigType) {
|
|
39
|
+
setLineAttr(el, config)
|
|
40
|
+
_setAttribute(el, "stroke", config.strokeStyle as string)
|
|
41
|
+
_setAttribute(el, "fill", config.fillStyle as string)
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function fill(el: SVGElement, config: SVGConfigType) {
|
|
45
|
+
_setAttribute(el, "fill", config.fillStyle as string)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export function stroke(el: SVGElement, config: SVGConfigType) {
|
|
49
|
+
setLineAttr(el, config)
|
|
50
|
+
_setAttribute(el, "stroke", config.strokeStyle as string)
|
|
51
|
+
_setAttribute(el, "fill", "none")
|
|
52
52
|
}
|
package/src/common/tree/index.ts
CHANGED
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import type TreeConfigType from '../../../types/TreeConfig'
|
|
2
|
-
import type { TreeResultType } from '../../../types/Tree'
|
|
3
|
-
|
|
4
|
-
import toPlainTree from './toPlainTree'
|
|
5
|
-
import { initOption } from '../option'
|
|
6
|
-
|
|
7
|
-
class Tree {
|
|
8
|
-
readonly name: string = 'Tree'
|
|
9
|
-
|
|
10
|
-
private __config: TreeConfigType
|
|
11
|
-
|
|
12
|
-
constructor(config: TreeConfigType = {}) {
|
|
13
|
-
this.__config = initOption(config, {
|
|
14
|
-
root: (initTree: any) => initTree,
|
|
15
|
-
children: (parentTree: any) => parentTree.children,
|
|
16
|
-
id: (treedata: any) => treedata.name
|
|
17
|
-
})
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
use(initTree: any, noOpens = {}): TreeResultType {
|
|
21
|
-
return toPlainTree(initTree, this.__config, noOpens)
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
}
|
|
25
|
-
|
|
1
|
+
import type TreeConfigType from '../../../types/TreeConfig'
|
|
2
|
+
import type { TreeResultType } from '../../../types/Tree'
|
|
3
|
+
|
|
4
|
+
import toPlainTree from './toPlainTree'
|
|
5
|
+
import { initOption } from '../option'
|
|
6
|
+
|
|
7
|
+
class Tree {
|
|
8
|
+
readonly name: string = 'Tree'
|
|
9
|
+
|
|
10
|
+
private __config: TreeConfigType
|
|
11
|
+
|
|
12
|
+
constructor(config: TreeConfigType = {}) {
|
|
13
|
+
this.__config = initOption(config, {
|
|
14
|
+
root: (initTree: any) => initTree,
|
|
15
|
+
children: (parentTree: any) => parentTree.children,
|
|
16
|
+
id: (treedata: any) => treedata.name
|
|
17
|
+
})
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
use(initTree: any, noOpens = {}): TreeResultType {
|
|
21
|
+
return toPlainTree(initTree, this.__config, noOpens)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
}
|
|
25
|
+
|
|
26
26
|
export default Tree
|
|
@@ -1,62 +1,62 @@
|
|
|
1
|
-
import type { default as TreeConfigType, rootType, childrenType, idType } from '../../../types/TreeConfig'
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* 根据配置的层次关系(配置的id,child,root)把原始数据变成内部结构,方便后期位置计算
|
|
5
|
-
*
|
|
6
|
-
* tempTree[id] = {
|
|
7
|
-
* "data": 原始数据,
|
|
8
|
-
* "pid": 父亲ID,
|
|
9
|
-
* "id": 唯一标识ID,
|
|
10
|
-
* "show": boolean,
|
|
11
|
-
* "isOpen": boolean,
|
|
12
|
-
* "children": [cid1、cid2、...]
|
|
13
|
-
* }
|
|
14
|
-
*/
|
|
15
|
-
export default (initTree: any, config: TreeConfigType) => {
|
|
16
|
-
const tempTree: {
|
|
17
|
-
[key: string]: any
|
|
18
|
-
} = {}
|
|
19
|
-
|
|
20
|
-
// 根结点
|
|
21
|
-
const temp = (config.root as rootType)(initTree)
|
|
22
|
-
let id: number | string, rid: number | string
|
|
23
|
-
id = rid = (config.id as idType)(temp)
|
|
24
|
-
tempTree[id] = {
|
|
25
|
-
"data": temp,
|
|
26
|
-
"pid": null,
|
|
27
|
-
"id": id,
|
|
28
|
-
"isOpen": true,
|
|
29
|
-
"show": true,
|
|
30
|
-
"deg": 0,
|
|
31
|
-
"children": []
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
let num: number = 1
|
|
35
|
-
|
|
36
|
-
// 根据传递的原始数据,生成内部统一结构
|
|
37
|
-
; (function createTree(pdata: any, pid: number | string) {
|
|
38
|
-
const children = (config.children as childrenType)(pdata, initTree)
|
|
39
|
-
num += children ? children.length : 0
|
|
40
|
-
for (let flag = 0; children && flag < children.length; flag++) {
|
|
41
|
-
id = (config.id as idType)(children[flag])
|
|
42
|
-
tempTree[pid].children.push(id);
|
|
43
|
-
tempTree[id] = {
|
|
44
|
-
"data": children[flag],
|
|
45
|
-
"pid": pid,
|
|
46
|
-
"id": id,
|
|
47
|
-
"isOpen": true,
|
|
48
|
-
"show": true,
|
|
49
|
-
"deg": 0,
|
|
50
|
-
"children": []
|
|
51
|
-
}
|
|
52
|
-
createTree(children[flag], id)
|
|
53
|
-
}
|
|
54
|
-
})(temp, id)
|
|
55
|
-
|
|
56
|
-
return {
|
|
57
|
-
rid,
|
|
58
|
-
value: tempTree,
|
|
59
|
-
num
|
|
60
|
-
}
|
|
61
|
-
|
|
1
|
+
import type { default as TreeConfigType, rootType, childrenType, idType } from '../../../types/TreeConfig'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* 根据配置的层次关系(配置的id,child,root)把原始数据变成内部结构,方便后期位置计算
|
|
5
|
+
*
|
|
6
|
+
* tempTree[id] = {
|
|
7
|
+
* "data": 原始数据,
|
|
8
|
+
* "pid": 父亲ID,
|
|
9
|
+
* "id": 唯一标识ID,
|
|
10
|
+
* "show": boolean,
|
|
11
|
+
* "isOpen": boolean,
|
|
12
|
+
* "children": [cid1、cid2、...]
|
|
13
|
+
* }
|
|
14
|
+
*/
|
|
15
|
+
export default (initTree: any, config: TreeConfigType) => {
|
|
16
|
+
const tempTree: {
|
|
17
|
+
[key: string]: any
|
|
18
|
+
} = {}
|
|
19
|
+
|
|
20
|
+
// 根结点
|
|
21
|
+
const temp = (config.root as rootType)(initTree)
|
|
22
|
+
let id: number | string, rid: number | string
|
|
23
|
+
id = rid = (config.id as idType)(temp)
|
|
24
|
+
tempTree[id] = {
|
|
25
|
+
"data": temp,
|
|
26
|
+
"pid": null,
|
|
27
|
+
"id": id,
|
|
28
|
+
"isOpen": true,
|
|
29
|
+
"show": true,
|
|
30
|
+
"deg": 0,
|
|
31
|
+
"children": []
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
let num: number = 1
|
|
35
|
+
|
|
36
|
+
// 根据传递的原始数据,生成内部统一结构
|
|
37
|
+
; (function createTree(pdata: any, pid: number | string) {
|
|
38
|
+
const children = (config.children as childrenType)(pdata, initTree)
|
|
39
|
+
num += children ? children.length : 0
|
|
40
|
+
for (let flag = 0; children && flag < children.length; flag++) {
|
|
41
|
+
id = (config.id as idType)(children[flag])
|
|
42
|
+
tempTree[pid].children.push(id);
|
|
43
|
+
tempTree[id] = {
|
|
44
|
+
"data": children[flag],
|
|
45
|
+
"pid": pid,
|
|
46
|
+
"id": id,
|
|
47
|
+
"isOpen": true,
|
|
48
|
+
"show": true,
|
|
49
|
+
"deg": 0,
|
|
50
|
+
"children": []
|
|
51
|
+
}
|
|
52
|
+
createTree(children[flag], id)
|
|
53
|
+
}
|
|
54
|
+
})(temp, id)
|
|
55
|
+
|
|
56
|
+
return {
|
|
57
|
+
rid,
|
|
58
|
+
value: tempTree,
|
|
59
|
+
num
|
|
60
|
+
}
|
|
61
|
+
|
|
62
62
|
}
|