最近一个项目,需要做个Web版本的设计器,用来进行工厂流水线布局的设计。

项目中采用了SVG.JS来做,但是以前流水线是采用单纯的画线的方式实现。客户提出希望用不同的底纹表示不同的流水线,经过一番调查,最终决定采用Path,用pattern的方式来填充底纹。

但是文档中对pattern的使用描述的比较含糊,通过一些实验,终于弄的比较清楚了。总结一下:

1、path中的X、Y参数是指以整个画面的左上角为(0,0),来设置偏移的。如果设为0,就是从(0,0)进行填充。如果在(20,20)为起点的地方,画一个RECT的PATH,里面用pattern填充30,30大小的方块。那么在这个RECT的左上角,会出现填充了10,10的一个方块,其他的部分在这个RECT之外。

2、pattern中的width、height,分别是用来设置平铺时元素的x、y轴的间隔距离的。但是要注意,这个值包含了填充形状本身的大小。同上,要想内部的填充方块的上下间距都是10。则要设置width、height分别为40(方块本身为30,30)。

3、patternTransform,用来设置填充形状的翻转角度。例如设想在一个RECT中填充一些小方块作为底纹。但RECT旋转45°时,这些小方块还是保持水平描画,就会看起来很奇怪。那么就需要用到这个参数了。设置后,填充形状也会进行对应的翻转。使用patternTransform="rotate(45)"这样的方式来指定翻转角度。

用图来说明更清楚些,但截图太麻烦,直接上代码,自己改着试试就知道了。

<?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="400" height="200" xmlns="http://www.w3.org/2000/svg">
<pattern id="notes" x="20" y="20" width="50" height="25" patternTransform="rotate(45)" patternUnits="userSpaceOnUse">
<rect width="20" height="20" style="fill:rgb(0,0,255);stroke-width:1;stroke:rgb(0,0,0)"/>
</pattern>
<path stroke="lightgrey" stroke-linecap="round" stroke-width="1" d="M0 0 L250 0 L250 250 L0 250 Z" />
<path style="fill:url(#notes)" stroke="lightgrey" stroke-linecap="round" stroke-width="1" d="M20 20 L200 20 L200 150 L20 150 Z" />
</svg>

另外,由于是要动态画图,所以采用了DOM的方式操纵。

具体来说,就是要先创建相应的SVG对象:

var path = document.createElementNS("http://www.w3.org/2000/svg", "path");

然后设置相应的属性:

path.setAttribute("fill", "notes");

使用SVG Path绘图的更多相关文章

  1. SVG path

    在网页上画一图形,比如星星或波浪线,开始是想着图形软件画一个的,后来发现SVG这绘图程序的语言,感觉甚是可以,就发了些时间学了一下,在此做一简单分享和记录. 菜鸟上是这么介绍的(SVG 是使用 XML ...

  2. SVG基础绘图实例

    SVG可缩放矢量图(Scalable Vector Graphics),是使用 XML 来描述二维图形和绘图程序的语言,图像在放大或改变尺寸的情况下其图形质量不会有所损失,是万维网联盟的标准. 下面整 ...

  3. SVG PATH 生成器

    参考网站:http://dayu.pw/svgcontrol/ 主要功能:手动可视化生成 SVG图片PATH路径. 效果如下: 代码如下: <!DOCTYPE html> <!-- ...

  4. svg path 动画效果

    http://www.zhangxinxu.com/wordpress/2014/04/animateion-line-drawing-svg-path-%E5%8A%A8%E7%94%BB-%E8% ...

  5. svg path 解析

    <pre><svg width="100%" height="100%" version="1.1" xmlns=&quo ...

  6. SVG path d Attribute

    Scalable Vector Graphics (SVG) 1.1 (Second Edition) W3C Recommendation 16 August 2011 http://www.w3. ...

  7. SVG Path高级教程

    课程分为四个方面: 1. Path概述 2. 移动和直线命令 3. 弧线命令 4. 贝塞尔曲线命令 Path概述 <path> 标签用来定义路径,Path字符串是由命令及其参数组组成的字符 ...

  8. 5分钟看懂svg path 路径的所有命令(更有API解释、有图、有图文对比解析)

    友情提示:更多详情.每个命令的例子.参数变化对比图文详解,欢迎关注九十七度的博客:SVG<Path>命令详解 M = moveto M x y 移动到指定坐标,xy分别为x轴和y轴的坐标点 ...

  9. Svg path画线(不管是直线还是曲线)在一定情况下线条的宽度不一的情况(记录)

    在项目中涉及到svg: 使用path划线实现图表功能. 记录在实现的过程中发现的问题:path在小像素的情况下画出的线条宽度不一样.这是为什么呢? 以下是我做的猜想: 可以看图 在宽度给的很足的时候没 ...

随机推荐

  1. LA 4636 (贪心) Cubist Artwok

    题意: 一个由若干小正方体组成的图形,给出它的正视图和侧视图,求满足条件的最少小正方体的个数. 分析: 虽说是一道简单的贪心,可一直没有太好的思路. 又一次可耻地看了别人的题解. http://blo ...

  2. Lambda表达式【转】

    lambda表达式是对匿名方法的一种改进,具有更加简洁的语法和更易理解的形式,lambda表达式可以包括表达式和语句,并且可以用与创建委托或表达式目录树类型. lambda表达式都使用Lambda运算 ...

  3. 【 D3.js 高级系列 — 6.0 】 值域和颜色

    在[入门 - 第 10 章]作了一张中国地图,其中各省份的颜色值都是随意赋值的.如果要将一些值反映在地图上,可以利用颜色的变化来表示值的变化. 1. 思路 例如,有值域的范围为: [10, 500] ...

  4. 随机森林与GBDT

    前言: 决策树这种算法有着很多良好的特性,比如说训练时间复杂度较低,预测的过程比较快速,模型容易展示(容易将得到的决策树做成图片展示出来)等.但是同时,单决策树又有一些不好的地方,比如说容易over- ...

  5. 载入在线jQuery库

    以百度库为例 <script src="http://libs.baidu.com/jquery/1.11.1/jquery.min.js"></script&g ...

  6. 【大数处理、正则表达式】NYOJ-513

    [正则] 正则表达式是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”). 模式描述在搜索文本时要匹配的一个或多个字符串. 常用字符: //正则表达式 //$ 匹配 ...

  7. 【转】Android Studio系列教程一--下载与安装

    原文网址:http://stormzhang.com/devtools/2014/11/25/android-studio-tutorial1/ 背景 相信大家对Android Studio已经不陌生 ...

  8. Kotlin 语言高级安卓开发入门

    过去一年,使用 Kotlin 来为安卓开发的人越来越多.即使那些现在还没有使用这个语言的开发者,也会对这个语言的精髓产生共鸣,它给现在 Java 开发增加了简单并且强大的范式.Jake Wharton ...

  9. 38、FragmentStatePagerAdapter分页

    [ ViewPager ] ViewPager 如其名所述,是负责翻页的一个 View.准确说是一个 ViewGroup,包含多个 View 页,在手指横向滑动屏幕时,其负责对 View 进行切换.为 ...

  10. 【转】发布python的包至pypi服务器

    [原文链接]http://yejinxin.github.io/distribute-python-packages-to-pypi-server/ 使用pip或easy_install可以管理和安装 ...