Geomertry
Geomertry
是基本形状的根类,是一个抽象的(不可实例化的)类。包含了基本几何形状通用的属性和方法。
Geomertry
类非常重要,掌握了该类,就能更容易理解 AnyGraph
的几何对象类型,以及理解 AnyGraph
的图形渲染过程。
几何对象类关系图
classDiagram Geometry <|-- Point Geometry <|-- Rect Geometry <|-- Polyline Geometry <|-- Polygon Geometry <|-- Circle Geometry <|-- Ellipse Geometry <|-- Image Geometry <|-- Text Geometry : String uid Geometry : Enum type Geometry : float rotation Geometry : Object style Geometry : Object properties Point : float x Point : float y Point : float size Point : int pointType Rect : float x Rect : float y Rect : float width Rect : float height Rect : float rx Rect : float ry Rect : toPixel() Rect : getBBox() Rect : draw() Rect : container() Circle : float x Circle : float y Circle : float radius Circle : toPixel() Circle : getBBox() Circle : draw() Circle : container() Ellipse : float x Ellipse : float y Ellipse : float rx Ellipse : float ry Ellipse : toPixel() Ellipse : getBBox() Ellipse : draw() Ellipse : container() Polyline : floatArray coords Polyline : toPixel() Polyline : getBBox() Polyline : draw() Polyline : container() Polygon : floatArray coords Polygon : toPixel() Polygon : getBBox() Polygon : draw() Polygon : container() Image : float x Image : float y Image : float width Image : float height Image : toPixel() Image : getBBox() Image : draw() Image : container() Text : float x Text : float y Text : float width Text : float height Text : toPixel() Text : getBBox() Text : draw() Text : container()
属性
其重要属性包括:
名称 | 类型 | 说明 |
---|---|---|
uid | String | 唯一ID |
type | String | 类型 |
rotation | float | 旋转角度 |
style | Object | 样式 |
properties | Object | 属性 |
方法
其基本的方法包括:
名称 | 说明 |
---|---|
getUid() | 获取对象ID |
getType() | 获取对象类型 |
getStyle() | 获取对象样式 |
setStyle(style) | 设置对象样式 |
draw(ctx, style, frameState) | 绘制对象图形(需各个子类实现) |
toPixel() | 转换为屏幕坐标 |
getBBox() | 获取对象边界 |
contain(point) | 判断某点是否在当前对象的边框内 |
clone() | 克隆对象 |
toData() | 获取当前对象属性 |
下面讲解几个常用的方法:
draw()
1 | draw(ctx, style, frameState) |
该方法由各子类来实现,负责将图形绘制在Canvas中,包含了3个参数:
名称 | 说明 |
---|---|
ctx | Canvas渲染上下文对象 |
style | 图形样式,该样式为渲染时的样式 |
frameState | 当前图形信息 |
toPixel()
1 | toPixel(tool) |
该方法由各子类来实现,负责将图形坐标转换为Canvas像素坐标,其参数为 “变换矩阵” 。
setStyle()
1 | setStyle(style) |
该方法可修改对象的样式,其参数为 样式对象,虽然该对象的样式存储在其内部变量 style
中,但该方法仅修改参数中的指定的属性,而不是该对象样式的所有属性。例如该对象当前样式为 {"color":"red", "fillColor":"blue"}
,如果参数为 {"color":"gree"}
,则结果仅改变样式中的color
属性,而不改变fillColor
属性。
getBBox()
该方法返回该对象的 Bounding Box, 即矩形边界框,它是一个矩形框,用于包围当前形状。通常采用 [minX, minY, maxX, maxY]
格式记录Bounding Box。对于三维图形又叫包围盒,对于二维图形又叫包围矩形;
如下图所示的红色框即为该对象的 Bounding Box。
contain()
1 | contain(point, useCoord = true) |
该方法判断一个点是否包含在当前对象内。在 Geomertry
类中已实现了一个基本版本,即通过 getBBox()
得到当前对象的矩形边框框,通过判断点是否在 Bounding Box 中而进行判断。
子类可重新该方法,进行更为精确的判断。例如对于 Circle
对象,可通过判断 point
与 圆心 radius
之间的距离是否超过圆的半径,从而得到比判断 point
是否在该圆的 Bounding Box 内更为精确的结果。
clone()
该方法实现对象克隆,返回一个新的对象,建议子类重写该方法,实现对象的深度复制。
toData()
该方法以JSON格式返回对象信息,详见下面各类对象中的‘数据格式’章节。
其他
除了上述这些基本方法之外,下面这几个方法也很常用,这些方法将在进阶篇其他章节讲述。
名称 | 说明 |
---|---|
setContextStyle(ctx, style) | 设置画板样式 |
getColor(param, ctx) | 获取填充/描边的颜色值或特殊效果 |
strokeAndFill(ctx) | 描边和填充 |
translate(dx, dy) | 对象平移 |
scale(sx, sy, opt_anchor) | 对象缩放 |
rotate(angle, opt_anchor) | 对象旋转 |
moveTo(dx, dy) | 将对象移动至某点 |
transform(matrix) | 坐标变换 |