二维码

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) 坐标变换