`
cuixuxucui
  • 浏览: 350859 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

深入SVG路径~~~在DEGRAFA中使用PATH

阅读更多

W3SCHOOL的SVG教程中可以看出,SVG除了内建了一些基本图形矩形圆形椭圆线条多边形折线外,还支持使用<path>标签来自定义路径从而创建复杂的矢量图形(Paths represent the outline of a shape which can be filled or stroked.)。本文将以附图及实例的方式来详细介绍SVG Path的语法结构,并在文末简要说明如何在DEGRAFA中使用支持SVG的PATH类。

 

PATH十种指令:

括号内为相应参数,详细解释见后文。


M = moveto(M X,Y)
L = lineto(L X,Y)
H = horizontal lineto(H X)
V = vertical lineto(V Y)
C = curveto(C X1,Y1,X2,Y2,ENDX,ENDY)
S = smooth curveto(S X2,Y2,ENDX,ENDY)
Q = quadratic Belzier curve(Q X,Y,ENDX,ENDY)
T = smooth quadratic Belzier curveto(T ENDX,ENDY)
A = elliptical Arc(A RX,RY,XROTATION,FLAG1,FLAG2,X,Y)
Z = closepath()
注释:
  坐标轴为以(0,0)为中心,X轴水平向右,Y轴水平向下。
  所有指令大小写均可。大写绝对定位,参照全局坐标系;小写相对定位,参照父容器坐标系
  对于S,T指令,其X1,Y1为前一条曲线的X2,Y2的反射
  指令和数据间的空格可以省略
  同一指令出现多次可以只用一个


L H V指令
 M起点X,起点YL(直线)终点X,终点YH(水平线)终点XV(垂直线)终点Y
 如M10,20,L80,50,M10,20,V50,M10,20,H90


C指令——三次贝塞曲线
 C第一控制点X,第一控制点Y 第二控制点X,第二控制点Y曲线结束点X,曲线结束点Y


S指令
 S第二控制点X,第二控制点Y 结束点X,结束点Y


Q指令——二次贝塞曲线
 Q控制点X,控制点Y 曲线结束点X,曲线结束点Y
如M0,25,Q12.5,37.5,25,25,M25,25,Q37.5,12.5,50,25


T指令——映射
 T映射前面路径后的终点X,映射前面路径后的终点Y


A指令
 Elliptical Arc,允许不闭合。可以想像成是椭圆的某一段,共七个参数。
 RX,RY指所在椭圆的半轴大小
 XROTATION指椭圆的X轴与水平方向顺时针方向夹角,可以想像成一个水平的椭圆绕中心点顺时针旋转XROTATION的角度。
 FLAG1只有两个值,1表示大角度弧线,0为小角度弧线。
 FLAG2只有两个值,确定从起点至终点的方向,1为顺时针,0为逆时针
 X,Y为终点坐标
 如M0,25,A12.5,12.5,0,1,1,0,25.01Z表示一个圆心在(12.5,25),半径为12.5的圆。其中起点和终点几乎重合,用Z指令将它们闭合,注意终点不能填(0,25),那样A指令是无法被解析的。

 

由以上介绍可以看出,手工绘制SVG路径是相当复杂的。对于简单的SVG图形,一般只使用M,L,Q,A,Z五种指令完成。更复杂的图形则必须要靠软件来帮助完成,比如ADOBE ILLUSTRATOR。

 

两个完整的例子:

把代码拷入记事本,保存为"**.svg"即可。如果无法运行,可能需要SVGVIEWER,详情参照SVG中国相关内容或者GOOGLE下载一个

三角形:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

<svg width="100%" height="100%" version="1.1"
xmlns="http://www.w3.org/2000/svg">

<path d="M250 150 L150 350 L350 350 Z" />

</svg>

螺旋:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

<svg width="100%" height="100%" version="1.1"
xmlns="http://www.w3.org/2000/svg">

<path d="M153 334
C153 334 151 334 151 334
C151 339 153 344 156 344
C164 344 171 339 171 334
C171 322 164 314 156 314
C142 314 131 322 131 334
C131 350 142 364 156 364
C175 364 191 350 191 334
C191 311 175 294 156 294
C131 294 111 311 111 334
C111 361 131 384 156 384
C186 384 211 361 211 334
C211 300 186 274 156 274"
style="fill:white;stroke:red;stroke-width:2"/>

</svg>

 参考链接:http://www.w3.org/TR/SVG/paths.html

FLEX中使用DEGRAFA的PATH类指定DATA
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="horizontal" xmlns:degrafa="http://www.degrafa.com/2007">
<degrafa:Surface>
 <degrafa:GeometryGroup scaleX="2" scaleY="2">
     <degrafa:Path data="M0,25,Q12.5,37.5,25,25,M25,25,Q37.5,12.5,50,25" stroke="{blackstroke}"/>
    </degrafa:GeometryGroup>
 <degrafa:strokes>
  <degrafa:SolidStroke id="blackstroke" color="#000000" weight="1">
     </degrafa:SolidStroke>
 </degrafa:strokes>
</degrafa:Surface> 
</mx:Application>
如上,将手工绘制或者软件帮助完成的PATH字符串填入Path data="***"即可查看效果。

一个比较著名的效果图就是SVG TIGER

SVG TIGER

 

FLEX中使用BitmapFill的source属性指定SVG类文件

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="
http://www.adobe.com/2006/mxml" layout="absolute"
                backgroundGradientColors="[#333333, #222222]"
                xmlns:degrafa="com.degrafa.*"
                xmlns:paint="com.degrafa.paint.*"
                xmlns:geometry="com.degrafa.geometry.*">              
    <degrafa:Surface verticalCenter="0" horizontalCenter="0">
        <degrafa:fills>
            <paint:BitmapFill id="bitmapFill" source="{svgTest}" smooth="true"/>
        </degrafa:fills>
        <degrafa:GeometryGroup scaleX="1" scaleY="1">
            <geometry:Circle fill="{bitmapFill}" radius="450"/>
        </degrafa:GeometryGroup>
    </degrafa:Surface>
 <mx:Script>
  <![CDATA[
   [Embed(source="circle.svg")]
   [Bindable]
   public var svgTest:Class;
  ]]>
 </mx:Script>
</mx:Application>


circle.svg:

<?xml version="1.0"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
  "
http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg width="200" height="200" xmlns="
http://www.w3.org/2000/svg">
  <desc>All SVG documents should have a description</desc>
    <defs>
      <!-- Items can be defined for later use -->
  </defs>
   <g>
      <circle cx="15" cy="15" r="15" fill="red"/>
  </g>
</svg>

 

分享到:
评论

相关推荐

    3D旋转+SVG路径动画特效.rar

    【标题】"3D旋转+SVG路径动画特效.rar"是一个包含高级前端开发技术的资源包,专注于使用jQuery、CSS和SVG实现动态3D旋转及路径动画效果。这种特效在现代网页设计中广泛应用,能为用户提供丰富的视觉体验和交互性。 ...

    SVG支持用<path> 标签用来定义图形的路径。本文将详细介绍SVG Path语法结构,并附图及SVG path实例以更直观的方式让你掌握SVG路径的运用

    本文将深入探讨SVG Path的语法结构,通过实例来帮助你理解并掌握如何使用`&lt;path&gt;`标签来定义图形的路径。 SVG Path的基本语法由一系列的命令和参数组成,这些命令指示了图形应该如何被绘制。每个命令都以大写字母...

    基于SVG路径运动的js轮播插件path-slider

    SVG(Scalable Vector Graphics)是一种基于XML的矢量图像格式,具有清晰的分辨率独立性,能够创建复杂的图形,并且在网页中广泛使用。而Path-Slider.js是利用SVG路径特性的JavaScript轮播插件,它提供了一种独特的...

    svgpath:SVG路径低级转换工具包

    有时您不能使用transform属性,而必须直接将更改应用于svg路径。 那么这个包是给你的:)! 注意:此软件包适用于字符串,而不适用于完整的svg xml源。 安装 npm install svgpath 例子 var svgpath = require ( 'svg...

    svg path.zip

    在Web开发中,SVG路径常与JavaScript库如D3.js结合使用,进行数据可视化。例如,你可以加载SVG路径,然后根据数据动态改变图形的颜色或者尺寸,以直观地展示地理信息或统计结果。 总的来说,"svg path.zip"这个...

    一个封装了vivus的vue组件能够播放svg路径动画

    在这个场景中,我们讨论的是一个基于Vue.js的自定义组件,它整合了Vivus库,用于播放SVG路径动画。Vivus是一个轻量级的JavaScript库,能够使静态的SVG图形动起来,通过动态地绘制SVG路径来实现各种动画效果。 首先...

    point-in-svg-path:确定点是否在SVG路径中-从Snap.svg抄录的代码

    SVG路径中的点确定点是否在SVG路径中-从代码例子检查单个点是否在单个闭合路径内: const { pointInSvgPath } = require ( 'point-in-svg-path' )pointInSvgPath ( 'M80 80A 45 45, 0, 0, 0, 125 125L 125 80 Z' , ...

    SVGPath:Svg 路径动画

    本文将深入探讨SVGPath在SVG中的应用,以及如何在Java环境中实现SVG路径动画。 SVG(Scalable Vector Graphics)是一种基于XML的矢量图像格式,支持二维图形和图像的创建。与像素图(如JPEG或PNG)不同,SVG图像是...

    svg.path:SVG路径对象和解析器

    svg.path svg.path是在SVG中实现不同路径命令的对象的集合,以及SVG路径定义的解析器。用法有四个路径段对象,即Line , Arc , CubicBezier和QuadraticBezier还有一个Path对象,该对象充当路径段对象的集合。 这些...

    svg-path-reverse:这是“ something”转换器JavaScript SVG路径,将路径转换为可挂钩的图形指令以进行任意转换

    SVG路径反转库这是一个简单的SVG路径逆转库,具有非常简单的API。安装使用npm安装: $&gt; npm install svg-path-reverse使用图书馆这是一个通用库,您可以通过require.js,UMD,commonjs,浏览器等方式加载它,不管它...

    segment-实现SVG路径描边绘制与动画的轻量库

    在SVG中,`path`元素是用于绘制各种形状的基础,通过指定一系列的命令和坐标来构建图形路径。然而,手动控制SVG路径的描边和动画可能会相当复杂。这时,`segment`这个轻量级库就应运而生,它为开发者提供了简单易用...

    js+html5 svg创建点路径生成器工具代码.zip

    页面中可能有一个SVG画布,用户可以在上面添加和移动点,以及查看生成的SVG路径数据。 2. **js** 文件夹:这包含了一个或多个JavaScript文件,用于处理用户交互、计算点坐标、更新SVG路径数据等功能。可能的文件名...

    convert-svg-path-to-polygon:通过对路径上的采样点将 svg 路径转换为 ​​svg 多边形的示例源

    在SVG(可缩放矢量图形)中,路径是一种强大的元素,可以定义复杂形状和曲线。SVG路径由一系列命令和参数组成,如`M`(移动到)、`L`(直线到)、`C`(三次贝塞尔曲线到)等。然而,有时候我们需要将这些路径转换成...

    svg-path-bounds:获取svg路径数据的边界框

    从svg路径数据中检索边界框。 const getBounds = require ( 'svg-path-bounds' ) let [ left , top , right , bottom ] = getBounds ( 'M0 0L10 10 20 0Z' ) // [0, 0, 20, 10] bounds = getBounds(path | ...

    path_C#_svg_pathData_

    本主题将深入探讨C#中处理SVG `pathData`的方法,以及如何在屏幕上解析和绘制这些路径。 首先,`pathData`字符串是由多个字母指令和数字坐标组成的,如"M", "L", "H", "V", "C", "S", "Q", "T", "A"等,它们分别...

    dotnet OpenXML 让 PathLst 自定义形状转 SVG 路径格式的 Geometry 内容.rar

    本资源聚焦于一个特定的应用场景:如何使用OpenXML将PathLst中的自定义形状转换为SVG路径格式的Geometry内容。这在WPF(Windows Presentation Foundation)应用开发中尤其有用,因为它允许更灵活地处理图形和视觉...

    svg-path-editor:在线编辑器,用于创建和操作SVG路径

    SvgPathEditor在浏览器中编辑或创建SVG路径: : 如何使用基本的:在路径字段中粘贴或编辑原始路径单击+将新命令添加到路径,选择类型,然后单击目标通过拖放移动点单击一个点,然后在...按钮上,在选定的命令之后...

    SVG路径直线动画.rar

    分析这个文件的内容,可以深入理解SVG动画的工作原理,学习如何通过编程方式控制SVG路径的动态行为,从而在网页或应用中创建出引人入胜的视觉效果。 总结来说,SVG路径直线动画是SVG图形技术的一个重要应用场景,...

    MM.SVGPath:提供用于操作 SVG 路径的 utils 函数

    MM.SVG路径MM.SVGPath 提供了用于操作 SVG 路径的 utils 函数。应用程序接口MM.SVG路径静态方法MM.SVGPath.parse(pathStr) 解析路径字符串并返回一个包含命令字母和参数的对象数组。MM.SVGPath....

Global site tag (gtag.js) - Google Analytics