Změny značek - jak na to

Příklad 1 - změna výplně (array) typu debris

Do sekce code metapost kterou jsme vytvořily v předchozím kroku vložíme následující kód.

   def a_debris (expr p) =
   T:=identity;
   % thclean p;
   pickup PenC;
   path q; q = bbox p;
   picture tmp_pic;
   tmp_pic := image(
   for i = xpart llcorner q step 1u until xpart urcorner q:
     for j = ypart llcorner q step 1u until ypart urcorner q:
      draw ((-.2u,0)--(.2u,0))
      rotated uniformdeviate(360)
      shifted ((i,j) randomized 0.6u) withpen PenC;
     endfor;
   endfor;
  );
  clip tmp_pic to p;
  draw tmp_pic;
  enddef;

Jedná se o kód, který vygeneruje značku stejně jako když nic nenadefinujem. Musíme tedy udělat několik málo změn.

Změníme celkem 3 hodnoty a to na těchto řádkách

   for i = xpart llcorner q step 1u until xpart urcorner q:
   for j = ypart llcorner q step 1u until ypart urcorner q:
   shifted ((i,j) randomized 0.6u) withpen PenC;

Hodnoty 1u a 06.u změníme takto

   for i = xpart llcorner q step 0.7u until xpart urcorner q:
   for j = ypart llcorner q step 0.7u until ypart urcorner q:
   shifted ((i,j) randomized 0.4u) withpen PenC;

Co jsme vlastně touto změnou udělali? První dva řádky “řekly” compileru že značky se mají generovat víc u sebe, třetí řádek říká že se mají generovat ve více nahodilém pořadí.

Pro toho komu není jasné jak celou sekci vložit do layout v souboru thconfig přikládám kompletní thconfig.

    source homolak
    layout homolak
        #rozlišení
        scale 1 100
        #barva pozadí mapy
        color map-bg 85 # dle barvy [100 100 100]
        # barva mapy dle výšky
        #color map-fg altitude
        transparency on
        opacity 90
        # dopíše k osobam kteří měřili délku změřených poligonú
        statistics topo-length on
        # V jakém jazyku bude mapa
        language cz
        #Zobrazovat legendu
        legend on
        map-header 8 100 e
        # nastavuje typ použitých symbolu SKBB/UIS/ASF/CCNP
        #symbol-set SKBB
        #zobrazovat jmena měřičských bodu
        debug station-names
        # nastaveni mřižky
        grid bottom
        grid-size 10 10 10 m
        #rotace mapy
        #rotate 30
        #symbol-assign point station UIS
        #symbol-hide point station
        #Zrušit generování bodu (všeho)
        #symbol-hide group all
        #symbol-hide point section
        #symbol-show line wall
        #symbol-show line survey
        #symbol-hide line flowstone
   code metapost
   def a_debris (expr p) =
   T:=identity;
   % thclean p;
   pickup PenC;
   path q; q = bbox p;
   picture tmp_pic;
   tmp_pic := image(
   for i = xpart llcorner q step 1u until xpart urcorner q:
     for j = ypart llcorner q step 1u until ypart urcorner q:
      draw ((-.2u,0)--(.2u,0))
      rotated uniformdeviate(360)
      shifted ((i,j) randomized 0.6u) withpen PenC;
     endfor;
   endfor;
  );
  clip tmp_pic to p;
  draw tmp_pic;
  enddef;
  endcode
    endlayout
    export map -output output/homolak.pdf -layout homolak

Tak tedy jak to může vypadat na mapě

bez nastavení layout

:czsk:mmj:bez_layout.jpg

a pokud nastavíme layout

:czsk:mmj:layout.jpg

Příklad 2 - změna výplně (array) typu blocks

Do sekce code metapost kterou jsme vytvořily v předchozím kroku vložíme následující kód.

    def a_blocks (expr p) =
    T:=identity;
    pickup PenC;
    path q, qq; q = bbox p;
    picture tmp_pic;
    uu := max(u, (xpart urcorner q - xpart llcorner q)/100, (ypart urcorner q - ypart llcorner q)/100);
    tmp_pic := image(
     for i = xpart llcorner q step 2.0uu until xpart urcorner q:
      for j = ypart llcorner q step 2.0uu until ypart urcorner q:
       qq := punked (((-.5uu,-.5uu)--(.5uu,-.5uu)--(.5uu,.5uu)--(-.5uu,.5uu)--cycle)
       randomized (uu/2))
       rotated uniformdeviate(360)
       shifted ((i,j) randomized 1.6uu);
       if xpart (p intersectiontimes qq) < 0:
        thclean qq;
        thdraw qq;
       fi;
      endfor;
     endfor;
   );
   clip tmp_pic to p;
   draw tmp_pic;
   enddef;

Jedná se o kód, který vygeneruje značku stejně jako když nic nenadefinujem. Musíme tedy udělat několik málo změn.

Změníme opět celkem 3 hodnoty a to na těchto řádkách

   for i = xpart llcorner q step 2.0uu until xpart urcorner q:
   for j = ypart llcorner q step 2.0uu until ypart urcorner q:
   shifted ((i,j) randomized 1.6uu);

Hodnoty 2.0uu a 1.6uu změníme takto

   for i = xpart llcorner q step 1.0uu until xpart urcorner q:
   for j = ypart llcorner q step 1.0uu until ypart urcorner q:
   shifted ((i,j) randomized 1.0uu);

Co jsme vlastně touto změnou udělali? První dva řádky “řekly” compileru že značky se mají generovat víc u sebe a menší třetí řádek říká že se mají generovat ve více nahodilém pořadí.

Jak si můžete všimnout vždy použijeme originální definici značky a trošku poupravíme hodnoty. Je zde tedy otazka kde sehnat originální definice značek.

Kde sehnat originální definice všech značek

Na stránkách therion.speleo.sk/download.php je k dispozici zdrojový kód programu Therion (Source code).

Po stažení a rozbalení, “jděte” do adresáře therion / mpost.

V tomto adresáři naleznete soubory thArea, thLine, thPoint, atd. kde každý soubor v sobě specifikuje oblast definic určenou názvem (thArea - pole, thPoint - body).

Veškeré definice začínají klíčovým slovem def a končí slovem enddef; Pokud hledáme kupříkladu definici link (čára) typu slope (svah) nalezneme jej v souboru thLine pod jménem l_slope_SKBB kde první písmenko značí typ u nás tedy line další slovo značí o jaký typ značky se jedná tak tedy slope a poslední nás nezajíma jelikož pro naše potřeby jej odstraníme tak tedy značka se bude jmenovat l_slope. Překopírujeme tedy vše co je uvnitř bloku

   def a_slope_SKBB (.....)
     ....
     ....
   enddef

do thconfig, a přejmenujeme na a_slope a nyní již stačí změnit správné hodnoty nejlépe pokusným způsobem.

Upozornění

Pokud dojde k tomu že Vám Therion při kompilaci oznamí chybu buď jste špatně předefinovali značku a to buď na příliš malé hodnoty (upravte hodnoty a zkuste znovu generovat mapu), nebo jste nějak prapodivně změnili definici (Najdětě znovu definici v zdrojovem souboru a vložte ji do thconfig a změňte znovu co je potřeba).

Na závěr

Postupně jak budu upravovat nové značky budu je přidávat do sekce Změny značek, oblastí a čar a tudíž budete moci porovnat popřípadě zjistit jak jsem danou značku upravil já.

V případě nejasností neváhejte a napište do therion konference, popřípadě přímo mě.

Jan Balcařík 23/11/2006 10:25