Navigace

Hlavnφ menu

 

Kurz SVG - nenφ to Flash a p°ece se toΦφ!

Deklarativnφ animace umo₧≥ujφ velmi snadnΘ animovßnφ grafick²ch objekt∙ bez pou₧itφ skript∙. Tento zp∙sob se oznaΦuje jako "time-based" - m∙₧ete definovat p°esn∞ naΦasovanou zm∞nu vpodstat∞ jakΘhokoli parametru grafiky, poΦφnaje rozm∞ry, polohou a pr∙hlednostφ a₧ t°eba po zm∞nu transformaΦnφch atribut∙. To je hlavnφ rozdφl oproti SWF formßtu, kde se Φasovßnφ animacφ v₧dy odvφjφ od jednotliv²ch klφΦov²ch snφmk∙ - anglicky "frame-based". DalÜφ d∙le₧it² rozdφl je v tom, ₧e jednotlivΘ deklarativnφ animace mohou b²t na sob∞ zcela nezßvislΘ a mφt jinou dobu trvßnφ nebo poΦet opakovßnφ a podobn∞.

Deklarativnφ p°φstup mß takΘ velkou v²hodu ve snadnΘm, p°esn∞ definovanΘm p°enosu animacφ nap°φΦ cel²m spektrem softwarov²ch aplikacφ. AnimaΦnφ prvky SVG byly vyvinuty ve spoluprßci s pracovnφ skupinou W3C Synchronized Multimedia (SYMM), kterß vytvo°ila specifikaci Synchronized Multimedia Integration Language 1.0. Technologie SMIL mß p°itom u₧ dnes pom∞rn∞ silnou podporu v p°ehrßvaΦφch jako QuickTime nebo RealPlayer.

Odkazy v SVG

JeÜt∞ ne₧ se pono°φme do animacφ, povφme si n∞co mßlo o tom, jak v SVG vytvß°et odkazy. Ty jsou toti₧ zßkladem interaktivity. Obdoba hyperlinku znßmΘho z klasickΘho HTML vypadß takto:

<a xlink:href="http://www.w3.org">
  <ellipse cx="2.5" cy="1.5" rx="2" ry="1"
           fill="red" />
</a>

VÜechny grafickΘ objekty uvnit° elementu hyperlinku jsou aktivnφ - reagujφ jako odkaz. V uvedenΘm p°φkladu je to Φervenß elipsa.

DalÜφmi mo₧n²mi atributy jsou xlink:title pro pojmenovßnφ odkazu a target pro jmΘno rßmu ve kterΘm se mß otev°φt cφlov² dokument.

SVG mß ve slovnφku i analogii odkazu na konkrΘtnφ prvek ve strßnce. Jeliko₧ se v p°φpad∞ SVG jednß o grafick² objekt - obrßzek, je d∙le₧itΘ mφt mo₧nost adresovat konkrΘtnφ v²°ez kresby, jinak °eΦeno pohled, anglicky "view". V zßsad∞ jsou k dispozici dv∞ mo₧nosti:

  1. kresba.svg#svgView(viewBox(0,200,1000,1000)) - p°esn²m Φφseln²m definovßnφm v²°ezu grafiky
  2. kresba.svg#nejaky_pohled - odkazem na specißlnφ prvek view obsahujφcφ p°eddefinovan² pohled na grafick² dokument

Element view

P°ehled atribut∙ elementu:

  • viewTarget = (jmΘno_objektu) - (nepovinn²) pokud zadßme identifikßtor objektu, p°i°azenΘho ke konkrΘtnφmu pohledu, prohlφ₧eΦ by jej m∞l po aktivaci hyperlinku zv²raznit
  • viewBox = (x y Üφ°ka v²Üka) - atribut umo₧nφ definovat virtußlnφ okno, kter²m se u₧ivatel po aktivaci hyperlinku bude na dokument dφvat: x, y nastavφ lev² hornφ roh; Üφ°ka a v²Üka pak urΦujφ rozsah virtußlnφho pohledu
  • preserveAspectRatio = (typ_p°izp∙sobenφ_rozm∞r∙) - pou₧itφm "viewBox" m∙₧e dojφt i k neproporcionßlnφ deformaci pohledu, proto mßte k dispozici tento parametr, kter²m m∙₧ete nastavit chovßnφ prohlφ₧eΦe: "none" umo₧nφ deformaci sou°adnic a hodnota, nap°φklad "xMidYMid", p°izp∙sobφ grafiku proporcionßln∞ do pohledovΘho okna a navφc ji vycentruje v obou sm∞rech (toto je v²chozφ hodnota).
  • zoomAndPan - nastavenφm na hodnotu "disable" mohou prvky view (taktΘ₧ vÜechny vn∞jÜφ prvky svg) zakßzat u₧ivateli manußln∞ m∞nit pohled a zv∞tÜenφ v prohlφ₧eΦi SVG (v²chozφ je "magnify" - vÜe povoleno)

