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,65 +1,65 @@
|
|
|
1
|
-
import type { arcCapType } from '../../../types/painterConfig'
|
|
2
|
-
|
|
3
|
-
export default function (type?: string) {
|
|
4
|
-
|
|
5
|
-
const special = {
|
|
6
|
-
// 文字大小
|
|
7
|
-
"fontSize": 16,
|
|
8
|
-
|
|
9
|
-
// 字体
|
|
10
|
-
"fontFamily": "sans-serif",
|
|
11
|
-
|
|
12
|
-
// 字重
|
|
13
|
-
"fontWeight": 400,
|
|
14
|
-
|
|
15
|
-
// 字类型
|
|
16
|
-
"fontStyle": "normal",
|
|
17
|
-
|
|
18
|
-
// 圆弧开始端闭合方式("butt"直线闭合、"round"圆帽闭合)
|
|
19
|
-
"arcStartCap": <arcCapType>'butt',
|
|
20
|
-
|
|
21
|
-
// 圆弧结束端闭合方式,和上一个类似
|
|
22
|
-
"arcEndCap": <arcCapType>'butt',
|
|
23
|
-
|
|
24
|
-
// 矩形圆角半径
|
|
25
|
-
"rectRadius": []
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
const init = {
|
|
29
|
-
// 填充色或图案
|
|
30
|
-
"fillStyle": 'black',
|
|
31
|
-
|
|
32
|
-
// 轮廓色或图案
|
|
33
|
-
"strokeStyle": 'black',
|
|
34
|
-
|
|
35
|
-
// 线条宽度(单位px,下同)
|
|
36
|
-
"lineWidth": 1,
|
|
37
|
-
|
|
38
|
-
// 线的端点类型,("butt"平直边缘、"round"半圆和"square"矩形)
|
|
39
|
-
"lineCap": "butt",
|
|
40
|
-
|
|
41
|
-
// 线的拐角连接方式,("miter"连接处边缘延长相接、"bevel"对角线斜角和"round"圆)
|
|
42
|
-
"lineJoin": "miter",
|
|
43
|
-
|
|
44
|
-
// 设置线条虚线,应该是一个数组[number,...]
|
|
45
|
-
"lineDash": [],
|
|
46
|
-
|
|
47
|
-
// 文字水平对齐方式("left"左对齐、"center"居中和"right"右对齐)
|
|
48
|
-
"textAlign": 'left',
|
|
49
|
-
|
|
50
|
-
// 文字垂直对齐方式("middle"垂直居中、"top"上对齐和"bottom"下对齐)
|
|
51
|
-
"textBaseline": 'middle',
|
|
52
|
-
|
|
53
|
-
// 阴影的模糊系数,默认0,也就是无阴影
|
|
54
|
-
"shadowBlur": 0,
|
|
55
|
-
|
|
56
|
-
// 阴影的颜色
|
|
57
|
-
"shadowColor": "black"
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
if (type == 'special') return special
|
|
61
|
-
else if (type == 'init') return init
|
|
62
|
-
else return {
|
|
63
|
-
...special, ...init
|
|
64
|
-
}
|
|
1
|
+
import type { arcCapType } from '../../../types/painterConfig'
|
|
2
|
+
|
|
3
|
+
export default function (type?: string) {
|
|
4
|
+
|
|
5
|
+
const special = {
|
|
6
|
+
// 文字大小
|
|
7
|
+
"fontSize": 16,
|
|
8
|
+
|
|
9
|
+
// 字体
|
|
10
|
+
"fontFamily": "sans-serif",
|
|
11
|
+
|
|
12
|
+
// 字重
|
|
13
|
+
"fontWeight": 400,
|
|
14
|
+
|
|
15
|
+
// 字类型
|
|
16
|
+
"fontStyle": "normal",
|
|
17
|
+
|
|
18
|
+
// 圆弧开始端闭合方式("butt"直线闭合、"round"圆帽闭合)
|
|
19
|
+
"arcStartCap": <arcCapType>'butt',
|
|
20
|
+
|
|
21
|
+
// 圆弧结束端闭合方式,和上一个类似
|
|
22
|
+
"arcEndCap": <arcCapType>'butt',
|
|
23
|
+
|
|
24
|
+
// 矩形圆角半径
|
|
25
|
+
"rectRadius": []
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const init = {
|
|
29
|
+
// 填充色或图案
|
|
30
|
+
"fillStyle": 'black',
|
|
31
|
+
|
|
32
|
+
// 轮廓色或图案
|
|
33
|
+
"strokeStyle": 'black',
|
|
34
|
+
|
|
35
|
+
// 线条宽度(单位px,下同)
|
|
36
|
+
"lineWidth": 1,
|
|
37
|
+
|
|
38
|
+
// 线的端点类型,("butt"平直边缘、"round"半圆和"square"矩形)
|
|
39
|
+
"lineCap": "butt",
|
|
40
|
+
|
|
41
|
+
// 线的拐角连接方式,("miter"连接处边缘延长相接、"bevel"对角线斜角和"round"圆)
|
|
42
|
+
"lineJoin": "miter",
|
|
43
|
+
|
|
44
|
+
// 设置线条虚线,应该是一个数组[number,...]
|
|
45
|
+
"lineDash": [],
|
|
46
|
+
|
|
47
|
+
// 文字水平对齐方式("left"左对齐、"center"居中和"right"右对齐)
|
|
48
|
+
"textAlign": 'left',
|
|
49
|
+
|
|
50
|
+
// 文字垂直对齐方式("middle"垂直居中、"top"上对齐和"bottom"下对齐)
|
|
51
|
+
"textBaseline": 'middle',
|
|
52
|
+
|
|
53
|
+
// 阴影的模糊系数,默认0,也就是无阴影
|
|
54
|
+
"shadowBlur": 0,
|
|
55
|
+
|
|
56
|
+
// 阴影的颜色
|
|
57
|
+
"shadowColor": "black"
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (type == 'special') return special
|
|
61
|
+
else if (type == 'init') return init
|
|
62
|
+
else return {
|
|
63
|
+
...special, ...init
|
|
64
|
+
}
|
|
65
65
|
}
|
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
const enhanceGradient = function (gradient: CanvasGradient, calcStop?: Function) {
|
|
2
|
-
const enhanceGradient = {
|
|
3
|
-
"value": function () {
|
|
4
|
-
return gradient
|
|
5
|
-
},
|
|
6
|
-
"setColor": function (stop: number, color: string) {
|
|
7
|
-
gradient.addColorStop(calcStop ? calcStop(stop) : stop, color)
|
|
8
|
-
return enhanceGradient
|
|
9
|
-
}
|
|
10
|
-
};
|
|
11
|
-
return enhanceGradient
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
// 线性渐变
|
|
15
|
-
export const linearGradient = function (painter: CanvasRenderingContext2D, x0: number, y0: number, x1: number, y1: number) {
|
|
16
|
-
const gradient = painter.createLinearGradient(x0, y0, x1, y1)
|
|
17
|
-
return enhanceGradient(gradient)
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
// 环形渐变
|
|
21
|
-
export const radialGradient = function (painter: CanvasRenderingContext2D, cx: number, cy: number, r: number) {
|
|
22
|
-
const gradient = painter.createRadialGradient(cx, cy, 0, cx, cy, r)
|
|
23
|
-
return enhanceGradient(gradient)
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
// 角度渐变
|
|
27
|
-
export const conicGradient = function (painter: CanvasRenderingContext2D, cx: number, cy: number, startDeg: number, deg?: number) {
|
|
28
|
-
const gradient = painter.createConicGradient(startDeg, cx, cy)
|
|
29
|
-
return enhanceGradient(gradient, deg ? (stop: number) => {
|
|
30
|
-
return deg / (Math.PI * 2) * stop
|
|
31
|
-
} : void 0)
|
|
1
|
+
const enhanceGradient = function (gradient: CanvasGradient, calcStop?: Function) {
|
|
2
|
+
const enhanceGradient = {
|
|
3
|
+
"value": function () {
|
|
4
|
+
return gradient
|
|
5
|
+
},
|
|
6
|
+
"setColor": function (stop: number, color: string) {
|
|
7
|
+
gradient.addColorStop(calcStop ? calcStop(stop) : stop, color)
|
|
8
|
+
return enhanceGradient
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
return enhanceGradient
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
// 线性渐变
|
|
15
|
+
export const linearGradient = function (painter: CanvasRenderingContext2D, x0: number, y0: number, x1: number, y1: number) {
|
|
16
|
+
const gradient = painter.createLinearGradient(x0, y0, x1, y1)
|
|
17
|
+
return enhanceGradient(gradient)
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// 环形渐变
|
|
21
|
+
export const radialGradient = function (painter: CanvasRenderingContext2D, cx: number, cy: number, r: number) {
|
|
22
|
+
const gradient = painter.createRadialGradient(cx, cy, 0, cx, cy, r)
|
|
23
|
+
return enhanceGradient(gradient)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// 角度渐变
|
|
27
|
+
export const conicGradient = function (painter: CanvasRenderingContext2D, cx: number, cy: number, startDeg: number, deg?: number) {
|
|
28
|
+
const gradient = painter.createConicGradient(startDeg, cx, cy)
|
|
29
|
+
return enhanceGradient(gradient, deg ? (stop: number) => {
|
|
30
|
+
return deg / (Math.PI * 2) * stop
|
|
31
|
+
} : void 0)
|
|
32
32
|
}
|
|
@@ -1,188 +1,188 @@
|
|
|
1
|
-
import type CanvasConfigType from "../../../types/CanvasConfig"
|
|
2
|
-
import type CanvasOptsType from '../../../types/CanvasOpts'
|
|
3
|
-
|
|
4
|
-
import PainterRender from "./painter"
|
|
5
|
-
import assemble from "../assemble"
|
|
6
|
-
import { linearGradient, radialGradient, conicGradient } from "./gradient"
|
|
7
|
-
import { initText } from './config'
|
|
8
|
-
import defaultFactory from "./default"
|
|
9
|
-
|
|
10
|
-
class Canvas extends PainterRender {
|
|
11
|
-
readonly name: string = "Canvas"
|
|
12
|
-
|
|
13
|
-
private __regionList = {} //区域映射表
|
|
14
|
-
private __scaleSize
|
|
15
|
-
|
|
16
|
-
// 步长由1改为10是为了优化区域计算有时候出错问题
|
|
17
|
-
// 2023年7月6日 于南京
|
|
18
|
-
private __regionAssemble = assemble(0, 255, 10, 3)
|
|
19
|
-
|
|
20
|
-
// 添加scaleSize参数是为了适配画布缩放后的处理
|
|
21
|
-
// 2024年1月17日 于南京
|
|
22
|
-
constructor(ViewCanvas: HTMLCanvasElement, RegionCanvas: HTMLCanvasElement | null, opts: CanvasOptsType = {}, scaleSize = 1) {
|
|
23
|
-
super(
|
|
24
|
-
ViewCanvas,
|
|
25
|
-
opts,
|
|
26
|
-
RegionCanvas ? new PainterRender(RegionCanvas, {
|
|
27
|
-
willReadFrequently: true,
|
|
28
|
-
}) : undefined, true, scaleSize
|
|
29
|
-
)
|
|
30
|
-
|
|
31
|
-
this.__scaleSize = scaleSize
|
|
32
|
-
this.setRegion("")
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
config(configs: CanvasConfigType) {
|
|
36
|
-
for (const key in configs) {
|
|
37
|
-
this.useConfig(key, (configs as any)[key])
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
return this
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
reset() {
|
|
44
|
-
this.config(defaultFactory() as CanvasConfigType)
|
|
45
|
-
return this
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
// 是否绘制的内容只需要进行区域记录
|
|
49
|
-
onlyRegion(flag: boolean) {
|
|
50
|
-
this.__onlyRegion = flag
|
|
51
|
-
return this
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
onlyView(flag: boolean) {
|
|
55
|
-
this.__onlyView = flag
|
|
56
|
-
return this
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
// 设置当前绘制区域名称
|
|
60
|
-
setRegion(regionName: string | number) {
|
|
61
|
-
if (this.__region) {
|
|
62
|
-
if (regionName) {
|
|
63
|
-
if ((this.__regionList as any)[regionName] == void 0) {
|
|
64
|
-
const tempColor = this.__regionAssemble();
|
|
65
|
-
(this.__regionList as any)[regionName] =
|
|
66
|
-
"rgb(" + tempColor[0] + "," + tempColor[1] + "," + tempColor[2] + ")"
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
this.__region.useConfig("fillStyle", (this.__regionList as any)[regionName]) &&
|
|
70
|
-
this.__region.useConfig("strokeStyle", (this.__regionList as any)[regionName])
|
|
71
|
-
} else {
|
|
72
|
-
this.__region.useConfig("fillStyle", "#000000") &&
|
|
73
|
-
this.__region.useConfig("strokeStyle", "#000000")
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
return this
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
// 获取当前事件触发的区域名称
|
|
80
|
-
getRegion(x: number, y: number): Promise<string> {
|
|
81
|
-
return new Promise((resolve) => {
|
|
82
|
-
const imgData = this.__region ? this.__region.painter.getImageData(x - 0.5, y - 0.5, 1, 1) : {
|
|
83
|
-
data: [0, 0, 0, 0]
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
// 获取点击点的颜色
|
|
87
|
-
let currentRGBA = imgData.data
|
|
88
|
-
|
|
89
|
-
const doit = () => {
|
|
90
|
-
if (this.__region) {
|
|
91
|
-
|
|
92
|
-
// 查找当前点击的区域
|
|
93
|
-
for (const key in this.__regionList) {
|
|
94
|
-
if (
|
|
95
|
-
"rgb(" +
|
|
96
|
-
currentRGBA[0] +
|
|
97
|
-
"," +
|
|
98
|
-
currentRGBA[1] +
|
|
99
|
-
"," +
|
|
100
|
-
currentRGBA[2] +
|
|
101
|
-
")" ==
|
|
102
|
-
(this.__regionList as any)[key]
|
|
103
|
-
) {
|
|
104
|
-
resolve(key)
|
|
105
|
-
break
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
resolve("")
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
// 如果有值
|
|
114
|
-
if (currentRGBA) {
|
|
115
|
-
doit()
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
// 否则就是在Promise中
|
|
119
|
-
else {
|
|
120
|
-
(imgData as any).then((data: Uint8ClampedArray) => {
|
|
121
|
-
currentRGBA = data
|
|
122
|
-
doit()
|
|
123
|
-
})
|
|
124
|
-
}
|
|
125
|
-
})
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
textWidth(text: string) {
|
|
129
|
-
this.painter.save()
|
|
130
|
-
|
|
131
|
-
initText(this.painter, this.__specialConfig, 0, 0, 0)
|
|
132
|
-
|
|
133
|
-
// 虽然我们限制了只可以输入字符串,可是不代表所有环境都可以保证,为了确保方法不失效,强转成字符串
|
|
134
|
-
const width = this.painter.measureText(text + "").width
|
|
135
|
-
|
|
136
|
-
this.painter.restore()
|
|
137
|
-
|
|
138
|
-
return width
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
// 获取原始画笔
|
|
142
|
-
getContext(isRegion = false) {
|
|
143
|
-
return isRegion ? (this.__region ? this.__region.painter : null) : this.painter
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
// 获取画布信息
|
|
147
|
-
getInfo() {
|
|
148
|
-
return {
|
|
149
|
-
width: this.painter.canvas.width / this.__scaleSize,
|
|
150
|
-
height: this.painter.canvas.height / this.__scaleSize
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
// 线性渐变
|
|
155
|
-
createLinearGradient(x0: number, y0: number, x1: number, y1: number) {
|
|
156
|
-
return linearGradient(this.painter, x0, y0, x1, y1)
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
// 环形渐变
|
|
160
|
-
createRadialGradient(cx: number, cy: number, r: number) {
|
|
161
|
-
return radialGradient(this.painter, cx, cy, r)
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
// 角度渐变
|
|
165
|
-
createConicGradient(cx: number, cy: number, beginDeg: number, deg?: number) {
|
|
166
|
-
return conicGradient(this.painter, cx, cy, beginDeg, deg)
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
// 获取指定位置颜色
|
|
170
|
-
getColor(x: number, y: number) {
|
|
171
|
-
x *= this.__scaleSize
|
|
172
|
-
y *= this.__scaleSize
|
|
173
|
-
const currentRGBA = this.painter.getImageData(x - 0.5, y - 0.5, 1, 1).data
|
|
174
|
-
return (
|
|
175
|
-
"rgba(" +
|
|
176
|
-
currentRGBA[0] +
|
|
177
|
-
"," +
|
|
178
|
-
currentRGBA[1] +
|
|
179
|
-
"," +
|
|
180
|
-
currentRGBA[2] +
|
|
181
|
-
"," +
|
|
182
|
-
currentRGBA[3] +
|
|
183
|
-
")"
|
|
184
|
-
)
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
export default Canvas
|
|
1
|
+
import type CanvasConfigType from "../../../types/CanvasConfig"
|
|
2
|
+
import type CanvasOptsType from '../../../types/CanvasOpts'
|
|
3
|
+
|
|
4
|
+
import PainterRender from "./painter"
|
|
5
|
+
import assemble from "../assemble"
|
|
6
|
+
import { linearGradient, radialGradient, conicGradient } from "./gradient"
|
|
7
|
+
import { initText } from './config'
|
|
8
|
+
import defaultFactory from "./default"
|
|
9
|
+
|
|
10
|
+
class Canvas extends PainterRender {
|
|
11
|
+
readonly name: string = "Canvas"
|
|
12
|
+
|
|
13
|
+
private __regionList = {} //区域映射表
|
|
14
|
+
private __scaleSize
|
|
15
|
+
|
|
16
|
+
// 步长由1改为10是为了优化区域计算有时候出错问题
|
|
17
|
+
// 2023年7月6日 于南京
|
|
18
|
+
private __regionAssemble = assemble(0, 255, 10, 3)
|
|
19
|
+
|
|
20
|
+
// 添加scaleSize参数是为了适配画布缩放后的处理
|
|
21
|
+
// 2024年1月17日 于南京
|
|
22
|
+
constructor(ViewCanvas: HTMLCanvasElement, RegionCanvas: HTMLCanvasElement | null, opts: CanvasOptsType = {}, scaleSize = 1) {
|
|
23
|
+
super(
|
|
24
|
+
ViewCanvas,
|
|
25
|
+
opts,
|
|
26
|
+
RegionCanvas ? new PainterRender(RegionCanvas, {
|
|
27
|
+
willReadFrequently: true,
|
|
28
|
+
}) : undefined, true, scaleSize
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
this.__scaleSize = scaleSize
|
|
32
|
+
this.setRegion("")
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
config(configs: CanvasConfigType) {
|
|
36
|
+
for (const key in configs) {
|
|
37
|
+
this.useConfig(key, (configs as any)[key])
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
return this
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
reset() {
|
|
44
|
+
this.config(defaultFactory() as CanvasConfigType)
|
|
45
|
+
return this
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// 是否绘制的内容只需要进行区域记录
|
|
49
|
+
onlyRegion(flag: boolean) {
|
|
50
|
+
this.__onlyRegion = flag
|
|
51
|
+
return this
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
onlyView(flag: boolean) {
|
|
55
|
+
this.__onlyView = flag
|
|
56
|
+
return this
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// 设置当前绘制区域名称
|
|
60
|
+
setRegion(regionName: string | number) {
|
|
61
|
+
if (this.__region) {
|
|
62
|
+
if (regionName) {
|
|
63
|
+
if ((this.__regionList as any)[regionName] == void 0) {
|
|
64
|
+
const tempColor = this.__regionAssemble();
|
|
65
|
+
(this.__regionList as any)[regionName] =
|
|
66
|
+
"rgb(" + tempColor[0] + "," + tempColor[1] + "," + tempColor[2] + ")"
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
this.__region.useConfig("fillStyle", (this.__regionList as any)[regionName]) &&
|
|
70
|
+
this.__region.useConfig("strokeStyle", (this.__regionList as any)[regionName])
|
|
71
|
+
} else {
|
|
72
|
+
this.__region.useConfig("fillStyle", "#000000") &&
|
|
73
|
+
this.__region.useConfig("strokeStyle", "#000000")
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return this
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// 获取当前事件触发的区域名称
|
|
80
|
+
getRegion(x: number, y: number): Promise<string> {
|
|
81
|
+
return new Promise((resolve) => {
|
|
82
|
+
const imgData = this.__region ? this.__region.painter.getImageData(x - 0.5, y - 0.5, 1, 1) : {
|
|
83
|
+
data: [0, 0, 0, 0]
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// 获取点击点的颜色
|
|
87
|
+
let currentRGBA = imgData.data
|
|
88
|
+
|
|
89
|
+
const doit = () => {
|
|
90
|
+
if (this.__region) {
|
|
91
|
+
|
|
92
|
+
// 查找当前点击的区域
|
|
93
|
+
for (const key in this.__regionList) {
|
|
94
|
+
if (
|
|
95
|
+
"rgb(" +
|
|
96
|
+
currentRGBA[0] +
|
|
97
|
+
"," +
|
|
98
|
+
currentRGBA[1] +
|
|
99
|
+
"," +
|
|
100
|
+
currentRGBA[2] +
|
|
101
|
+
")" ==
|
|
102
|
+
(this.__regionList as any)[key]
|
|
103
|
+
) {
|
|
104
|
+
resolve(key)
|
|
105
|
+
break
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
resolve("")
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// 如果有值
|
|
114
|
+
if (currentRGBA) {
|
|
115
|
+
doit()
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// 否则就是在Promise中
|
|
119
|
+
else {
|
|
120
|
+
(imgData as any).then((data: Uint8ClampedArray) => {
|
|
121
|
+
currentRGBA = data
|
|
122
|
+
doit()
|
|
123
|
+
})
|
|
124
|
+
}
|
|
125
|
+
})
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
textWidth(text: string) {
|
|
129
|
+
this.painter.save()
|
|
130
|
+
|
|
131
|
+
initText(this.painter, this.__specialConfig, 0, 0, 0)
|
|
132
|
+
|
|
133
|
+
// 虽然我们限制了只可以输入字符串,可是不代表所有环境都可以保证,为了确保方法不失效,强转成字符串
|
|
134
|
+
const width = this.painter.measureText(text + "").width
|
|
135
|
+
|
|
136
|
+
this.painter.restore()
|
|
137
|
+
|
|
138
|
+
return width
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// 获取原始画笔
|
|
142
|
+
getContext(isRegion = false) {
|
|
143
|
+
return isRegion ? (this.__region ? this.__region.painter : null) : this.painter
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// 获取画布信息
|
|
147
|
+
getInfo() {
|
|
148
|
+
return {
|
|
149
|
+
width: this.painter.canvas.width / this.__scaleSize,
|
|
150
|
+
height: this.painter.canvas.height / this.__scaleSize
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// 线性渐变
|
|
155
|
+
createLinearGradient(x0: number, y0: number, x1: number, y1: number) {
|
|
156
|
+
return linearGradient(this.painter, x0, y0, x1, y1)
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// 环形渐变
|
|
160
|
+
createRadialGradient(cx: number, cy: number, r: number) {
|
|
161
|
+
return radialGradient(this.painter, cx, cy, r)
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// 角度渐变
|
|
165
|
+
createConicGradient(cx: number, cy: number, beginDeg: number, deg?: number) {
|
|
166
|
+
return conicGradient(this.painter, cx, cy, beginDeg, deg)
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// 获取指定位置颜色
|
|
170
|
+
getColor(x: number, y: number) {
|
|
171
|
+
x *= this.__scaleSize
|
|
172
|
+
y *= this.__scaleSize
|
|
173
|
+
const currentRGBA = this.painter.getImageData(x - 0.5, y - 0.5, 1, 1).data
|
|
174
|
+
return (
|
|
175
|
+
"rgba(" +
|
|
176
|
+
currentRGBA[0] +
|
|
177
|
+
"," +
|
|
178
|
+
currentRGBA[1] +
|
|
179
|
+
"," +
|
|
180
|
+
currentRGBA[2] +
|
|
181
|
+
"," +
|
|
182
|
+
currentRGBA[3] +
|
|
183
|
+
")"
|
|
184
|
+
)
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
export default Canvas
|