1 | import { gradient } from "./gradient.d";
|
2 | import { image2D_Object } from "./image2D.d";
|
3 |
|
4 | interface painter_config {
|
5 |
|
6 | /**
|
7 | * 填充色或图案,默认"#000"
|
8 | */
|
9 | fillStyle: string,
|
10 |
|
11 | /**
|
12 | * 轮廓色或图案,默认"#000"
|
13 | */
|
14 | strokeStyle: string,
|
15 |
|
16 | /**
|
17 | * 线条宽度,默认1(单位px)
|
18 | */
|
19 | lineWidth: number,
|
20 |
|
21 | /**
|
22 | * 文字水平对齐方式,默认"left"左对齐(还有"center"居中和"right"右对齐)
|
23 | */
|
24 | textAlign: string,
|
25 |
|
26 | /**
|
27 | * 文字垂直对齐方式,默认"middle"垂直居中(还有"top"上对齐和"bottom"下对齐)
|
28 | */
|
29 | textBaseline: string,
|
30 |
|
31 | /**
|
32 | * 文字大小,默认16
|
33 | */
|
34 | "font-size": number,
|
35 |
|
36 | /**
|
37 | * 字体,默认"sans-serif"
|
38 | */
|
39 | "font-family": string,
|
40 |
|
41 | /**
|
42 | * 圆弧开始端闭合方式,默认"butt"直线闭合(还有"round"圆帽闭合,"-round"反圆帽闭合)
|
43 | */
|
44 | "arc-start-cap": string,
|
45 |
|
46 | /**
|
47 | * 圆弧结束端闭合方式,默认"butt"直线闭合(还有"round"圆帽闭合,"-round"反圆帽闭合)
|
48 | */
|
49 | "arc-end-cap": string,
|
50 |
|
51 | /**
|
52 | * 设置线条虚线,默认为[]表示使用实线绘制
|
53 | *
|
54 | * 值应该是一个数组,格式:[实线长,虚线长,实线长 ...],数组长度任意,会自动循环
|
55 | */
|
56 | lineDash: string
|
57 |
|
58 | }
|
59 |
|
60 | /**
|
61 | * 画笔
|
62 | */
|
63 | export interface painter {
|
64 |
|
65 | // 配置画笔
|
66 |
|
67 | /**
|
68 | * 对画笔进行配置
|
69 | */
|
70 | config(option: painter_config): painter,
|
71 |
|
72 | // 位图画笔
|
73 |
|
74 | /**
|
75 | * 【canvas画笔独有】把当前绘制的图形变成base64返回
|
76 | */
|
77 | toDataURL(): string,
|
78 |
|
79 | /**
|
80 | * 【canvas画笔独有】擦除画笔上的一个矩形区域
|
81 | * @param x 可选,区域左上角X坐标
|
82 | * @param y 可选,区域左上角y坐标
|
83 | * @param width 可选,区域的宽
|
84 | * @param height 可选,区域的高
|
85 | */
|
86 | clearRect(x?: number, y?: number, width?: number, height?: number): painter,
|
87 |
|
88 | /**
|
89 | * 【canvas画笔独有】把图像、画布或视频绘制到画布的指定位置上
|
90 | *
|
91 | * (img, x, y):在画布上定位图像。
|
92 | *
|
93 | * (img, x, y, width, height):在画布上定位图像,并规定图像的宽度和高度。
|
94 | *
|
95 | * (img, sx, sy, swidth, sheight, x, y, width, height):剪切图像,并在画布上定位被剪切的部分。
|
96 | */
|
97 | drawImage(): painter,
|
98 |
|
99 | // 矢图画笔
|
100 |
|
101 | /**
|
102 | * 【svg画笔独有】当前画笔绘制的目标节点
|
103 | * @param selector 选择器,查找上下文固定为当前svg画布
|
104 | */
|
105 | bind(selector: Function | Element | string | image2D_Object | Array<Element | image2D_Object>): painter,
|
106 |
|
107 | /**
|
108 | * 【svg画笔独有】把当前维护的结点加到目标结点内部的结尾
|
109 | * @param selector 可选,选择器,查找上下文固定为当前svg画布
|
110 | */
|
111 | appendTo(selector?: Function | Element | string | image2D_Object | Array<Element | image2D_Object>): painter,
|
112 |
|
113 | /**
|
114 | * 【svg画笔独有】把当前维护的结点加到目标结点内部的开头
|
115 | * @param selector 可选,选择器,查找上下文固定为当前svg画布
|
116 | */
|
117 | prependTo(selector?: Function | Element | string | image2D_Object | Array<Element | image2D_Object>): painter,
|
118 |
|
119 | /**
|
120 | * 【svg画笔独有】把当前维护的结点加到目标结点之后
|
121 | * @param selector 可选,选择器,查找上下文固定为当前svg画布
|
122 | */
|
123 | afterTo(selector?: Function | Element | string | image2D_Object | Array<Element | image2D_Object>): painter,
|
124 |
|
125 | /**
|
126 | * 【svg画笔独有】把当前维护的结点加到目标结点之前
|
127 | * @param selector 可选,选择器,查找上下文固定为当前svg画布
|
128 | */
|
129 | beforeTo(selector?: Function | Element | string | image2D_Object | Array<Element | image2D_Object>): painter,
|
130 |
|
131 | // 画笔上的绘图方法
|
132 |
|
133 | /**
|
134 | * 绘制一个实心文字
|
135 | * @param text 需要绘制的文字
|
136 | * @param x 绘制位置的x坐标
|
137 | * @param y 绘制位置的y坐标
|
138 | * @param deg 可选,文字旋转角度
|
139 | */
|
140 | fillText(text: any, x: number, y: number, deg?: number): painter,
|
141 |
|
142 | /**
|
143 | * 绘制一个空心文字
|
144 | * @param text 需要绘制的文字
|
145 | * @param x 绘制位置的x坐标
|
146 | * @param y 绘制位置的y坐标
|
147 | * @param deg 可选,文字旋转角度
|
148 | */
|
149 | strokeText(text: any, x: number, y: number, deg?: number): painter,
|
150 |
|
151 | /**
|
152 | * 绘制一个空实心文字
|
153 | * @param text 需要绘制的文字
|
154 | * @param x 绘制位置的x坐标
|
155 | * @param y 绘制位置的y坐标
|
156 | * @param deg 可选,文字旋转角度
|
157 | */
|
158 | fullText(text: any, x: number, y: number, deg?: number): painter,
|
159 |
|
160 | /**
|
161 | * 绘制一个实心的圆弧
|
162 | * @param cx 圆弧的圆心x坐标
|
163 | * @param cy 圆弧的圆心y坐标
|
164 | * @param r1 圆弧的内半径
|
165 | * @param r2 圆弧的外半径
|
166 | * @param beginDeg 开始弧度
|
167 | * @param deg 跨越弧度
|
168 | */
|
169 | fillArc(cx: number, cy: number, r1: number, r2: number, beginDeg: number, deg: number): painter,
|
170 |
|
171 | /**
|
172 | * 绘制一个空心的圆弧
|
173 | * @param cx 圆弧的圆心x坐标
|
174 | * @param cy 圆弧的圆心y坐标
|
175 | * @param r1 圆弧的内半径
|
176 | * @param r2 圆弧的外半径
|
177 | * @param beginDeg 开始弧度
|
178 | * @param deg 跨越弧度
|
179 | */
|
180 | strokeArc(cx: number, cy: number, r1: number, r2: number, beginDeg: number, deg: number): painter,
|
181 |
|
182 | /**
|
183 | * 绘制一个空实心的圆弧
|
184 | * @param cx 圆弧的圆心x坐标
|
185 | * @param cy 圆弧的圆心y坐标
|
186 | * @param r1 圆弧的内半径
|
187 | * @param r2 圆弧的外半径
|
188 | * @param beginDeg 开始弧度
|
189 | * @param deg 跨越弧度
|
190 | */
|
191 | fullArc(cx: number, cy: number, r1: number, r2: number, beginDeg: number, deg: number): painter,
|
192 |
|
193 | /**
|
194 | * 绘制一个实心的圆
|
195 | * @param cx 圆心x坐标
|
196 | * @param cy 圆心y坐标
|
197 | * @param r 圆的半径
|
198 | */
|
199 | fillCircle(cx: number, cy: number, r: number): painter,
|
200 |
|
201 | /**
|
202 | * 绘制一个空心的圆
|
203 | * @param cx 圆心x坐标
|
204 | * @param cy 圆心y坐标
|
205 | * @param r 圆的半径
|
206 | */
|
207 | strokeCircle(cx: number, cy: number, r: number): painter,
|
208 |
|
209 | /**
|
210 | * 绘制一个空实心的圆
|
211 | * @param cx 圆心x坐标
|
212 | * @param cy 圆心y坐标
|
213 | * @param r 圆的半径
|
214 | */
|
215 | fullCircle(cx: number, cy: number, r: number): painter,
|
216 |
|
217 | /**
|
218 | * 绘制一个实心的矩形
|
219 | * @param x 可选,区域左上角X坐标
|
220 | * @param y 可选,区域左上角y坐标
|
221 | * @param width 可选,区域的宽
|
222 | * @param height 可选,区域的高
|
223 | */
|
224 | fillRect(x: number, y: number, width: number, height: number): painter,
|
225 |
|
226 | /**
|
227 | * 绘制一个空心的矩形
|
228 | * @param x 可选,区域左上角X坐标
|
229 | * @param y 可选,区域左上角y坐标
|
230 | * @param width 可选,区域的宽
|
231 | * @param height 可选,区域的高
|
232 | */
|
233 | strokeRect(x: number, y: number, width: number, height: number): painter,
|
234 |
|
235 | /**
|
236 | * 绘制一个空实心的矩形
|
237 | * @param x 可选,区域左上角X坐标
|
238 | * @param y 可选,区域左上角y坐标
|
239 | * @param width 可选,区域的宽
|
240 | * @param height 可选,区域的高
|
241 | */
|
242 | fullRect(x: number, y: number, width: number, height: number): painter,
|
243 |
|
244 | // 路径
|
245 |
|
246 | /**
|
247 | * 开始一段独立的路径
|
248 | */
|
249 | beginPath(): painter,
|
250 |
|
251 | /**
|
252 | * 闭合当前路径,也就是路径首尾闭合
|
253 | */
|
254 | closePath(): painter,
|
255 |
|
256 | /**
|
257 | * 画笔移动到点(x, y),此时笔离开了画布
|
258 | */
|
259 | moveTo(x: number, y: number): painter,
|
260 |
|
261 | /**
|
262 | * 画笔移动到点(x, y),此时笔没有离开画布
|
263 | */
|
264 | lineTo(x: number, y: number): painter,
|
265 |
|
266 | /**
|
267 | * 以(cx, cy)为圆心,半径r,从弧度beginDeg开始,跨越弧度deg画弧,此时笔没有离开画布
|
268 | */
|
269 | arc(cx: number, cy: number, r: number, beginDeg: number, deg: number): painter,
|
270 |
|
271 | /**
|
272 | * 二次贝塞尔曲线到
|
273 | * @param cpx 控制点x坐标
|
274 | * @param cpy 控制点y坐标
|
275 | * @param x 终点x坐标
|
276 | * @param y 终点y坐标
|
277 | */
|
278 | quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): painter,
|
279 |
|
280 | /**
|
281 | * 三次贝塞尔曲线到
|
282 | * @param cpx1 控制点1的x坐标
|
283 | * @param cpy1 控制点1的y坐标
|
284 | * @param cpx2 控制点2的x坐标
|
285 | * @param cpy2 控制点2的y坐标
|
286 | * @param x 终点x坐标
|
287 | * @param y 终点y坐标
|
288 | */
|
289 | bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): painter,
|
290 |
|
291 | /**
|
292 | * 把当前路径包裹的区域填充颜色
|
293 | */
|
294 | fill(): painter,
|
295 |
|
296 | /**
|
297 | * 把当前路径上色(轮廓线)
|
298 | */
|
299 | stroke(): painter,
|
300 |
|
301 | /**
|
302 | * 把当前路径画上轮廓线并填充颜色到当前路径所包裹的区域
|
303 | */
|
304 | full(): painter,
|
305 |
|
306 | // 渐变色
|
307 |
|
308 | /**
|
309 | * 创建线性渐变对象
|
310 | * @param x1 渐变的起点x坐标
|
311 | * @param y1 渐变的起点y坐标
|
312 | * @param x2 渐变的终点x坐标
|
313 | * @param y2 渐变的终点y坐标
|
314 | *
|
315 | * 特别注意:canvas画笔上述参数的单位是px,svg画笔上述参数是%
|
316 | */
|
317 | createLinearGradient(x1: number, y1: number, x2: number, y2: number): gradient,
|
318 |
|
319 | /**
|
320 | * 创建环形渐变对象
|
321 | * @param cx 渐变的起点x坐标
|
322 | * @param cy 渐变的起点y坐标
|
323 | * @param r 渐变半径
|
324 | *
|
325 | * 特别注意:canvas画笔上述参数的单位是px,svg画笔上述参数是%
|
326 | */
|
327 | createRadialGradient(cx: number, cy: number, r: number): gradient,
|
328 |
|
329 | // 变换
|
330 |
|
331 | /**
|
332 | * 保存当前的绘图状态
|
333 | */
|
334 | save(): painter,
|
335 |
|
336 | /**
|
337 | * 恢复之前保存的绘图状态
|
338 | */
|
339 | restore(): painter,
|
340 |
|
341 | /**
|
342 | * 把绘图的原点x坐标增加dx,y增加dy
|
343 | */
|
344 | translate(dx: number, dy: number): painter,
|
345 |
|
346 | /**
|
347 | * 围绕原点旋转deg
|
348 | */
|
349 | rotate(deg: number): painter,
|
350 |
|
351 | /**
|
352 | * x坐标和y坐标分别缩放sx和sy倍(sy缺省取sx)
|
353 | */
|
354 | scale(sx: number, sy: number): painter
|
355 |
|
356 | }
|