Navigace

Hlavnφ menu

 

VML - Vector Markup Language

Vector Markup Language (VML) umo₧≥uje vytvß°enφ vektorovΘ grafiky. Mo₧nß vφte, ₧e k prakticky stejnΘmu ·Φelu slou₧φ SVG, v dob∞ vzniku VML vÜak jeho standardizace byla v nedohlednu. Microsoft se rozhodl popohnat v∞ci kup°edu a tak se stal VML jedin²m vektorov²m formßtem s nativnφ podporou v prohlφ₧eΦi www strßnek.

VML pou₧φvß syntaxi XML, tudφ₧ se velmi podobß HTML. Stejn∞ jako HTML popisuje vlastnosti textu, tak VML popisuje grafiku. Pomocφ vektor∙ (liniφ a k°ivek), vytvß°φ novΘ tvary, k jejich₧ formßtovßnφ vyu₧φvß CSS. Proto₧e vÜak jde o proprietßrnφ technologii Microsoftu, je zatφm jeho podpora implementovßna jen do MSIE5+, nicmΘn∞ v jin²ch prohlφ₧eΦφch nep∙sobφ ₧ßdnΘ potφ₧e, jednoduÜe se nezobrazφ. VML lze p°itom vytvß°et jak v aplikacφch Microsoftu (Office2000 a vyÜÜφ), tak v aplikacφch jin²ch spoleΦnostφ, jednou z poslednφch je nap°φklad program AutoCAD map 2004.

V²hody VML oproti jin²m typ∙m grafiky

Mo₧nß vßs napadne otßzka, proΦ pou₧φvat VML, kdy₧ si lze vÜe nakreslit v n∞jakΘm bitmapovΘm editoru. Vytvß°enφ VML grafiky jako takovΘ m∙₧e b²t trochu slo₧it∞jÜφ proces (zßle₧φ na tom, co chcete nakreslit), ale p°eci jen je tu n∞kolik nesporn²ch v²hod:

  • Manipulace - pokud jste cht∞li zm∞nit text nebo barvu obrßzku, museli jste si ho otev°φt v grafickΘm editoru a tam provΘst zm∞ny. Manipulace s prvky VML je v tomto p°φpad∞ mnohem snazÜφ, zm∞ny textu, barvy, velikostφ se provßd∞jφ p°φmo ve zdrojovΘm k≤du strßnky.
  • Interpretace textu - proto₧e text ve VML grafice je tvo°en pomocφ HTML, je i nadßle interpretovßn jako text a ne jako bitmapa. Takov² text je potom mo₧nΘ kopφrovat a je vid∞t ve zdrojovΘm k≤du (tak₧e ho mohou indexovat vyhledßvaΦe a podobn∞).
  • CSS - nabφzφ spoustu vlastnostφ, kter²mi m∙₧ete grafiku m∞nit. Proto₧e podpora je zajiÜt∞na a₧ od MSIE5, je mo₧nΘ pou₧φt k dopln∞nφ vizußlnφch efekt∙ filtry CSS.
  • DHTML - prohlφ₧eΦe podporujφcφ dynamickΘ HTML mohou VML grafiku v zßvislosti na okolnφch podmφnkßch m∞nit k nepoznßnφ. M∙₧ete vytvß°et grafy, animace a podobn∞.
  • Poloha objekt∙ - objekty VML nemusφ b²t vykresleny v takovΘm po°adφ, v jakΘm jsou zapsßny ve zdrojovΘm k≤du. S pomocφ CSS nenφ problΘm m∞nit jejich pozice. Ka₧d² spoj liniφ v grafice mß p°esn∞ danΘ sou°adnice, kterΘ je mo₧no m∞nit.
  • MenÜφ datov² objem - samotnß vektorovß grafika je mΘn∞ objemnß ne₧ jejφ ekvivalent v bitmap∞. Navφc VML vystupuje pouze jako jeden nebo vφce XML element∙, proto je velikost grafiky srovnatelnß s textem. Pouze jejφ naΦφtßnφ je trochu pomalejÜφ ne₧ naΦtenφ textu.
  • RozliÜenφ - odpadßvajφ problΘmy zp∙sobenΘ rozliÜenφm prohlφ₧eΦe. VML grafice m∙₧ete nastavit libovolnou velikost ani₧ by doÜlo ke zkreslenφ. To ocenφte t°eba p°i zv∞tÜovßnφ Φßsti mapy.
  • Samostatnost objekt∙ - objekty vystupujφ ve strßnce samostatn∞, nejsou propojeny. Tuto vlastnost m∙₧ete vyu₧φt p°i tvorb∞ klikacφch map nebo animacφ.
  • Kompatibilita - proto₧e VML je zalo₧eno na XML, je kompatibilnφ s jin²mi XML aplikacemi a nenφ problΘm do vlastnφ aplikace podporu VML integrovat.

