SVG基础知识(三)路径

    所有描述轮廓的数据都放在<path>元素的d属性中(d是data的缩写)。路径数据包括单个字符的命令,比如M表示moveto,L表示lineto,接着是该命令的坐标信息。

1. moveto、lineto和closepath

    每个路径都必须以moveto命令开始。

    命令字母为大写的M,紧跟着一个使用逗号或空格分隔的x和y坐标,这个命令用来设置绘制轮廓的“笔”的当前位置。

    moveto命令后面紧跟着一个或多个lineto命令,用大写L表示,它的后面也是由逗号或空格分隔的x和y坐标。

    大写Z表示的closepath命令绘制一条直线回到当前子路径的起点。

    demo

如果使用小写命令字母,坐标会被解析为相对于当前的画笔位置。

2. 路径的快捷方式

    路径可以使用H命令加绝对x坐标,或者h命令加相对x坐标,来指定一条水平线。类似地,垂直线可以使用v命令加绝对y坐标,或者v命令加相对Y坐标来指定。

简写形式等价的冗长形式    效果
  H20L 20 current_y  绘制一条到绝对位置(20,current_y)的线
  h20l 20 0  绘制一条到(current_x + 20,current_y)的线
  V20L current_x 20  绘制一条到绝对位置(current_x,20)的线
  v20l 0 20  绘制一条到(current_x,current_y + 20)的线

    可以在L或者l后面放多组坐标,正如在<polyline>元素中那样。如果在moveto后面放置多对坐标,除了第一对坐标外,剩下的坐标都会被假设为它们跟在一个lineto后面

    所有不必要的空白都可以消除

  <path>d='M 30 30 L 55 5 80 30 55 55 Z'</path>
  <path>d='M 30 30 25 -25 25 25 -25 25 Z'</path>
  <path>d='M12 24 h 15 v 25 h -15 z'</path>
  <path>d='M12 24h15v25h-15z'</path>
复制代码

3. 椭圆弧

    圆弧命令以字母A(绝对坐标的缩写)或者a(相对坐标的缩写)开始,后面紧跟以下7个参数。

  • 点所在椭圆的x半径和y半径。
  • 椭圆的x轴旋转角度 x-axis-rotation。
  • large-arc-flag,如果需要圆弧的角度小于180度,其为0;如果需要圆弧的角度大于或 等于180度,则为1。
  • sweep-flag,如果需要弧以负角度绘制则为0,以正角度绘制则为1。
  • 终点的x坐标和y坐标(起点由最后一个绘制的点或者最后一个moveto命令确定)。

    demo

4. 路径总结

  命令  参数  效果
  M m  x y  移动到给定坐标
  L l  x y  绘制一条到给定坐标的线。可以提供多组坐标来绘制折线
  H h  x  绘制一条到给定x坐标的横线
  V v  y  绘制一条到给定y坐标的竖线
  A arx ry x-axis- rotation large-arc sweep x y  绘制一个从当前点到(x,y)的椭圆弧。椭圆上的x半径为rx,y半径为ry。椭圆旋转ry x-axis-rotation度。如果圆弧小于180度,则large-arc为0;如果大于180度,则为1。如果圆弧按顺时针方向绘制,则sweep为1,否则为0
  Q qx1 y1 x y  绘制一条从当前点到(x,y),控制点为(xl,yl)的二次贝塞尔曲线
  T t  x y  绘制一条从当前点到(x,y)的二次贝塞尔曲线。控制点是前一个Q命令的控制点的中心对称点。如果没有前一条曲线,当前点会被用作控制点
  C cx1 y1 x2 y2 x y  绘制一条从当前点到(x,y)的三次贝塞尔曲线,(x1,y1)为曲线的开始控制点,(x2,y2)为曲线的终点控制点
  S sx2 y2 x y  绘制一条从当前点到(x,y)的三次贝塞尔曲线,使用(x2,y2)作为新端点的控制点。第一个控制点是前一个C命令的终点控制点的中心对称点。如果前一个曲线不存在,当前点会被用作第一个控制点

5.其它

  • 路径和填充:fill-rule 文档
  • marker元素定义了在特定的元素、元素、元素或者元素上绘制的箭头或者多边标记图形。介绍

转载于:https://juejin.im/post/5a9eb6196fb9a028d042f940

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值