Animace

KlφΦovΘ pro pochopenφ je slovφΦko deklarativnφ - to znamenß, ₧e tv∙rce animace p°esn∞ definuje (deklaruje), ₧e dan² atribut konkrΘtnφho objektu bude animovßn (Φili jeho hodnota se bude m∞nit) v definovanΘm rozmezφ hodnot v konkrΘtnφm Φase od-do. SVG norma mß obrovskou Ükßlu mo₧nostφ, jak to ud∞lat. Velmi flexibilnφ je i urΦovßnφ Φasu - animace mohou b²t nap°φklad startovßny n∞jakou udßlostφ u₧ivatelskΘho rozhranφ (t°eba "onmouseover") nebo navßzßny na pr∙b∞h n∞jakΘ jinΘ SVG animace. Mo₧nostφ je tolik, ₧e vystaΦφ na n∞kolik Φlßnk∙.

Vztah SVG v∙Φi SMIL

SVG je jazyk odvozen² od W3C normy SMIL ("host language" v terminologii SMIL) a jako takov² tedy obsahuje animaΦnφ prvky v nφ definovanΘ - krom∞ nich ale byly definovßny i n∞kterΘ dalÜφ, aby se dosßhlo pokrytφ celΘ oblasti 2D grafiky.

Prvky definovanΘ ve specifikaci SMIL:

  • animate - m∞nφ hodnoty skalßrnφch atribut∙ v Φase
  • set - zjednoduÜenφ prvku animate pou₧φvanΘ pro zm∞nu (animovßnφ) neΦφseln²ch atribut∙ typu visibility
  • animateMotion - pohybuje s prvkem podΘl zvolenΘ animaΦnφ k°ivky urΦujφcφ drßhu pohybu
  • animateColor - pro zm∞nu barevn²ch hodnot

Prvky vztahujφcφ se specißln∞ k SVG animacφm

  • animateTransform - animuje transformaΦnφ atributy, velmi siln² nßstroj - jeliko₧ je mo₧nΘ jednotlivΘ typy animacφ kombinovat, lze pohodln∞ vytvo°it libovolnΘ pohybovΘ efekty
  • mpath element - vektorovß cesta, kterou lze umφstit do prvku animateMotion a definovat tak p°esn∞ drßhu pohybu
  • keyPoints - tento attribut je dalÜφm rozÜφ°enφm elementu animateMotion a umo₧≥uje °φdit zrychlenφ, nejΦast∞jÜφ pou₧itφ je evidentnφ - vytvo°enφ p°irozen²ch pohybov²ch efekt∙
  • rotate - dalÜφ atribut pro prvek animateMotion, kter² °φdφ sm∞r natoΦenφ animovanΘho objektu (nap°φklad dφvßme-li se shora na auto pohybujφcφ se po k°ivce, jeho ÜpiΦka by se samoz°ejm∞ m∞la stßle natßΦet ve sm∞ru jφzdy)

Animace prakticky

Abychom stßle jen neteoretizovali, vyzkouÜφme si nynφ mal² p°φklad, ve kterΘm jsou animovßny jednotlivΘ atributy "width", "x" a "fill" obdΘlnφk∙:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
<svg version="1.1" baseProfile="tiny"
     xmlns="http://www.w3.org/2000/svg"
     xmlns:xlink="http://www.w3.org/1999/xlink"
     width="320px" viewBox="0 0 480 360">
