==== Modification des symboles – comment faire ==== **Où pouvons nous trouver la définition originale des symboles?** Sur la page web [[http://therion.speleo.sk/download.php|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 {{:czsk:mmj:bez_layout.jpg|Topo d’origine}} Avec le code Metapost modifié {{:czsk:mmj:layout.jpg|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. --- //[[fenrir@profisit.cz|Jan Balcařík]] 18/10/2006 12:29//