home *** CD-ROM | disk | FTP | other *** search
/ PC World 2004 January / PCWorld_2004-01_cd.bin / Novinky / Interval / clanek09.htm < prev    next >
Encoding:
Extensible Markup Language  |  2003-12-04  |  19.3 KB  |  212 lines

  1. <?xml version='1.0' encoding='windows-1250'?>
  2. <!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
  3. <html xmlns='http://www.w3.org/1999/xhtml' xml:lang='cs' lang='cs'>
  4. <head>
  5. <meta http-equiv='Content-Type' content='text/html; charset=windows-1250' />
  6. <meta http-equiv='Content-language' content='cs' />
  7. <meta http-equiv='Cache-control' content='no-cache' />
  8. <meta http-equiv='Pragma' content='no-cache' />
  9. <meta http-equiv='Expires' content='0' />
  10. <meta name='robots' content='index, follow' />
  11. <meta name='description' content='Interval.cz - Internetov² magazφn o webdesignu, v²voji webov²ch aplikacφ a e-komerci. VÜe podstatnΘ o technologiφch XHTML, HTML, CSS, DHTML, JavaScript, XML, .NET, ASP, PHP, Java, J2ME, SQL, WAP...' />
  12. <meta name='keywords' content='Interval' />
  13. <meta http-equiv='imagetoolbar' content='no' />
  14. <meta http-equiv='MSThemeCompatible' content='no' />
  15. <meta name='MSSmartTagsPreventParsing' content='true' />
  16. <title>Interval.cz - denn∞ o tvorb∞ webu a e-komerci</title>
  17. <style media='all' type='text/css'>
  18. @import '__services/styles/interval_articles.css';
  19. </style>
  20. </head>
  21. <body class='interval interval-articles'>
  22. <div id='page-header'><div id='interval-logo'><h1 title='Interval.cz - denn∞ o tvorb∞ webu a e-komerci (logo & index link)'><a href='http://interval.cz/redirect/redirect.asp?what=interval_offline&url=http://interval.cz'>Interval.cz<span></span></a></h1></div><div id='advertising-page-header'></div><div class='page-maker'> </div></div>
  23. <div id='page-topmenu'><h2 class='textversion'>Navigace</h2><div id='page-mainmenu'><h3 class='textversion'>Hlavnφ menu</h3><ul><li class='first selected'><a href='http://interval.cz/redirect/redirect.asp?what=interval_offline&url=http://interval.cz'>Titulnφ strana</a></li><li><a href='http://interval.cz/redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=14'>Webdesign</a></li><li><a href='http://interval.cz/redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=15'>V²voj aplikacφ</a></li><li><a href='http://interval.cz/redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=18'>E-komerce</a></li><li><a href='http://interval.cz/redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=17'>Nßstroje</a></li><li><a href='http://interval.cz/redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=16'>Magazφn</a></li><li><a href='http://interval.cz/redirect/redirect.asp?what=interval_offline&url=http://diskuse.interval.cz'>Diskusnφ f≤rum</a></li><li class='right'><a href='http://interval.cz/redirect/redirect.asp?what=interval_offline&url=http://interval.inshop.cz'>Knihkupectvφ</a></li></ul></div><div id='page-mainmenu-maker'> </div></div>
  24. <div id='page-body'><div id='page-left'><div id='article'>
  25.  
  26.  
  27.  
  28. <h2>Java a 3D grafika - graf scΘny</h2>
  29. <p id='prepend'>V p°edchozφm Φlßnku jsme si ukßzali, jak se s pomocφ Java 3D API vytvß°φ jednoduchß scΘna. V tomto Φlßnku se podφvßme podrobn∞ji na problematiku grafu scΘny. Ukß₧eme si, jak jej zakreslovat a seznßmφme se s bßzov²mi t°φdami v∞tÜiny objekt∙ objevujφcφch se ve scΘn∞.</p>
  30.  
  31.  
  32. <h3>Jak zakreslovat graf scΘny</h3>
  33. <p>Jak znßmo, dokß₧e obΦas jeden obrßzek osv∞tlit urΦitou problematiku daleko lΘpe ne₧ n∞kolik desφtek °ßdk∙ textu a v p°φpad∞ grafu scΘny to platφ dvojnßsob. Jen si zkuste p°edstavit, jak slovy popisujete nßsledujφcφ jednoduch² graf:</p>
  34.  
  35. <div class='image'><img src='podklady/kuzelka/687/graf.png' alt ='jednoduch² graf scΘny' title ='jednoduch² graf scΘny' /></div>
  36.  
  37. <p>A to obsahuje pouze t°i barevnΘ krychle (ColorCube), z nich₧ dv∞ jsou transformovßny jednφm spoleΦn²m objektem TransformGroup, z Φeho₧ jedna je transformovßna jeÜt∞ dalÜφm objektem TransformGroup, a t°etφ je transformovßna jin²mi dv∞ma objekty TransformGroup.</p>
  38. <p>A te∩ popravd∞. ╚emu jste rozum∞li lΘpe? Obrßzku, p°esto₧e jste v n∞m neznali nejmΘn∞ polovinu pou₧it²ch symbol∙, nebo p°edchßzejφcφmu zmatenΘmu textu? A co teprve, kdybyste v obrßzku v²znam vÜech symbol∙ znali? Myslφm si, ₧e obrßzek vyhrßvß.</p>
  39. <p>Nynφ si poj∩me vysv∞tlit v²znam pou₧it²ch symbol∙. Nßsledujφcφ obrßzek je vÜechny shrnuje. (Tento zp∙sob zßpisu je p°evzat z oficißlnφho tutorißlu.)</p>
  40.  
  41. <div class='image'><img src='podklady/kuzelka/687/info.png' alt ='pou₧φvanΘ symboly' title ='pou₧φvanΘ symboly' /></div>
  42.  
  43. <p>Se t°φdami <strong>VirtualUniverse</strong> a <strong>Locale</strong> jsme se seznßmili ji₧ minule. Te∩ je na Φase vysv∞tlit si, k Φemu slou₧φ ty zb²vajφcφ. Instance t°φd odvozen²ch od prvnφ z nich, t°φdy <strong>Group</strong>, majφ v grafu, °eΦeno slovy klasickΘ terminologie pro popis strom∙, roli uzl∙, tzn. mohou mφt pouze jednoho rodiΦe a neomezen∞ potomk∙.</p>
  44. <p>T°φda <strong>Leaf</strong> je nadt°φdou pro t°φdy, jejich₧ instance jsou v danΘm stromu listy, co₧ znamenß, ₧e u₧ nemajφ ₧ßdnΘ dalÜφ potomky. P°φkladem m∙₧e b²t t°φda <em>ColorCube</em>, se kterou jsme se seznßmili v minulΘm Φlßnku a se kterou pracujeme i dnes.</p>
  45. <p>Mo₧nß vßs nynφ napadß otßzka, proΦ jsou v ukßzkovΘm grafu objekty ColorCube zobrazeny jako obdΘlnφky a ne jako troj·helnφky, co₧ by podle v²Üe uvedenΘho bylo jist∞ sprßvn∞jÜφ. Inu, tady zase jednou zvφt∞zil pragmatismus nad p°esn²m vyjad°ovßnφm. On toti₧ troj·helnφk nenφ prßv∞ nejvhodn∞jÜφ pro zßpis delÜφho textu. Z toho d∙vodu, pokud nßs bude v budoucnu zajφmat u n∞jakΘho objektu v grafu jeho p°esn² nßzev, zobrazφme jej jako obdΘlnφk.</p>
  46. <p>P°edposlednφ ze symbol∙ v tabulce, ovßl, oznaΦuje instance t°φd, kterΘ jsou odvozeny od t°φdy <strong>NodeComponent</strong>. Podt°φdami t°φdy NodeComponent jsou nap°φklad t°φdy <em>Appearance</em> a <em>Geometry</em>, se kter²mi se blφ₧e seznßmφme v n∞kterΘm z dalÜφch Φlßnk∙ tΘto sΘrie. Prozatφm snad postaΦφ, kdy₧ si °ekneme, ₧e t°φdy odvozenΘ od tΘto t°φdy nejsou formßln∞ p°φmo souΦßstφ stromu, proto₧e na n∞ odkazujφ objekty list∙ (Leaf), co₧ by jinak nebylo mo₧nΘ (list p°ece nem∙₧e mφt potomky), nejednß se tedy formßln∞ o vztah potomek-rodiΦ.</p>
  47.  
  48. <h3>Äijφcφ a zkompilovanΘ objekty</h3>
  49. <p>Vlo₧φme-li objekt BranchGroup do objektu Locale, stanou se tento objekt a objekty v n∞m obsa₧enΘ takzvan∞ ₧iv²mi. To znamenß, ₧e kv∙li v²konu bude graf scΘny p°eveden do v²hodn∞jÜφ podoby, co₧ s sebou nev²hodu v tom, ₧e ji₧ nebudeme moci nadßle p°idßvat objekty do objekt∙ Group nebo m∞nit transformaΦnφ matici v objektech TransformGroup. </p>
  50. <p>Pochopiteln∞ jsou vÜak situace, kdy scΘnu chceme m∞nit i nadßle - a¥ u₧ pot°ebujeme animovat existujφcφ objekty nebo p°idßvat novΘ. Pak musφme n∞jak oznaΦit ty Φßsti scΘny, kterΘ se budou m∞nit. K tomu slou₧φ metody <samp>void setCapability(int bit)</samp>, <samp>void clearCapability(int bit)</samp> a <samp>boolean getCapability(int bit)</samp>. Parametr bit typu int, p°edßvan² vÜem t∞mto metodßm, nese bitov² p°φznak urΦujφcφ, co je s dan²m objektem (respektive jeho potomky), mo₧nΘ d∞lat. Metoda setCapability(int bit) "zapφnß" tento p°φznak, metoda clearCapability(int bit) tento p°φznak vypφnß a koneΦn∞ metoda getCapability(int bit) vracφ true, pokud je dan² p°φznak nastaven².</p>
  51. <p>Nap°φklad ve t°φd∞ Group jsou definovßny mimo jinΘ nßsledujφcφ p°φznaky: <samp>ALLOW_CHILDREN_EXTEND</samp> dovolujφcφ p°idßvat dalÜφ objekty do danΘho objektu Group, <samp>ALLOW_CHILDREN_READ</samp> dovolujφcφ p°istupovat k potomk∙m danΘho objektu a <samp>ALLOW_CHILDREN_WRITE</samp> umo₧≥ujφcφ upravovat odkazy na potomky tohoto objektu. Ve t°φd∞ TransformGroup jsou pak definovßny dalÜφ p°φznaky: <samp>ALLOW_TRANSFORM_READ</samp> dovolujφcφ p°istupovat k transformaΦnφ matici a pota₧mo i jejφm jednotliv²m slo₧kßm (rotace, posunutφ) a <samp>ALLOW_TRANSFORM_WRITE</samp> umo₧≥ujφcφ m∞nit transformaci, co₧ je nezbytnΘ nap°φklad pro animovßnφ. Krom∞ ji₧ zmφn∞n²ch p°φznak∙ vÜak existujφ i dalÜφ, s nimi₧ se setkßme v n∞kterΘm z dalÜφch Φlßnk∙.</p>
  52. <p>Sice je mo₧nΘ renderovat i scΘnu, kterß je pouze ₧ijφcφ, ale pokud chcete v∞tÜφ rychlost, je pot°eba objekty BranchGroup ve scΘn∞ jeÜt∞ navφc "zkompilovat". K tomu slou₧φ metoda <samp>compile()</samp>, jejφ₧ volßnφ zp∙sobφ dalÜφ zm∞ny v internφ reprezentaci scΘny. Jejφ pou₧φvßnφ je nav²sost u₧iteΦnΘ a neexistuje prakticky ₧ßdn² d∙vod, proΦ ji ignorovat.</p>
  53.  
  54. <h3>Mal² p°φklad</h3>
  55. <p>Nynφ si na krßtkΘm p°φkladu ukß₧eme pou₧itφ toho, co jsme se dnes nauΦili. V²sledek nebude nijak osl≥ujφcφ, p∙jde o dalÜφ variaci na tΘma barevnΘ krychle. Nejprve vytvo°φme scΘnu s barevnou krychlφ, jejφm₧ rodiΦem bude objekt TransformGroup, pak ji zkompilujeme a teprve a₧ potom ji budeme transformovat ·pravou objektu TransformGroup, co₧ znamenß, ₧e se nevyhneme pou₧itφ metody setCapability(int bit), co₧ je v podstat∞ hlavnφm ·Φelem tohoto p°φkladu. Celou scΘnu si pro procviΦenφ rovn∞₧ zakreslφme.</p>
  56.  
  57. <div class='image'><img src='podklady/kuzelka/687/graf2.png' alt ='graf scΘny p°φkladu' title ='graf scΘny p°φkladu' /></div>
  58.  
  59. <p>Zde nßsleduje zdrojov² k≤d p°φkladu:</p>
  60.  
  61. <div class='sample'>
  62. package interval.j3d;
  63. <br />
  64. <br />import java.awt.*;
  65. <br />import javax.swing.*;
  66. <br />import com.sun.j3d.utils.universe.*;
  67. <br />import com.sun.j3d.utils.geometry.*;
  68. <br />import javax.media.j3d.*;
  69. <br />import javax.vecmath.*;
  70. <br />
  71. <br />public class Capabilities extends JFrame{   
  72. <br />   TransformGroup tg;
  73. <br />   public Capabilities() {
  74. <br />       super("Ukßzka pou₧itφ setCapability()");
  75. <br />       <span class='comment'>//Na nßsledujφcφch °ßdcφch vytvo°φme Canvas3D</span>
  76. <br />       Container pane = getContentPane();
  77. <br />      pane.setLayout(new BorderLayout());
  78. <br />       GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
  79. <br />      Canvas3D canvas = new Canvas3D(config, false);
  80. <br />      pane.add("Center", canvas);
  81. <br />      <span class='comment'>//vytvo°φme objekt SimpleUniverse</span>
  82. <br />      SimpleUniverse universe = new SimpleUniverse(canvas);
  83. <br />      <span class='comment'>//nastavφme vzdßlenost pozorovatele od monitoru na 2m</span>
  84. <br />       universe.getViewingPlatform().setNominalViewingTransform();
  85. <br />      <span class='comment'>//p°idßme BranchGroup vytvo°en² v metod∞ vytvorBranchGroup()</span>
  86. <br />      <span class='comment'>//do objektu SimpleUniverse</span>
  87. <br />      universe.addBranchGraph(vytvorBranchGroup());
  88. <br />      <span class='comment'>//upravφme transformaci v objektu TransformGroup tg,</span>
  89. <br />      <span class='comment'>//kter² je ji₧ souΦßstφ grafu scΘny, co₧ by nebylo mo₧nΘ,</span>
  90. <br />      <span class='comment'>//kdybychom v metod∞ vytvorBranchGroup nevolali</span>
  91. <br />      <span class='comment'>//metodu setCapability s parametrem ALLOW_TRANSFORM_GROUP</span>
  92. <br />      tg.setTransform(vytvorTransform());
  93. <br />      addWindowListener(new java.awt.event.WindowAdapter() {
  94. <br />       public void windowClosing(java.awt.event.WindowEvent evt) {
  95. <br />        System.exit(0);
  96. <br />        }
  97. <br />      });        
  98. <br />   }
  99. <br />   protected BranchGroup vytvorBranchGroup(){
  100. <br />      <span class='comment'>//ko°en tΘto Φßsti scΘny</span>
  101. <br />      BranchGroup bg = new BranchGroup();        
  102. <br />      <span class='comment'>//tento objekt upravujeme a₧ dßle v konstruktoru</span>
  103. <br />      tg = new TransformGroup();        
  104. <br />      <span class='comment'>//nastavφme, ₧e chceme nadßle m∞nit transformaΦnφ matici</span>
  105. <br />      <span class='comment'>//tohoto objektu</span>
  106. <br />      <span style='backgorund-color:red;'>tg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);</span>
  107. <br />      <span class='comment'>//p°idßme objekt TransformGroup tg jako potomka</span>
  108. <br />      <span class='comment'>//do objektu bg</span>
  109. <br />      bg.addChild(tg);
  110. <br />      <span class='comment'>//vlo₧φme jeÜt∞ barevnou krychli jako potomka zmφn∞nΘho</span>
  111. <br />      <span class='comment'>//objektu TransformGroup tg</span>
  112. <br />      tg.addChild(new ColorCube(0.3));
  113. <br />      <span class='comment'>//zkompilujeme scΘnu</span>
  114. <br />      bg.compile();
  115. <br />      return bg;
  116. <br />   }
  117. <br />   protected Transform3D vytvorTransform(){
  118. <br />      Transform3D tr1 = new Transform3D(); 
  119. <br />      <span class='comment'>//nastavφme ·hel otoΦenφ na 30░ </span>
  120. <br />      tr1.rotX(Math.PI/6); 
  121. <br />      <span class='comment'>//vytvo°φme druhou transformaΦnφ matici </span>
  122. <br />      Transform3D tr2 = new Transform3D(); 
  123. <br />      <span class='comment'>//nastavφme ·hel otoΦenφ na 60░ </span>
  124. <br />      tr2.rotY(-Math.PI/3); 
  125. <br />      <span class='comment'>//vynßsobφme spolu matice </span>
  126. <br />      tr2.mul(tr1); 
  127. <br />      return tr2;
  128. <br />   }
  129. <br />   public static void main(String[] args){
  130. <br />      new Capabilities().show();
  131. <br />   }
  132. <br />}
  133. </div>
  134.  
  135. <p>Na tomto p°φkladu sice nenφ u₧iteΦnost popsan²ch technik p°φliÜ z°etelnß, a₧ se ale budeme zab²vat animovßnφm objekt∙, neobejdeme se bez nich. Nßsledujφcφ obrßzek je v²sledkem pou₧itφ p°edchßzejφcφho k≤du:</p> 
  136.  
  137. <div class='image'><img src='podklady/kuzelka/687/capture.png' alt ='v²sledek p°φkladu' title ='v²sledek p°φkladu' /></div>
  138.  
  139. <p>P°φÜt∞ se seznßmφme s t°φdami pro tvorbu geometrick²ch primitiv a ukß₧eme si, jak upravovat jejich vzhled (barvu a dalÜφ vlastnosti) pomocφ objekt∙ Appearance.</p>
  140.  
  141. <div class='refer'>
  142. <h3>P°edchozφ Φlßnky</h3>
  143. <ul>
  144. <li><a href='http://interval.cz/clanek.asp?article=2752'>Java a 3D grafika</a></li>
  145. </ul>
  146. </div>
  147.  
  148.  
  149.  
  150. <div id='article-author'>
  151. <a href='http://interval.cz/redirect/redirect.asp?what=interval_offline&url=http://interval.cz/autor.asp?author=194'>Ku₧elka, Ond°ej</a> (19.11. 2003)
  152.  
  153. </div>
  154.  
  155.  
  156. </div></div>
  157. <div id='page-right'><h2 class='textversion'>Prav² sloupek</h2>
  158. <div id='search'><h3 class='textversion'>Vyhledßvßnφ</h3><form method='get' action='http://interval.cz/search.asp'><div><input type='text' name='hledej' class='text' /><input type='submit' class='submit' value='Najdi!' /></div></form><div><a href='http://interval.cz/search_ex.asp'>RozÜφ°enΘ vyhledßvßnφ</a></div></div>
  159.  
  160.  
  161.  
  162. <div class='page-right-box book'>
  163.     <h3>Kni₧nφ novinka</h3>
  164.     <div class='page-right-box-in'>
  165.         <div class='book-top'>
  166.             <h4><a href='http://interval.cz/redirect/redirect.asp?what=interval_booknews&url=http://interval.inshop.cz/inshop/scripts/detail.asp?ItemID=235'>PostgreSQL: Praktick² pr∙vodce</a></h4>
  167.         </div>
  168.     </div>
  169.     <div class='image'>
  170.         <a href='http://interval.cz/redirect/redirect.asp?what=interval_booknews&url=http://interval.inshop.cz/inshop/scripts/detail.asp?ItemID=235'><img src='podklady/knihy/image.jpg' alt='obßlka' title='obßlka' /></a>
  171.     </div>
  172.     <div class='book-bottom'>Cena: <span class='book-price-old'>447,00 KΦ</span> <span class='book-price-new'>402,30 KΦ</span></div>
  173. </div>
  174.  
  175.  
  176.  
  177. <div class='page-right-box reading'>
  178.     <h3>NejΦten∞jÜφ</h3>
  179.     <div class='page-right-box-in'>
  180.         <ul>
  181. <li><a href='http://interval.cz/redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=2856'>ZnakovΘ sady v praxi</a></li>
  182. <li><a href='http://interval.cz/redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=2849'>Vytvß°enφ dokument∙ PDF v PHP</a></li>
  183. <li><a href='http://interval.cz/redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=2852'>Interval v zajetφ Φφsel</a></li>
  184. <li><a href='http://interval.cz/redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=2850'>CSS2 - podpora kaskßdov²ch styl∙ v sedmiΦkovΘ °ad∞ Opery</a></li>
  185. <li><a href='http://interval.cz/redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=2844'>P.E.T. - jednoduch² Üablonovacφ systΘm v PHP</a></li>
  186.         </ul>
  187.     </div>
  188. </div>
  189.  
  190.  
  191.  
  192. <div class='page-right-box cauldron'>
  193.     <h3>Diskuznφ kotel</h3>
  194.     <div class='page-right-box-in'>
  195.         <ul>
  196. <li><a href='http://interval.cz/redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=2313'>Studenß vßlka prohlφ₧eΦ∙</a><div>222 komentß°∙ </div></li>
  197. <li><a href='http://interval.cz/redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=1573'>Kam jφt studovat?</a><div>108 komentß°∙ </div></li>
  198. <li><a href='http://interval.cz/redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=2797'>VyhlßÜenφ sout∞₧e Interzen 2003</a><div>95 komentß°∙ </div></li>
  199. <li><a href='http://interval.cz/redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=2827'>Dreamweaver MX 2004</a><div>48 komentß°∙ </div></li>
  200. <li><a href='http://interval.cz/redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=2816'>beeasy.cz</a><div>47 komentß°∙ </div></li>
  201.         </ul>
  202.     </div>
  203. </div>
  204.  
  205.  
  206.  
  207. <div class='page-right-box emailserv'><h3>Email servis</h3><div class='page-right-box-in'><form action='prihlaseni.asp' method='post'><div class='shell'><input class='text' type='text' name='adresa' /></div><div class='shell'><input class='radio' type='radio' value='1' name='co' checked='checked' />T²dennφ p°ehled Φlßnk∙</div><div class='shell'><input class='radio' type='radio' value='2' name='co' />HELP konference</div><div class='shell'><input class='submit' type='submit' value='P°ihlßsit' /></div></form></div></div>
  208. </div>
  209. <div class='page-maker'> </div><div class='page-maker-white'> </div></div>
  210. <div id='page-foot'><div id='page-foot-menu'><a href='http://interval.cz/reklama.asp'>Inzerce na Interval.cz</a> | <a href='http://interval.cz/redakce.asp'>Redakce Interval.cz</a> | <a href='http://interval.cz/autori.asp'>Hledßme novΘ autory</a></div><div id='issn'>ISSN 1212-8651</div><div id='page-foot-zoner'>© Zoner software, s.r.o., vÜechna prßva vyhrazena, tento server dodr₧uje <a href='http://interval.cz/privacy.asp'>prßvnφ p°edpisy</a>o ochran∞ osobnφch ·daj∙.</div></div>
  211. </body>
  212. </html>