<title>9.2 Animace</title>
<desc>Testuje zakladni animacni prvek 'animate'</desc>
<g font-family="Helvetica" font-size="24">
  <!-- vykresleni souradnic s popisem casu -->
  <line x1="190" x2="190" y1="45" y2="300"
        stroke="black" stroke-width="4"/>
  <line x1="460" x2="460" y1="45" y2="300"
        stroke="black" stroke-width="4"/>
  <text x="156" y="32">0-2 sec.</text>
  <text x="380" y="32">-&gt;5 sec.</text>
  <!-- 4 nasledujici animace funguji i v KSVG 3.2 -->
  <!-- a ukazuji ze pro stejny efext lze vyuzit   -->
  <!-- ruznorode zpusoby nastaveni meznich hodnot.-->
  <g>
  <rect x="160" y="60" width="30" height="30"
        fill="#FFAA44" stroke="red" stroke-width="4">
  <animate attributeName="width" from="30" to="300"
           begin="2s" dur="3s" fill="freeze"/>
  </rect>
  <text x="20" y="85" fill="red">from-&gt;to</text>
  </g>
  <g>
  <rect x="160" y="100" width="30" height="30"
        fill="#FFAA44" stroke="red" stroke-width="4">
  <animate attributeName="width" from="30" by="270"
           begin="2s" dur="3s" fill="freeze"/>
  </rect>
  <text x="20" y="125" fill="red">from-&gt;by</text>
  </g>
  <g>
  <rect x="160" y="140" width="30" height="30"
        fill="#FFAA44" stroke="red" stroke-width="4">
  <animate attributeName="width" by="270"
           begin="2s" dur="3s" fill="freeze"/>
  </rect>
  <text x="20" y="165" fill="red">-&gt;by</text>
  </g>
  <g>
  <rect x="160" y="180" width="30" height="30"
       fill="#FFAA44" stroke="red" stroke-width="4">
  <animate attributeName="width" to="300"
          begin="2s" dur="3s" fill="freeze"/>
  </rect>
  <text x="20" y="205" fill="red">-&gt;to</text>
  </g>
  <g>
  <rect x="160" y="220" width="30" height="30"
       fill="#FFAA44" stroke="red" stroke-width="4">
  <!-- 'additive="sum"' je IGNOROVAN v KSVG 3.2 -->
  <animate attributeName="x" from="0" to="270"
          begin="2s" dur="3s" fill="freeze" additive="sum"/>
  </rect>
  <text x="20" y="245" fill="red">anim. 'x'</text>
  </g>
  <g>
  <rect x="160" y="260" width="300" height="30"
        fill="#FFAA44" stroke="red" stroke-width="4">
  <!-- toto nefunguje vubec v KSVG 3.2 -->
  <animate attributeName="fill" from="#FFAA44" to="#00AA44"
           begin="2s" dur="3s" fill="freeze"/>
  </rect>
  <text x="20" y="285" fill="red">anim. 'fill'</text>
  </g>
</g>
<!-- obrys platna -->
<rect x="1" y="1" width="478" height="358"
      fill="none" stroke-width="2" stroke="blue"/>
</svg>

Na tomto mφst∞ musφm odboΦit a ud∞lat praktickou poznßmku t²kajφcφ se prohlφ₧eΦ∙. Bohu₧el zatφm stßle platφ, nepoΦφtßm-li komerΦnφ p°ehrßvaΦe pro mobilnφ za°φzenφ, ₧e v∞tÜina animacφ je zcela sprßvn∞ interpretovßna pouze v programu Adobe SVG Viewer 3 (ASV3). Pom∞rn∞ slibn²m v²vojem prochßzφ v poslednφ dob∞ prohlφ₧eΦ KSVG, integrovan² v unixovΘm grafickΘm prost°edφ KDE od verze 3.2. Nap°φklad p°edchozφ ukßzku je mo₧nΘ animovat i v KSVG (viz komentß°e v SVG k≤du), ale u dalÜφch ji₧ budete v∞tÜinou pot°ebovat ASV3.

Zßkladnφ struktura zßpisu animaΦnφch prvk∙ - atributy

V tΘto Φßsti si probereme ty atributy, kterΘ naleznou vyu₧itφ ve v∞tÜin∞ animaΦnφch prvk∙.

Odkaz na animovan² element

Atribut "xlink:href" obsahuje URI odkazujφcφ na cφlov² element, jen₧ musφ b²t v aktußlnφm SVG fragmentu, aby byla zaruΦena jeho dostupnost. URI musφ ukazovat na p°esn∞ jeden element. Toto URI lze dokonce vynechat - animovßn pak bude rodiΦovsk² prvek p°φmo nad°azen² danΘmu objektu animate.

UrΦenφ animovanΘho atributu

Atribut "attributeName" - zde urΦφte atribut, kter² byste cht∞li v animaci m∞nit - pro animaci pohybu to m∙₧e b²t t°eba "x".