Zßpis VML

VML je znaΦkovacφ jazyk tak jako HTML. Ale rozdφl mezi VML a HTML je zcela zßsadnφ. Zatφmco HTML ve v∞tÜin∞ p°φpad∙ jen formßtuje obsah, VML obsah formßtuje a zßrove≥ i vytvß°φ. P°esto platφ, ₧e tvorba VML je ·pln∞ stejnß jako tvorba HTML. Bohat∞ si p°itom vystaΦφte s textov²m editorem a prohlφ₧eΦem. VeÜkerß data tvo°φ elementy a jejich atributy, kterΘ popisujφ, jak majφ b²t linie pospojovßny a formßtovßny. Samotnß grafika se v dokumentu chovß jako inline prvek (chovß se stejn∞ jako element <span>), nijak se od ostatnφho textu neodsazuje a zabφrß pouze vymezen² prostor. VML se pou₧φvß p°edevÜφm k tvorb∞ dynamickΘ grafiky, ale stejn∞ dob°e mohou b²t prvky VML pou₧ity jako navigaΦnφ tlaΦφtka, Üipky a mnoho dalÜφch v∞cφ.

Formßt strßnky s VML

Dost bylo teorie, te∩ se podφvßme na samotnou grafiku. Ne₧ zaΦneme kreslit, je nutnΘ pozm∞nit v dokumentu pßr v∞cφ. VML je zalo₧eno na XML a proto je t°eba deklarovat p°φsluÜnΘ namespace a behavior v hlaviΦce dokumentu. Nßsledujφcφ °ßdky jsou nutnΘ, aby prohlφ₧eΦ poznal, ₧e budeme pracovat s VML:

