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