1# Path2D
2
3路径对象,支持通过对象的接口进行路径的描述,并通过Canvas的stroke接口或者fill接口进行绘制。
4
5>  **说明:**
6>
7>  从 API Version 8 开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
8
9## 接口
10
11Path2D(unit?: LengthMetricsUnit)
12
13构造一个空的Path2D对象。
14
15**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
16
17**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
18
19**系统能力:** SystemCapability.ArkUI.ArkUI.Full
20
21**参数:**
22
23| 参数名  | 类型     | 必填 |  说明   |
24| ----- | -------- | ---- | ---------- |
25| unit<sup>12+</sup>  | [LengthMetricsUnit](../js-apis-arkui-graphics.md#lengthmetricsunit12) | 否 | 用来配置Path2D对象的单位模式,配置后无法动态更改,配置方法同[CanvasRenderingContext2D](ts-canvasrenderingcontext2d.md#lengthmetricsunit12)。<br>默认值:DEFAULT。|
26
27Path2D(description: string, unit?: LengthMetricsUnit)
28
29使用符合SVG路径描述规范的路径字符串构造一个Path2D对象。
30
31**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
32
33**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
34
35**系统能力:** SystemCapability.ArkUI.ArkUI.Full
36
37**参数:**
38
39| 参数名  | 类型     | 必填 |  说明   |
40| ----- | -------- | ---- | ---------- |
41| description | string | 是 | 符合 SVG 路径描述规范的路径字符串 |
42| unit<sup>12+</sup>  | [LengthMetricsUnit](../js-apis-arkui-graphics.md#lengthmetricsunit12) | 否 | 用来配置Path2D对象的单位模式,配置后无法动态更改,配置方法同[CanvasRenderingContext2D](ts-canvasrenderingcontext2d.md#lengthmetricsunit12)。<br>默认值:DEFAULT。|
43
44## addPath
45
46addPath(path: Path2D, transform?: Matrix2D): void
47
48将另一个路径添加到当前的路径对象中。
49
50**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
51
52**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
53
54**系统能力:** SystemCapability.ArkUI.ArkUI.Full
55
56**参数:**
57
58| 参数名  | 类型     | 必填 |  说明   |
59| ----- | -------- | ---- | ---------- |
60| path      | [Path2D](ts-components-canvas-path2d.md)   | 是 | 需要添加到当前路径的路径对象,路径单位:px。 |
61| transform | [Matrix2D](ts-components-canvas-matrix2d.md) | 否 | 新增路径的变换矩阵对象。<br>默认值:null。 |
62
63
64**示例:**
65
66  ```ts
67  // xxx.ets
68  @Entry
69  @Component
70  struct AddPath {
71    private settings: RenderingContextSettings = new RenderingContextSettings(true)
72    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
73
74    private path2Da: Path2D = new Path2D("M250 150 L150 350 L350 350 Z")
75    private path2Db: Path2D = new Path2D()
76
77    build() {
78      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
79        Canvas(this.context)
80          .width('100%')
81          .height('100%')
82          .backgroundColor('#ffff00')
83          .onReady(() =>{
84            this.path2Db.addPath(this.path2Da)
85            this.context.stroke(this.path2Db)
86          })
87      }
88      .width('100%')
89      .height('100%')
90    }
91  }
92  ```
93
94  ![zh-cn_image_0000001238712467](figures/zh-cn_image_0000001238712467.png)
95
96
97## closePath
98
99closePath(): void
100
101将路径的当前点移回到路径的起点,当前点到起点间画一条直线。如果形状已经闭合或只有一个点,则此功能不执行任何操作。
102
103**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
104
105**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
106
107**系统能力:** SystemCapability.ArkUI.ArkUI.Full
108
109**示例:**
110
111  ```ts
112  // xxx.ets
113  @Entry
114  @Component
115  struct ClosePath {
116    private settings: RenderingContextSettings = new RenderingContextSettings(true)
117    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
118    private path2Db: Path2D = new Path2D()
119
120    build() {
121      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
122        Canvas(this.context)
123          .width('100%')
124          .height('100%')
125          .backgroundColor('#ffff00')
126          .onReady(() =>{
127            this.path2Db.moveTo(200, 100)
128            this.path2Db.lineTo(300, 100)
129            this.path2Db.lineTo(200, 200)
130            this.path2Db.closePath()
131            this.context.stroke(this.path2Db)
132          })
133      }
134      .width('100%')
135      .height('100%')
136    }
137  }
138  ```
139
140  ![zh-cn_image_0000001193872542](figures/zh-cn_image_0000001193872542.png)
141
142
143## moveTo
144
145moveTo(x: number, y: number): void
146
147将路径的当前坐标点移动到目标点,移动过程中不绘制线条。
148
149**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
150
151**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
152
153**系统能力:** SystemCapability.ArkUI.ArkUI.Full
154
155**参数:**
156
157| 参数   | 类型     | 必填 | 描述       |
158| ---- | ------ | ---- | -------- |
159| x    | number | 是 | 目标点X轴坐标。<br>默认单位:vp。 |
160| y    | number | 是 | 目标点Y轴坐标。<br>默认单位:vp。 |
161
162**示例:**
163
164  ```ts
165  // xxx.ets
166  @Entry
167  @Component
168  struct MoveTo {
169    private settings: RenderingContextSettings = new RenderingContextSettings(true)
170    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
171    private path2Db: Path2D = new Path2D()
172
173    build() {
174      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
175        Canvas(this.context)
176          .width('100%')
177          .height('100%')
178          .backgroundColor('#ffff00')
179          .onReady(() =>{
180            this.path2Db.moveTo(50, 100)
181            this.path2Db.lineTo(250, 100)
182            this.path2Db.lineTo(150, 200)
183            this.path2Db.closePath()
184            this.context.stroke(this.path2Db)
185          })
186      }
187      .width('100%')
188      .height('100%')
189    }
190  }
191  ```
192
193  ![zh-cn_image_0000001194032502](figures/zh-cn_image_0000001194032502.png)
194
195
196## lineTo
197
198lineTo(x: number, y: number): void
199
200从当前点绘制一条直线到目标点。
201
202**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
203
204**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
205
206**系统能力:** SystemCapability.ArkUI.ArkUI.Full
207
208**参数:**
209
210| 参数名  | 类型     | 必填 |  说明   |
211| ----- | -------- | ---- | ---------- |
212| x    | number | 是 | 目标点X轴坐标。<br>默认单位:vp。 |
213| y    | number | 是 | 目标点Y轴坐标。<br>默认单位:vp。 |
214
215**示例:**
216
217  ```ts
218  // xxx.ets
219  @Entry
220  @Component
221  struct LineTo {
222    private settings: RenderingContextSettings = new RenderingContextSettings(true)
223    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
224    private path2Db: Path2D = new Path2D()
225
226    build() {
227      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
228        Canvas(this.context)
229          .width('100%')
230          .height('100%')
231          .backgroundColor('#ffff00')
232          .onReady(() =>{
233            this.path2Db.moveTo(100, 100)
234            this.path2Db.lineTo(100, 200)
235            this.path2Db.lineTo(200, 200)
236            this.path2Db.lineTo(200, 100)
237            this.path2Db.closePath()
238            this.context.stroke(this.path2Db)
239          })
240      }
241      .width('100%')
242      .height('100%')
243    }
244  }
245  ```
246
247  ![zh-cn_image_0000001238832437](figures/zh-cn_image_0000001238832437.png)
248
249
250## bezierCurveTo
251
252bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void
253
254创建三次贝赛尔曲线的路径。
255
256**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
257
258**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
259
260**系统能力:** SystemCapability.ArkUI.ArkUI.Full
261
262**参数:**
263
264| 参数名  | 类型     | 必填 |  说明   |
265| ----- | -------- | ---- | ---------- |
266| cp1x | number | 是 | 第一个贝塞尔参数的x坐标值。<br>默认单位:vp。 |
267| cp1y | number | 是 | 第一个贝塞尔参数的y坐标值。<br>默认单位:vp。 |
268| cp2x | number | 是 | 第二个贝塞尔参数的x坐标值。<br>默认单位:vp。 |
269| cp2y | number | 是 | 第二个贝塞尔参数的y坐标值。<br>默认单位:vp。 |
270| x    | number | 是 | 路径结束时的x坐标值。<br>默认单位:vp。    |
271| y    | number | 是 | 路径结束时的y坐标值。<br>默认单位:vp。    |
272
273**示例:**
274
275  ```ts
276  // xxx.ets
277  @Entry
278  @Component
279  struct BezierCurveTo {
280    private settings: RenderingContextSettings = new RenderingContextSettings(true)
281    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
282    private path2Db: Path2D = new Path2D()
283
284    build() {
285      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
286        Canvas(this.context)
287          .width('100%')
288          .height('100%')
289          .backgroundColor('#ffff00')
290          .onReady(() =>{
291            this.path2Db.moveTo(10, 10)
292            this.path2Db.bezierCurveTo(20, 100, 200, 100, 200, 20)
293            this.context.stroke(this.path2Db)
294          })
295      }
296      .width('100%')
297      .height('100%')
298    }
299  }
300  ```
301
302  ![zh-cn_image_0000001239032455](figures/zh-cn_image_0000001239032455.png)
303
304
305## quadraticCurveTo
306
307quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void
308
309创建二次贝赛尔曲线的路径。
310
311**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
312
313**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
314
315**系统能力:** SystemCapability.ArkUI.ArkUI.Full
316
317**参数:**
318
319| 参数名  | 类型     | 必填 |  说明   |
320| ----- | -------- | ---- | ---------- |
321| cpx  | number | 是 | 贝塞尔参数的x坐标值。<br>默认单位:vp。 |
322| cpy  | number | 是 | 贝塞尔参数的y坐标值。<br>默认单位:vp。 |
323| x    | number | 是 | 路径结束时的x坐标值。<br>默认单位:vp。 |
324| y    | number | 是 | 路径结束时的y坐标值。<br>默认单位:vp。 |
325
326**示例:**
327
328  ```ts
329  // xxx.ets
330  @Entry
331  @Component
332  struct QuadraticCurveTo {
333    private settings: RenderingContextSettings = new RenderingContextSettings(true)
334    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
335    private path2Db: Path2D = new Path2D()
336
337    build() {
338      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
339        Canvas(this.context)
340          .width('100%')
341          .height('100%')
342          .backgroundColor('#ffff00')
343          .onReady(() =>{
344            this.path2Db.moveTo(10, 10)
345            this.path2Db.quadraticCurveTo(100, 100, 200, 20)
346            this.context.stroke(this.path2Db)
347        })
348      }
349      .width('100%')
350      .height('100%')
351    }
352  }
353  ```
354
355  ![zh-cn_image_0000001238952419](figures/zh-cn_image_0000001238952419.png)
356
357
358## arc
359
360arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): void
361
362绘制弧线路径。
363
364**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
365
366**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
367
368**系统能力:** SystemCapability.ArkUI.ArkUI.Full
369
370**参数:**
371
372| 参数名  | 类型     | 必填 |  说明   |
373| ----- | -------- | ---- | ---------- |
374| x                | number  | 是 | 弧线圆心的x坐标值。<br>默认单位:vp。 |
375| y                | number  | 是 | 弧线圆心的y坐标值。<br>默认单位:vp。 |
376| radius           | number  | 是 | 弧线的圆半径。<br>默认单位:vp。    |
377| startAngle       | number  | 是 | 弧线的起始弧度。<br>单位:弧度。   |
378| endAngle         | number  | 是 | 弧线的终止弧度。<br>单位:弧度。   |
379| counterclockwise | boolean | 否 | 是否逆时针绘制圆弧。<br>true:逆时针方向绘制椭圆。<br>false:顺时针方向绘制椭圆。<br>默认值:false。 |
380
381**示例:**
382
383  ```ts
384  // xxx.ets
385  @Entry
386  @Component
387  struct Arc {
388    private settings: RenderingContextSettings = new RenderingContextSettings(true)
389    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
390    private path2Db: Path2D = new Path2D()
391
392    build() {
393      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
394        Canvas(this.context)
395          .width('100%')
396          .height('100%')
397          .backgroundColor('#ffff00')
398          .onReady(() =>{
399            this.path2Db.arc(100, 75, 50, 0, 6.28)
400            this.context.stroke(this.path2Db)
401          })
402      }
403      .width('100%')
404      .height('100%')
405    }
406  }
407  ```
408
409  ![zh-cn_image_0000001194192488](figures/zh-cn_image_0000001194192488.png)
410
411
412## arcTo
413
414arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void
415
416依据圆弧经过的点和圆弧半径创建圆弧路径。
417
418**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
419
420**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
421
422**系统能力:** SystemCapability.ArkUI.ArkUI.Full
423
424**参数:**
425
426| 参数名  | 类型     | 必填 |  说明   |
427| ----- | -------- | ---- | ---------- |
428| x1     | number | 是 | 圆弧经过的第一个点的x坐标值。<br>默认单位:vp。 |
429| y1     | number | 是 | 圆弧经过的第一个点的y坐标值。<br>默认单位:vp。 |
430| x2     | number | 是 | 圆弧经过的第二个点的x坐标值。<br>默认单位:vp。 |
431| y2     | number | 是 | 圆弧经过的第二个点的y坐标值。<br>默认单位:vp。 |
432| radius | number | 是 | 圆弧的圆半径值。<br>默认单位:vp。 |
433
434**示例:**
435
436  ```ts
437  // xxx.ets
438  @Entry
439  @Component
440  struct ArcTo {
441    private settings: RenderingContextSettings = new RenderingContextSettings(true)
442    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
443    private path2Db: Path2D = new Path2D()
444
445    build() {
446      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
447        Canvas(this.context)
448          .width('100%')
449          .height('100%')
450          .backgroundColor('#ffff00')
451          .onReady(() =>{
452            this.path2Db.arcTo(150, 20, 150, 70, 50)
453            this.context.stroke(this.path2Db)
454          })
455      }
456      .width('100%')
457      .height('100%')
458    }
459  }
460  ```
461
462  ![zh-cn_image_0000001194352486](figures/zh-cn_image_0000001194352486.png)
463
464
465## ellipse
466
467ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise?: boolean): void
468
469在规定的矩形区域绘制一个椭圆。
470
471**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
472
473**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
474
475**系统能力:** SystemCapability.ArkUI.ArkUI.Full
476
477**参数:**
478
479| 参数名  | 类型     | 必填 |  说明   |
480| ----- | -------- | ---- | ---------- |
481| x                | number  | 是  | 椭圆圆心的x轴坐标。<br>默认单位:vp。|
482| y                | number  | 是  | 椭圆圆心的y轴坐标。<br>默认单位:vp。|
483| radiusX          | number  | 是  | 椭圆x轴的半径长度。<br>默认单位:vp。|
484| radiusY          | number  | 是  | 椭圆y轴的半径长度。<br>默认单位:vp。|
485| rotation         | number  | 是  | 椭圆的旋转角度。<br>单位:弧度。                           |
486| startAngle       | number  | 是  | 椭圆绘制的起始点角度。<br>单位:弧度。                        |
487| endAngle         | number  | 是  | 椭圆绘制的结束点角度。<br>单位:弧度。                        |
488| counterclockwise | boolean | 否  | 是否以逆时针方向绘制椭圆。<br>true:逆时针方向绘制椭圆。<br>false:顺时针方向绘制椭圆。<br>默认值:false。 |
489
490**示例:**
491
492  ```ts
493  // xxx.ets
494  @Entry
495  @Component
496  struct CanvasExample {
497    private settings: RenderingContextSettings = new RenderingContextSettings(true)
498    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
499    private path2Db: Path2D = new Path2D()
500
501    build() {
502      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
503        Canvas(this.context)
504          .width('100%')
505          .height('100%')
506          .backgroundColor('#ffff00')
507          .onReady(() =>{
508            this.path2Db.ellipse(200, 200, 50, 100, 0, Math.PI * 1, Math.PI*2)
509            this.context.stroke(this.path2Db)
510          })
511      }
512      .width('100%')
513      .height('100%')
514    }
515  }
516  ```
517
518  ![zh-cn_image_0000001238712471](figures/zh-cn_image_0000001238712471.png)
519
520
521## rect
522
523rect(x: number, y: number, w: number, h: number): void
524
525创建矩形路径。
526
527**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
528
529**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
530
531**系统能力:** SystemCapability.ArkUI.ArkUI.Full
532
533**参数:**
534
535| 参数名  | 类型     | 必填 |  说明   |
536| ----- | -------- | ---- | ---------- |
537| x    | number | 是 | 指定矩形的左上角x坐标值。<br>默认单位:vp。 |
538| y    | number | 是 | 指定矩形的左上角y坐标值。<br>默认单位:vp。 |
539| w    | number | 是 | 指定矩形的宽度。<br>默认单位:vp。 |
540| h    | number | 是 | 指定矩形的高度。<br>默认单位:vp。 |
541
542**示例:**
543
544  ```ts
545  // xxx.ets
546  @Entry
547  @Component
548  struct CanvasExample {
549    private settings: RenderingContextSettings = new RenderingContextSettings(true)
550    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
551    private path2Db: Path2D = new Path2D()
552
553    build() {
554      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
555        Canvas(this.context)
556          .width('100%')
557          .height('100%')
558          .backgroundColor('#ffff00')
559          .onReady(() =>{
560            this.path2Db.rect(20, 20, 100, 100);
561            this.context.stroke(this.path2Db)
562          })
563      }
564      .width('100%')
565      .height('100%')
566    }
567  }
568  ```
569
570  ![zh-cn_image_0000001193872544](figures/zh-cn_image_0000001193872544.png)
571