1# 几何形状绘制(ArkTS) 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几何形状绘制的常用接口如下表所示,详细的使用和参数说明请见[drawing.Canvas](../reference/apis-arkgraphics2d/js-apis-graphics-drawing.md#canvas)。 28 29| 接口 | 描述 | 30| -------- | -------- | 31| drawPoint(x: number, y: number): void | 用于画一个点。 | 32| drawArc(arc: common2D.Rect, startAngle: number, sweepAngle: number): void | 用于画一个弧。 | 33| drawCircle(x: number, y: number, radius: number): void | 用于画一个圆形。 | 34| drawPath(path: Path): void | 用于画一个自定义路径。 | 35| drawRegion(region: Region): void | 用于画一块区域。 | 36| drawRect(left: number, top: number, right: number, bottom: number): void | 用于画一个矩形。 | 37| drawRoundRect(roundRect: RoundRect): void | 用于画一个圆角矩形。 | 38 39 40## 绘制点 41 42点只能基于画笔在画布上进行绘制,通过使用drawPoint()接口绘制点。绘制点需要接受两个参数,分别为需要绘制的点的x坐标和y坐标。 43 44简单示例如下: 45 46```ts 47// 设置画笔 48let pen = new drawing.Pen(); 49// 设置颜色 50pen.setColor(0xFF, 0xFF, 0x00, 0x00); 51// 设置线宽 52pen.setStrokeWidth(40); 53// 设置画笔描边效果 54canvas.attachPen(pen); 55// 绘制5个点 56canvas.drawPoint(200, 200); 57canvas.drawPoint(400, 400); 58canvas.drawPoint(600, 600); 59canvas.drawPoint(800, 800); 60canvas.drawPoint(1000, 1000); 61// 去除描边效果 62canvas.detachPen(); 63``` 64 65 66 67 68## 绘制圆弧 69 70可以使用画笔或画刷在画布上进行圆弧的绘制,通过使用drawArc()接口绘制圆弧。 71 72绘制圆弧需要一个矩形([common2D.Rect](../reference/apis-arkgraphics2d/js-apis-graphics-common2D.md#rect)),以矩形的边为轮廓进行绘制,还需要两个参数,分别表示弧形的起始角度(startAngle)和扫描角度(sweepAngle)。 73 74此处以使用画笔绘制圆弧为例,简单示例如下: 75```ts 76// 创建画笔 77let pen = new drawing.Pen(); 78// 设置颜色 79pen.setColor({ alpha: 0xFF, red: 0xFF, green: 0x00, blue: 0x00 }); 80// 设置线宽 81pen.setStrokeWidth(20); 82// 设置画笔描边效果 83canvas.attachPen(pen); 84// 创建矩形对象 85const rect: common2D.Rect = {left:100, top:200, right:1000, bottom:600}; 86// 绘制矩形 87canvas.drawArc(rect, 0, 180); 88// 去除描边效果 89canvas.detachPen(); 90``` 91 92 93 94 95## 绘制圆 96 97可以使用画笔或画刷在画布上进行圆的绘制,通过使用drawCircle()接口绘制圆。 98 99绘制圆需要圆心点的x坐标和y坐标,以及圆半径(radius)。 100 101此处以使用画笔绘制圆为例,简单示例如下: 102```ts 103// 创建画笔 104let pen = new drawing.Pen(); 105// 设置颜色 106pen.setColor({ alpha: 0xFF, red: 0xFF, green: 0x00, blue: 0x00 }); 107// 设置线宽 108pen.setStrokeWidth(20); 109// 设置画笔描边效果 110canvas.attachPen(pen); 111// 绘制圆 112canvas.drawCircle(630, 630, 500); 113// 去除描边效果 114canvas.detachPen(); 115``` 116 117 118 119 120## 绘制路径 121 122可以使用画笔或画刷在画布上进行路径的绘制,路径具体可以用于绘制直线、弧线、贝塞尔曲线等,也可以通过路径组合的方式组成其他复杂的形状。 123 124绘制路径的相关接口和实现如下,详细的使用和参数说明请见[Path](../reference/apis-arkgraphics2d/js-apis-graphics-drawing.md#path)。常用的接口如下: 125 1261. 使用new drawing.Path()可以创建一个路径对象。 127 1282. 使用moveTo()接口可以设置自定义路径的起始点位置。 129 1303. 使用lineTo()接口可以添加一条从起始点或路径的最后点位置(若路径没有内容则默认为(0,0))到目标点位置的线段。 131 132此处以使用画笔和画刷绘制五角星为例,简单示例如下: 133 134```ts 135let height_ = 1800; 136let width_ = 1800; 137let len = height_ / 4; 138let aX = width_ / 3; 139let aY = height_ / 6; 140let dX = aX - len * Math.sin(18.0); 141let dY = aY + len * Math.cos(18.0); 142let cX = aX + len * Math.sin(18.0); 143let cY = dY; 144let bX = aX + (len / 2.0); 145let bY = aY + Math.sqrt((cX - dX) * (cX - dX) + (len / 2.0) * (len / 2.0)); 146let eX = aX - (len / 2.0); 147let eY = bY; 148 149// 创建一个path对象,然后使用接口连接成一个五角星形状 150let path = new drawing.Path(); 151// 指定path的起始位置 152path.moveTo(aX, aY); 153// 用直线连接到目标点 154path.lineTo(bX, bY); 155path.lineTo(cX, cY); 156path.lineTo(dX, dY); 157path.lineTo(eX, eY); 158// 闭合形状,path绘制完毕 159path.close() 160 161// 创建画笔对象 162let pen = new drawing.Pen(); 163// 设置抗锯齿 164pen.setAntiAlias(true); 165// 设置描边颜色 166pen.setColor(0xFF, 0xFF, 0x00, 0x00); 167// 设置线宽 168pen.setStrokeWidth(10.0); 169// 设置画笔描边效果 170canvas.attachPen(pen); 171// 创建画刷 172let brush = new drawing.Brush(); 173// 设置填充颜色 174brush.setColor(0xFF, 0x00, 0xFF, 0x00); 175// 设置画刷填充效果 176canvas.attachBrush(brush); 177// 绘制路径 178canvas.drawPath(path); 179// 去除填充效果 180canvas.detachBrush(); 181// 去除描边效果 182canvas.detachPen(); 183``` 184 185 186 187 188## 绘制区域 189 190区域不是一个特定的形状,可以设置为指定的矩形或路径,也可以对两个区域进行组合操作。可以使用画笔或画刷对区域进行绘制。详细的API说明请参考[Region](../reference/apis-arkgraphics2d/js-apis-graphics-drawing.md#region12)。 191 192目前支持设置矩形区域和路径区域,分别通过setRect()接口和setPath()接口来设置。 193 194此处以使用画刷绘制矩形的组合区域为例,示例如下: 195 196```ts 197// 创建画刷 198let brush = new drawing.Brush(); 199// 设置颜色 200brush.setColor(0xFF, 0xFF, 0x00, 0x00); 201// 设置画刷填充效果 202canvas.attachBrush(brush); 203// 创建左上角的region1 204let region1 = new drawing.Region(); 205region1.setRect(100, 100, 600, 600); 206// 创建右下角的region2 207let region2 = new drawing.Region(); 208region2.setRect(300, 300, 900, 900); 209// 将两个区域以XOR的方式组合 210region1.op(region2, drawing.RegionOp.XOR); 211// 绘制区域 212canvas.drawRegion(region1); 213// 去除填充效果 214canvas.detachBrush(); 215``` 216 217 218 219 220## 绘制矩形 221 222可以使用画笔或画刷在画布上进行矩形的绘制。使用drawRect()接口绘制矩形。接口需要传入四个浮点数,分别表示矩形的左、上、右、下四个位置的坐标,连接这4个坐标形成一个矩形。 223 224此处以使用画刷绘制矩形为例,简单示例如下: 225 226```ts 227// 创建画刷 228let brush = new drawing.Brush(); 229// 设置颜色 230brush.setColor(0xFF, 0xFF, 0x00, 0x00); 231// 设置画刷填充效果 232canvas.attachBrush(brush); 233// 绘制矩形 234canvas.drawRect(200, 200, 1000, 700); 235// 去除填充效果 236canvas.detachBrush(); 237``` 238 239 240 241 242## 绘制圆角矩形 243 244可以使用画笔或画刷在画布上进行圆角矩形的绘制。使用drawRoundRect()接口绘制圆角矩形。接口接受1个入参roundRect,对应为圆角矩形对象。 245 246圆角矩形对象通过new drawing.RoundRect()接口构造,构造函数接受3个参数,分别为: 247 248- common2D.Rect(矩形对象),圆角矩形是在该矩形的基础上切圆角形成。 249 250- x轴上的圆角半径。 251 252- y轴上的圆角半径。 253 254此处以使用画刷绘制圆角矩形为例,简单示例代码如下: 255 256```ts 257// 创建画刷 258let brush = new drawing.Brush(); 259// 设置颜色 260brush.setColor(0xFF, 0xFF, 0x00, 0x00); 261// 设置画刷填充效果 262canvas.attachBrush(brush); 263// 创建矩形对象 264let rect: common2D.Rect = { left: 200, top: 200, right: 1000, bottom: 700 }; 265// 创建圆角矩形对象 266let rrect = new drawing.RoundRect(rect, 30, 30); 267// 绘制圆角矩形 268canvas.drawRoundRect(rrect); 269// 去除填充效果 270canvas.detachBrush(); 271``` 272 273 274 275<!--RP1--> 276## 相关实例 277 278针对Drawing(ArkTS)的开发,有以下相关实例可供参考: 279 280- [ArkTSGraphicsDraw (API14)](https://gitee.com/openharmony/applications_app_samples/tree/master/code/DocsSample/Drawing/ArkTSGraphicsDraw) 281<!--RP1End-->