Modification des symboles – comment faire

Où pouvons nous trouver la définition originale des symboles?

Sur la page web therion.speleo.sk/download.php il est possible de télécharger le code source du programme Therion.

Apres le téléchargement et la décompression, recherchez le répertoire therion / mpost.

Dans ce dossier, vous trouverez les fichiers thArea, thLine, thPoint, etc. Chaque fichier contient la définition des symboles pour des groupes particuliers : thLine - symboles lignes, thArea - définitions des surfaces, thPoint – symboles point.

Chaque définition débute avec le mot clef def et termine avec le mot clef enddef; Si nous recherchons la définition de symbole ligne de type pente, nous le trouverons dans le fichier thLine sous le nom l_slope_SKBB ou le premier caractère représente le groupe de symbole – dans notre exemple les line, le mot suivant représente le type de symbole - slope et le dernier groupe de caractère est sans importance dans ce cas – nous pouvons l’ignorer. Le nom pour notre layout sera l_slope. Nous devrions copier tous le code qui est dans le bloque def - enddef

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

Dans la section layout du fichier thconfig, entre les mots clé code metapost - endcode. Nous changeons le nom en a_slope et nous pouvons modifier les parametres necessaires. Le meilleur moyen pour trouver la bonne valeur est de faire plusieurs essais.

Exemple 1 - modification du vecteur débris

Dans la section du code Metapost nous collons le nouveau code:

   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;

Ce code va generer le meme symbole non modifiee. Nous devons modifier le code d’abord pour modifier le symbole final.

Nous changeons 3 valeurs dans les lignes suivantes:

   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;

Les valeurs 1u et 06.u que nous changeons en:

   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;

Qu’avons-nous fait ? D’abord, deux lignes “disent” au compilateur que les symboles doivent être généré moins loin les uns des autres, la troisième ligne “dit” qu’ils doivent être mis aléatoirement.

Maintenant un exemple d’une modification de la sections layout dans le fichier thconfig.

    source homolak
    layout homolak
        #resolution of final map
        scale 1 100
        #color of final map.
        color map-bg 85 # dle barvy [100 100 100]
        #color by altitude
        #color map-fg altitude
        transparency on
        opacity 90
        # names of persons which surveyed the cave will be added how much they surveyed
        statistics topo-length on
        # the language of legends in map
        language cz
        #show the legend
        legend on
        map-header 8 100 e
        #type of used symbol sets SKBB/UIS/ASF/CCNP
        #symbol-set SKBB
        #to show the names of surveying points 
        debug station-names
        #setup of grid
        grid bottom
        grid-size 10 10 10 m
        #rotation of map
        #rotate 30
        #symbol-assign point station UIS
        #symbol-hide point station
        #don't generate any symbol
        #symbol-hide group all
        #don't generate point section symbol
        #symbol-hide point section
        #generate line wall symbol
        #symbol-show line wall
        #generate line survey symbol
        #symbol-show line survey
        #don't generate line flowstone symbol
        #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

Qu’est ce que cela donne sur la topo

Avec le code Metapost d’origine

Topo d’origine

Avec le code Metapost modifié

Topo modifiée

Exemple 2 - modification du vecteur de type blocs

Nous collons dans la section de code Metapost, le code suivant:

    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;

Nous changeons les lignes suivantes:

   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);

Nous changeons les valeurs 2.0uu et 1.6uu en:

   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);

Qu’avons-nous fait ? Comme dans le premier exemple, les deux premières lignes “disent” au compilateur que le symbole doit être généré moins loin les uns des autres, la troisième ligne “dit” qu’ils doivent être plus aléatoires.

Attention

Si Therion génère une erreur a la compilation, c’est que vous avez commis une erreur dans la modification du code, ou que vous utilisez des valeurs trop petites. Augmentez ces valeurs et réessayez de générer la carte. Il peut aussi y avoir une erreur typographique dans la modification de votre définition. Dans ce cas, effacez vos modifications et collez la définition originale dans le layout, puis refaites la modification.

Dernier mots

Je vais ajouter une autre modification de symbole dans ce chapitre.

N’hesitez pas a ecrire sur la liste Therion si vous avez des questions.

Jan Balcařík 18/10/2006 12:29