<html xmlns:v="urn:schemas-microsoft-com:vml">
<style>v\:* {behavior:url(#default#VML);}</style>

P°eddefinovanΘ zßkladnφ tvary

Ve VML, podobn∞ jako v jin²ch formßtech, je definovßno n∞kolik zßkladnφch tvar∙, jejich₧ tvorba je zjednoduÜena do urΦitΘho schΘmatu. Pro p°φklad si ukß₧eme, jak se definuje obdΘlnφk (Φtverec).

Jak m∙₧ete vid∞t nφ₧e, v p°φpad∞ obdΘlnφku je nejprve uvedena syntaxe XML v:rect, kterß urΦuje, o kter² z p°eddefinovan²ch tvar∙ jde. Dßle najdeme nastavenφ velikosti pomocφ CSS. Atribut fillcolor="barva" nastavuje barvu v²pln∞. V druhΘm p°φklad∞ se navφc nachßzφ text formßtovan² pomocφ HTML. Tato ukßzka mluvφ za vÜe. VML mß stejnou strukturu jako XML, je na n∞j mo₧nΘ aplikovat kaskßdovΘ styly CSS a jeho obsahem m∙₧e b²t HTML.

  • ObdΘlnφk:
    <v:rect style="width:100px; height:20px" fillcolor="#b3c4fd"></v:rect>
    <v:rect style="width:100px; height:20px" fillcolor="#b3c4fd"> <v:textbox><small><center> ObdΘlnφk </center></small></v:textbox> </v:rect>
    • rect - znaΦφ, ₧e jde o obdΘlnφk nebo Φtverec
    • fillcolor - barva v²pln∞, tento atribut je mo₧nΘ pou₧φt skoro u vÜech objekt∙
    • style="width:100px; height:20px" - v²Üka 20px, Üφ°ka 100px
    • <v:textbox> - uzavφrß text, kter² m∙₧e b²t tvo°en i HTML
    VML - obdΘlnφk
  • ObdΘlnφk s obl²mi rohy:
    <v:roundrect style="width:50px;height:50px" fillcolor="#b3c4fd"></v:roundrect>
    • roundrect - zaoblen² obdΘlnφk
    VML - obl² obdΘlnφk
  • Elipsa, kru₧nice:
    <v:oval style="width:50px;height:50px;" fillcolor="#b3c4fd"></v:oval>
    <v:oval style="width:20px;height:50px;" fillcolor="#b3c4fd"></v:oval>
    • oval - kru₧nice, kruh
    VML - elipsa
  • Oblouk:
    <v:arc style="width:120px;height:120px" startangle="10" endangle="300" fillcolor="#b3c4fd"></v:arc>
    • arc - oblouk
    • startangle - poΦßteΦnφ ·hel
    • endangle - koncov² ·hel
    VML - oblouk
    Pokud dosadφte za poΦßteΦnφ ·hel "0" a za koncov² ·hel "360", vykreslφ se kru₧nice. A pokud dosadφte "0" a "900", kruh se dva a p∙l krßt obtoΦφ - v²sledkem je obrßzek vpravo.
  • K°ivka:
    <v:curve from="20px,0px" to="140px,60px" control1="60px,60px" control2="100px,0px"></v:curve>
    • curve - k°ivka
    • from - poΦßteΦnφ poloha
    • to - koncovß poloha
    • control1 - prvnφ bod, kter²m k°ivka prochßzφ
    • control2 - druh² bod, kter²m k°ivka prochßzφ
    VML - k°ivka
  • Linka:
    <v:line from="0,10" style="height:70px" to="30,70"></v:line>
    • line - linka
    • from="0,10" - kde linka zaΦφnß x=0, y=10
    • to='30,40' - kde linka konΦφ x=30, y=40
    VML - linka

Vlastnφ objekty

Samoz°ejm∞, vystaΦit si pouze s p°eddefinovan²mi tvary nelze. Proto je mo₧nΘ vykreslit libovoln² objekt pomocφ skupiny sou°adnic.

VML - vlastnφ tvary
<!-- troj·helnφk //-->
<v:shape style="width: 60; height: 60" stroke="true" strokecolor="black" strokeweight="1" fill="true" fillcolor="white" coordorigin="0 0"">
<v:path v="m 0,0l 60,60,0,60x e"/>
</v:shape>
<!-- Üesti·hlenφk //-->
<v:shape style="width: 60; height: 60" stroke="true" strokecolor="black" strokeweight="1" fill="true" fillcolor="white" coordorigin="0 0" coordsize="60 60">
<v:path v="m 30,0l 60,15,60,45,30,60,0,45,0,15x e"/>
</v:shape>
<!-- v∞₧iΦka //-->
<v:shape style="width: 60; height: 60" stroke="true" strokecolor="black" strokeweight="1" fill="true" fillcolor="white" coordorigin="0 0" coordsize="60 60">
<v:path v="m 30,0l 60,15,60,60,0,60,0,15x e"/>
</v:shape>
  • <v:shape> - nastavuje barvy, ohraniΦenφ a velikost zatφm neznßmΘho tvaru
  • atribut coordsize - nastavuje poΦßtky osy x a y
  • atribut coordsize - nastavuje velikost objektu
  • <v:shape> urΦuje body, kter²mi bude linie postupn∞ prochßzet. Sou°adnice m 30,0l je poloha prvnφho bodu tvaru (x=30,y=0), sou°adnice 0,15x e je poloha poslednφho bodu, kter² bude spojen s prvnφm. V₧dy dvojice po poΦßteΦnφm bodu tvo°φ polohu bodu, kter² bude spojen s p°edchozφm a nßsledujφcφm.

Poloha objekt∙

Ji₧ jsem zmφnil, ₧e VML grafika se chovß jako element <span>. V₧dy se zadßvß pozice bodu, kter²m bu∩ linie (k°ivka) prochßzφ, nebo body, kde vektor zaΦφnß a konΦφ. Co se t²Φe jejich pozice, nejde o absolutnφ pozice vzhledem ke strßnce (tu je mo₧nΘ takΘ nastavit pomocφ CSS), ale vzhledem k objektu VML, kdy lev² hornφ roh grafiky mß pozici [0,0], sm∞rem dol∙ a doprava se pozice zvyÜuje (soustava sou°adnic obrßcenß vzh∙ru nohama), viz obrßzek:

VML - sou°adnice

Praktickß ukßzka - graf

Äe je VML vyu₧itelnΘ i v praxi, dokazuje nßsledujφcφ sloupcov² graf, k jeho₧ vytvo°enφ bylo pou₧ito spojenφ JavaScriptu a VML.

DalÜφ zdroje

Grimmich, èimon (11. 2. 2004)