Atribut "attributeType" - mo₧nΘ hodnoty: "CSS", "XML", "auto". UrΦenφ jmennΘho prostoru XML ve kterΘm je definovßn cφlov² atribut. V²chozφ hodnota je "auto" a v naprostΘ v∞tÜin∞ p°φpad∙ nebude v∙bec nutnΘ se tφmto parametrem zab²vat.

UrΦenφ rozsahu hodnot

Nßsledujφcφ t°i atributy umo₧≥ujφ nastavit rozmezφ, ve kterΘm se v pr∙b∞hu animovßnφ budou hodnoty m∞nit. (V prvku set se uplatnφ jen posledn∞ jmenovan².)

  • from - poΦßteΦnφ hodnota animovanΘho atributu.
  • by - zm∞na hodnoty v∙Φi poΦßteΦnφmu stavu. Pokud nastavφme "by", nebudeme u₧ nastavovat koneΦnou hodnotu "to" a naopak - je-li urΦena absolutnφ koneΦnß hodnota, nebudeme nastavovat "by".
  • to - koneΦnß hodnota animace.

Zachovßnφ v²sledku animace

Atributem "fill" m∙₧ete urΦit, zda pracovnφ v²sledek animace z∙stane zachovßn (freeze) i po jejφm skonΦenφ nebo bude odstran∞n (remove - v²chozφ hodnota).

Aditivnost a kumulativnost animovan²ch hodnot

Velmi Φasto je p°i animaci u₧iteΦnΘ mφt mo₧nost m∞nit n∞jakou hodnotu (polohu, natoΦenφ) relativn∞ k poΦßteΦnφmu, klidovΘmu stavu. P°edstavme si nap°φklad "rozt°esenφ" animovanΘho objektu okolo jeho klidovΘ polohy - u₧ijete-li nßsledujφcφch atribut∙, nebudete se u₧ muset v∙bec zajφmat o jeho absolutnφ polohu. (Pro animace polohy se samoz°ejm∞ nabφzφ jeÜt∞ alternativnφ °eÜenφ tΘto ·lohy pomocφ zm∞ny sou°adnicovΘho systΘmu, ale to nynφ nenφ d∙le₧itΘ.)

Atribut "additive" urΦφ, zda aktußlnφ animovanß hodnota nahradφ klidovou hodnotu atributu (replace - v²chozφ hodnota) nebo se k nφ bude p°iΦφtat (sum).

Atribut "accumulate" - kumulativnost se uplatnφ v p°φpad∞ animaΦnφch cykl∙, kterΘ prob∞hnou vφce ne₧ jednou. Funguje to p°esn∞ tak, jak byste Φekali - jestli₧e ji nastavφte na hodnotu "sum", pak se k aktußlnφ hodnot∞ animace p°iΦφtß hodnota, kterou m∞l animovan² atribut na konci p°edchßzejφcφho cyklu.

P°φklad pou₧itφ atribut∙

<rect width="20px" ...>
  <animate attributeName="width"
           from="0px" to="10px" dur="10s"
           additive="sum" accumulate="sum"
           repeatCount="5"/>
</rect>

Na konci prvnφho opakovßnφ bude hodnota "width" rovna 30 px, na konci cruhΘho cyklu 40 px a tak dßle. A nynφ jeÜt∞ reßlnß demonstrace (Φty°i animovanΘ obdΘlnφky, ka₧d² s r∙znou kombinacφ t∞chto atribut∙):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
<svg version="1.1" baseProfile="tiny"
     xmlns="http://www.w3.org/2000/svg"
     xmlns:xlink="http://www.w3.org/1999/xlink"
     width="320px" viewBox="0 -20 480 300">
<desc>
  Priklad nazorne predvadi animaci rozmeru 4 obdelniku
  funkce atributu 'additive' a 'accumulate'.
  Kazdy obdelnik demonstruje jinou kombinaci parametru.
  Cervene ramovani ukazuje velikost po ukonceni
  vsech 3 animacnich cyklu.
</desc>
<title>9.3.5 Atributy 'additive' a 'accumulate' </title>
<!-- nastav centrovane pismo      -->
<!-- pro vsechny vnorene skupiny  -->
<g font-family="Helvetica" font-size="18" text-anchor="middle">
<!-- 4 stejne obd. umistene touto -->
<!-- transformaci na ruzne pozice -->
<g transform="translate(0, 0)">
<rect x="60" y="20" width="50" height="20"
      fill="none" stroke="red" stroke-width="4"/>
