Getting Started With SVG
Getting Started With SVG
Written by Ian Elliot   
Article Index
Getting Started With SVG
Sophisticated SVG


svg

Subroutine shapes

If you are going to draw anything complicated then it is worth grouping it together as a sort of graphics subroutine. Any list of tags between <g> and </g> can be referred to and reused by an id.

For example, after:

<g id= "redcircle">
 <circle
  cx="20"  cy="50" r="20"
  style="fill:red"
 />
</g>

You can draw a red circle anywhere using:

<use xlink:href="#redcircle"
          transform="translate(50,50)"/>

You can include other elements in the "transform" attribute such as scale, rotate and skew.

Notice that the circle in the group is also drawn. If you don't want the graphic drawn use the <def> tag in place of <g>.

As well as vector graphic primitives and groups of primitives you can also load entire SVG files and bitmap files. The image tag will read in and display an SVG file or a bitmap – PNG or JPEG.

For example, assuming that the file test.png is stored in the same directory as the .svg file we can write:

<image xlink:href="/test.png
   x="10" y="10"
   width="200" height="200"
/>

The result is the bit map positioned at x,y and scaled to fit the height and width specified. Notice that the image tag goes between the svg tags just like an other SVG drawing operation i.e. it is not an HTML element.

Sophisticated SVG

At this point you might be just beginning to think that this is all a bit primitive. After all who needs another way to draw a circle?

You will have to take it on trust that SVG is a very powerful graphics language that includes some very advanced facilities including animation commands.

The path command (in which L is read as LineTo and M is short for Move) allows you to draw arbitrary Bezier or polyline path. For example this draws a triangle:

<path d="M 100 100 L 300 100 L 200 300 z"
      fill="red" stroke="blue"
      stroke-width="3" />

The following path draws a short Bezier curve:

<path  d="M100,200 C100,100 250,100 250,
                        200 S400,300 400,200" />

The commands available are:

 

  • M = moveto
  • L = lineto
  • H = horizontal lineto
  • V = vertical lineto
  • C = curveto
  • S = smooth curveto
  • Q = quadratic Bézier curve
  • T = smooth quadratic Bézier curveto
  • A = elliptical Arc
  • Z = closepath

 

Of course it would be drawn in the same place every time but you can also specify x,y, width and height to map the drawing to the specified rectangle. Only slightly more advanced is the use of the "transform" attribute to scale, translate and rotate the graphic.

You can also define your own fills. For example a simple linear gradient fill can be defined as:

<defs>
 <linearGradient id="MyGradient">
  <stop offset="5%" stop-color="#F60" />
  <stop offset="95%" stop-color="#FF6" />
 </linearGradient>
</defs>

Using it is just a matter of giving its URL as in:

<ellipse cx="200" cy="70" 
         rx="59" ry="50" 
         fill="url(#MyGradient)" />

 

linear

Linear gradient – no problem.

 

Radial gradients are just as easy and you can define pattern fills. There are also advanced filter effects, animation controls, clipping, masking and the ability for script languages to interact with graphical objects via events and properties.

These will be explained in future articles but for now let's leave the story here. 


svg

 

Related Articles

SVG, JavaScript and the DOM       

A Programmer's Guide to Canvas

Getting Started With Snap.svg       

 

To be informed about new articles on I Programmer, install the I Programmer Toolbar, subscribe to the RSS feed, follow us on, Twitter, FacebookGoogle+ or Linkedin,  or sign up for our weekly newsletter.

 

Banner


Google Files AI Patents
08/07/2015

Google has just revealed the fact that it has applied for at least six patents on fundamental neural network and AI. This isn't good for academic research or for the development of AI by companies.&nb [ ... ]



RC4 Stream Cypher - 75 Hours To Crack
20/07/2015

There has been speculation that the well known RC4 cypher can be broken by state agencies. Now we have a new result which indicates that it is possible to crack in 75 hours, which make it a practical  [ ... ]


More News

 

blog comments powered by Disqus

 



Last Updated ( Tuesday, 28 April 2015 )
 
 

   
Copyright © 2015 i-programmer.info. All Rights Reserved.
Joomla! is Free Software released under the GNU/GPL License.