Path 指令语法

2021/1/4 canvaspath

# 移动指令 - M

  • M x,yx,y是绝对值
  • m x,yx,y是相对于上一个点的偏移量,如果是(0,0),则表示不存在偏移

# 绘制指令

  • 通过使用一个大写或小写字母输入各命令。大写字母表示绝对值、小写字母表示相对值
  • 线段的控制点是相对于上一线段的终点而言的
  • 依次输入多个同一类型的命令时,可省略重复的命令项。例如:L 100,200 300,400等同于L 100,200 L300,400

# 直线 - L

  • L x,yL x y
  • l x,yl x y

# 水平直线 - H

  • H x
  • h x

绘制从当前点到指定 x 坐标的直线

x 为 System.Double 类型的值

# 垂直直线 - V

  • V y
  • v y

绘制从当前点到指定 y 坐标的直线

y 为 System.Double 类型的值

# 三次方程式贝塞尔曲线 - C

  • C 第一控制点 第二控制点 结束点
  • c 第一控制点 第二控制点 结束点

通过指定两个控制点来绘制由当前点到指定结束点间的三次方程贝塞尔曲线

例如:C 100,200 200,400 300,200c 100,200 200,400 300,200,其中,点(100,200)为第一控制点,点(200,400)为第二控制点,点(300,200)为结束点

# 二次方程式贝塞尔曲线 - Q

  • Q 控制点 结束点
  • q 控制点 结束点

通过指定一个控制点来绘制由当前点到指定结束点间的二次方程贝塞尔曲线

例如:Q 100,200 300,200q 100,200 300,200,其中,点(100,200)为控制点,点(300,200)为结束点

# 平滑三次方程式贝塞尔曲线 - S

  • S 控制点 结束点
  • s 控制点 结束点

通过一个指定点来“平滑地”控制当前点到指定点的贝塞尔曲线

例如:S 100,200 300,200s 100,200 300,200,其中,点(100,200)为控制点,点(300,200)为结束点

# 平滑二次方程式贝塞尔曲线 - T

  • T 控制点 结束点
  • t 控制点 结束点

与平滑三次方程式贝塞尔曲线类似。在当前点与指定的终点之间创建一条二次贝塞尔曲线。控制点假定为前一个命令的控制点相对于当前点的反射。如果前一个命令不存在,或者前一个命令不是二次贝塞尔曲线命令或平滑二次贝塞尔曲线命令,则此控制点就是当前点

# 椭圆圆弧 - A

  • A 尺寸 圆弧旋转角度 优势弧的标记 正负角度标记 结束点
  • a 尺寸 圆弧旋转角度 优势弧的标记 正负角度标记 结束点

在当前点与指定结束点间绘制圆弧,例如:A 5,5 0 0 1 10,10

  • 尺寸:System.Windows.Size 类型,指定椭圆圆弧 X,Y 方向上的半径值
  • 旋转角度:System.Double 类型
  • 圆弧旋转角度值:椭圆圆弧的旋转角度值
  • 优势弧的标记:是否为优势弧,如果弧的角度大于等于180°,则设为1,否在为0
  • 正负角度标记:当正角方向绘制时设为1,否则为0
  • 结束点:System.Windows.Point 类型

# 关闭指令 - Z

  • Z
  • z

用以将图形首、尾点用直线连接,形成一个封闭的区域

# 填充规则

确定一个点是否位于填充区域内的规则方法

如果省略此命令,则路径使用默认行为(EvenOdd)

如果指定此命令,则必须将其置于最前面

# EvenOdd - F0

从该点沿任意方向画一条无限长的射线,然后计算该射线在给定形状中因交叉而形成的路径段数。如果该数是奇数,则点在内部;如果为偶数,则点在外部

# Nonzero - F1

从该店沿任意方向画一条无限长的射线,然后检查形状与该射线的交点。从 0 开始计数,每当线段从左向右穿过该射线时加 1,而每当路径段从右向左穿过该射线时减 1。计算交点的数目后,如果结果为 0,则说明该点位于路径外部;否则位于路径内部