<rect x="60" y="20" width="50" height="20" fill="violet">
<animate attributeName="height" calcMode="discrete"
  additive="replace"  accumulate="none"
  repeatCount="3" from="200" to="20"
  begin="0s" dur="4s" fill="freeze"/>
</rect>
<text x="85" y="0" fill="navy">replace/none</text>
</g>
<!-- 2. obdelnik -->
<g transform="translate(110, 0)">
<rect x="60" y="20" width="50" height="40"
      fill="none" stroke="red" stroke-width="4"/>
<rect x="60" y="20" width="50" height="20" fill="violet" >
<animate attributeName="height" calcMode="discrete"
  additive="sum" accumulate="none"
  repeatCount="3" from="200" to="20"
  begin="0s" dur="4s" fill="freeze"/>
</rect>
<text x="85" y="0" fill="navy">sum/none</text>
</g>
<!-- 3. obdelnik -->
<g transform="translate(220, 0)">
<rect x="60" y="20" width="50" height="60"
      fill="none" stroke="red" stroke-width="4"/>
<rect x="60" y="20" width="50" height="20" fill="violet" >
<animate attributeName="height" calcMode="discrete"
  additive="replace" accumulate="sum"
  repeatCount="3" from="200" to="20"
  begin="0s" dur="4s" fill="freeze"/>
</rect>
<text x="85" y="0" fill="navy">replace/sum</text>
</g>
<!-- 4. obdelnik -->
<g transform="translate(330, 0)">
<rect x="60" y="20" width="50" height="80"
      fill="none" stroke="red" stroke-width="4"/>
<rect x="60" y="20" width="50" height="20" fill="violet">
<animate attributeName="height" calcMode="discrete"
  additive="sum" accumulate="sum"
  repeatCount="3" from="200" to="20"
  begin="0s" dur="4s" fill="freeze"/>
</rect>
<text x="85" y="0" fill="navy">sum/sum</text>
</g>
<!-- obrys platna -->
<rect x="1" y="-19" width="478" height="298" fill="none" stroke-width="2" stroke="blue" />
</g>
</svg>

Zßkladnφ struktura zßpisu animaΦnφch prvk∙ - elementy

V tΘto Φßsti si probereme elementy, pomocφ nich₧ budeme provßd∞t animace v SVG.

Element animate

Zcela obecn² prvek, pou₧iteln² k animaci vÜech Φφseln²ch hodnot. V dalÜφch Φßstech poznßte specializovan∞jÜφ elementy, urΦenΘ t°eba jen a pouze k animaci pohybu...

Pomocφ jednoho animaΦnφho prvku lze m∞nit v Φase prßv∞ jeden atribut. Ne vÜechny atributy a ne vÜechny elementy mohou b²t zapojeny do deklarativnφch animacφ. Nebojte se ale, v∞tÜinou bude vÜe velmi intuitivnφ a p°φpadnΘ nejasnosti si m∙₧ete ov∞°it v tabulkov²ch p°ehledech normy SVG.

Element set

Tento prvek provßdφ p°esn∞ to, co naznaΦuje jeho anglick² v²znam - nastavφ dan² atribut na danou hodnotu v p°esn∞ definovan² Φasov² ·sek. Vyu₧ijete ho v∞tÜinou p°i operacφch s dvoustavov²mi prom∞nn²mi, nap°φklad typu viditelnost (skryj Φi uka₧ n∞jak² prvek) nebo zm∞na textu. Tento animaΦnφ prvek logicky nem∙₧e pracovat aditivn∞ ani kumulativn∞.

Atribut "to" urΦφ hodnotu, kterß bude nastavena po dobu trvßnφ animace.

Element animateColor

Atributy "from", "by" a "to" v tomto p°φpad∞ samoz°ejm∞ specifikujφ hodnoty barev, p°iΦem₧ je n∞kolik povolen²ch zp∙sob∙ zßpisu - analogicky, tak jak je zapisujete kdy₧ definujete barvy v²plnφ a tah∙. Do hry vstupuje tΘ₧ atribut "color-interpolation" popsan² ji₧ d°φve v Φßsti o vypl≥ovßnφ.

Element animateTransform - dynamickΘ 2D transformace

Tento prvek umo₧≥uje animovat transformaΦnφ atributy normy SVG. A ty dovolujφ elegantn∞ uskuteΦnit naprosto libovolnΘ polohovΘ transformace, zm∞nu m∞°φtka, zkosenφ...

Atributy elementu animateTransform:

  • attributeName - tento atribut bude v₧dy nastaven takto: attributeName="transform"
  • type - urΦenφ typu transformace
  • from, by, to - proto₧e v∞tÜina transformaΦnφch operacφ mß vφce ne₧ jeden parametr, budou v tomto p°φpad∞ obsahem t∞chto atribut∙ vÜechny po₧adovanΘ hodnoty. Nap°φklad rotace s poΦßteΦnφm ·hlem 30 stup≥∙ a st°edem otßΦenφ v bod∞ [25,25] se zapφÜe takto:
    <animateTransform attributeName="transform" type="rotate"
                      from="30,25,25" to="90,65,65"
                      begin="click" dur="9s"
                      additive="sum" fill="freeze" />

Typy transformacφ (hodnoty v hranat²ch zßvorkßch jsou nepovinnΘ, volitelnΘ podle typu po₧adovanΘ transformace):

  • "translate" - posun_x [,posun_y]
  • "scale" - m∞°φtko_x [,m∞°φtko_y] - zapφÜe-li se zde pouze jedna hodnota, bude pou₧ita pro zm∞nu m∞°φtka v obou sou°adnicov²ch osßch, jinak bude nßsobenφ pro ka₧dou osu rozdφlnΘ
  • "rotate" - ·hel [st°ed_x st°ed_y] - pozor, neuvede-li se na tomto mφst∞ st°ed otßΦenφ, bude se dotyΦn² objekt otßΦet nikoli okolo svΘ osy, ale okolo bodu se sou°adnicemi (0,0)
  • "skewX", "skewY" - ·hel zkosenφ

P°φklad pou₧itφ animaΦnφch element∙

PraktickΘ demonstrace kombinovßnφ animaΦnφch prvk∙ na pohybliv²ch objektech a na textu°e:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Basic//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-basic.dtd">

<svg xmlns="http://www.w3.org/2000/svg"
     xmlns:xlink="http://www.w3.org/1999/xlink"
     viewBox="0 0 480 240" width="240px"
     version="1.1" baseProfile="basic">
<title>9.7.2 Animace</title>
<desc>
  Priklad animuje transformaci vyplnoveho vzoru
  a ukazuje jak snadno muzete v SVG vyrobit
  i relativne slozite graficke hracky.
</desc>
  <!-- definice textury slozene ze 4 ctvercu -->
  <!-- navic zdeformovanych transformacnim atr. -->
  <pattern patternUnits="userSpaceOnUse" id="Pat3"
           x="0" y="0" width="20" height="20"
           patternTransform="translate(25 215) scale(2) skewX(45)">
    <rect x="0" y="0" width="10" height="10" fill="red"/>
    <rect x="10" y="0" width="10" height="10" fill="green"/>
    <rect x="0" y="10" width="10" height="10" fill="blue"/>
    <rect x="10" y="10" width="10" height="10" fill="yellow"/>
    <!-- toto vytvari dojem nekonecneho beziciho pasu -->
    <animateTransform attributeName="patternTransform"
      type="translate" from="0,0" to="40,0" dur="1s"
      fill="freeze" additive="sum" repeatCount="indefinite" />
  </pattern>
  <!-- textura se aplikuje na objekty -->
  <rect x="20" y="30" width="440" height="50" fill="url(#Pat3)"/>
  <circle cx="400" cy="120" r="40" fill="url(#Pat3)" />
  <rect x="20" y="100" width="100" height="50" fill="url(#Pat3)">
    <!-- vytvari efekt smrstovani a natahovani -->
    <animateTransform attributeName="transform"
      type="scale" values="1,1;3,1;1,1" keyTimes="0 85% 1" dur="8s"
      fill="freeze" additive="sum" repeatCount="indefinite" />
  </rect>
  <text font-family="Helvetica" font-size="32" x="20" y="220">
    Vzorky jsou animovany.
  </text>
<!-- obrys platna -->
<rect x="1" y="1" width="478" height="238"
      fill="none" stroke-width="2" stroke="blue" />
</svg>

Kurz SVG - tvorba vektorovΘ grafiky v XML

Pokud u₧ mßte dost suchΘ teorie Scalable Vector Graphics, nenφ nic sna₧Üφho, ne₧ se vrhnout na praktickΘ testovßnφ jeho mo₧nostφ. Kurz SVG vßm usnadnφ osvojenφ zßkladnφch struktur a vlastnostφ tohoto jazyka pro prßci s vektorovou grafikou. Tato sΘrie Φlßnk∙ dosud nebyla ukonΦena!

Hejral, Martin (2. 9. 2004)