Télécharger montagne.procedur

Retour à la liste

Numérotation des lignes :

  1. * MONTAGNE PROCEDUR JC220346 14/12/09 21:15:10 8314
  2. *----------------------------------------------------------------------
  3. *
  4. * PROCEDURE MONTAGNE
  5. *
  6. *----------------------------------------------------------------------
  7. *
  8. * syntaxe :
  9. *
  10. * MONTAGNE CHPO1 (CHPO2) GEO1 (FLOT1) (| POIN1 )
  11. * | PROG1
  12. * ('TITRE' CHA1) MOT1 MOT2 ;
  13. *
  14. *----------------------------------------------------------------------
  15. *
  16. * Cette procédure sert à visualiser en relief un champ par point à une
  17. * composante, et éventuellement de superposer à ce relief les isovaleurs
  18. * d'un autre champ.
  19. *
  20. * EN ENTREE :
  21. * SMV : Le champoint a visualiser (flèches ou volume)
  22. * (SMV2) : Le champoint de valeurs (isovaleurs)
  23. * GEO : Le support géometrique
  24. * (FLOT1) : Un coefficient d'amplification
  25. * (OEIL1) : Un oeil (POINT)
  26. * (OEIL2) : Un oeil (LISTREEL)
  27. * ('TITRE' CHA1) : UN TITRE
  28. * (MOT1) : mot-clef 'CACH' ou 'CACHE'
  29. * (MOT2) : mot-clef 'FLECHE', 'VOLUME' ou 'SUPER'
  30. *
  31. *---------------------------------------------------------------------
  32. *
  33. * SMV2 doit avoir le même support géométrique que SMV
  34. *
  35. * Les chpos doivent n'avoir qu'une seule composante
  36. *
  37. * Si SMV2 est fourni, l'option de tracé est mise à 'VOLUME'
  38. *
  39. * Si OEIL n'est pas fourni, il est placé au-dessus, face par le
  40. * sud-sud-ouest
  41. *
  42. * Si le coefficient d'amplification, n'est pas fourni, il est
  43. * déterminé automatiquement en donnant une même amplitude verticale
  44. * que les amplitudes horizontales.
  45. *
  46. * L'entrée du point de vue sous forme de liste de 3 réels permet
  47. * de se dispenser de passer en trois dimensions.
  48. *
  49. * Le type de tracé dépend de MOT2, par défaut VOLUME.
  50. * une valeur 'SUPER' avec un seul chpo indique qu'on se sert de CHPO1
  51. * comme champ à superposer sous forme d'isovaleurs.
  52. *
  53. *---------------------------------------------------------------------
  54. 'DEBPROC' MONTAGNE
  55. SMV*'CHPOINT' SMV2/'CHPOINT' GEO*'MAILLAGE' AMP/'FLOTTANT'
  56. OEIL1/'POINT' OEIL2/'LISTREEL' ;
  57. *---------------------------------------------------------------------
  58.  
  59. * Gestion des entrées
  60. * ===================
  61.  
  62. *-- Gestion des entrées optionnelles
  63. LCACH = faux ;
  64. LTITR = faux ;
  65. TYPT = 'MOT' 'VOLUME' ;
  66. 'REPETER' bcl1 ;
  67. 'ARGUMENT' MOT1/'MOT' ;
  68.  
  69. 'SI' ('EXISTE' MOT1) ;
  70. 'SI' (('EGA' MOT1 'CACH') 'OU' ('EGA' MOT1 'CACHE')) ;
  71. LCACH = vrai ;
  72. 'ITERER' bcl1 ;
  73. 'FINSI' ;
  74. 'SI' (('EGA' MOT1 'TITR') 'OU' ('EGA' MOT1 'TITRE'));
  75. 'ARGUMENT' MOT2/'MOT' ;
  76. 'SI' ('EXISTE' MOT2) ;
  77. LTITR = vrai ;
  78. BARA = MOT2 ;
  79. 'ITERER' bcl1 ;
  80. 'SINON' ;
  81. 'ERREUR' 'On a attend un titre derrière le mot-clef TITRE' ;
  82. 'FINSI' ;
  83. 'FINSI' ;
  84. 'SI' ( ('EGA' MOT1 'FLECHE') 'OU' ('EGA' MOT1 'VOLUME') 'OU'
  85. ('EGA' MOT1 'SUPER') );
  86. TYPT = 'MOT' MOT1 ;
  87. 'ITERER' bcl1 ;
  88. 'FINSI' ;
  89. 'ERREUR' ('CHAINE' 'Mot-clef ' MOT1 ' inconnu') ;
  90. 'SINON' ;
  91. 'QUITTER' bcl1 ;
  92. 'FINSI' ;
  93.  
  94. 'FIN' bcl1 ;
  95.  
  96. *-- Type de tracé
  97. 'SI' ('EXISTE' SMV2) ;
  98. * toujours de type 3 si deux champs sont donnés
  99. TYPT = 'MOT' 'SUPER' ;
  100. 'SINON' ;
  101. 'SI' ('EGA' TYPT 'SUPER') ;
  102. * le champ superposé sera celui d'origine
  103. SMV2 = SMV ;
  104. 'FINSI' ;
  105. 'FINSI' ;
  106.  
  107. *-- Test des composantes
  108. 'SI' (('DIME' ('EXTR' SMV 'COMP')) 'NEG' 1) ;
  109. 'ERREUR' 'Les champ-points doivent n avoir qu une seule composante' ;
  110. 'FINSI' ;
  111. SMV = 'NOMC' SMV 'SCAL' 'NATURE' 'DISCRET' ;
  112.  
  113. 'SI' ('EXISTE' SMV2) ;
  114. 'SI' (('DIME' ('EXTR' SMV2 'COMP')) 'NEG' 1) ;
  115. 'ERREUR'
  116. 'Les champ-points doivent n avoir qu une seule composante' ;
  117. 'FINSI' ;
  118. SMV2 = 'NOMC' SMV2 'SCAL' 'NATURE' 'DISCRET' ;
  119. 'FINSI' ;
  120.  
  121. * Préparation
  122. * ===========
  123.  
  124. * Passage en dimension 3
  125. ndime = 'VALEUR' 'DIME' ;
  126. 'SI' ('NEG' ndime 3) ;
  127. savmode = 'VALEUR' 'MODE' ;
  128. 'OPTION' 'DIME' 3 ;
  129. 'FINSI' ;
  130.  
  131. *-- champ de déplacement vertical donné par le champ-point
  132. NA = 'NBNO' GEO ;
  133.  
  134. 'SI' ('EGA' ndime 3) ;
  135. * si on est en 3D, on annule la composante verticale de la géométrie
  136. * support, en projetant sur le plan xOy
  137. GEO0 = 'PROJETER' GEO 'CYLI' (0 0 1)
  138. 'PLAN' (0 0 0) (0 1 0) (1 0 0) ;
  139. * on repositionne SMV sur ce nouveau support
  140. LIZ = 'PROG' NA*0. ;
  141. GEOP0 = 'CHAN' GEO 'POI1' ;
  142. 'REPETER' LOOP1 NA ;
  143. I = &LOOP1 ;
  144. PPP = 'POINT' GEOP0 I ;
  145. 'REMPLACER' LIZ I ('EXTR' SMV 'SCAL' PPP) ;
  146. 'FIN' LOOP1 ;
  147. GEOP = 'CHAN' GEO0 'POI1' ;
  148. DEPZ = 'MANU' 'CHPO' GEOP 1 'UZ' LIZ 'NATURE' 'DIFFUS' ;
  149. 'SINON' ;
  150. GEO0 = GEO ;
  151. GEOP0 = 'CHAN' GEO0 'POI1' ;
  152. GEOP = GEOP0 ;
  153. DEPZ = 'NOMC' 'UZ' SMV 'NATURE' 'DIFFUS' ;
  154. 'FINSI' ;
  155.  
  156. DEPH = 'MANU' 'CHPO' GEOP 2 'UX' 0. 'UY' 0. 'NATURE' 'DIFFUS';
  157. DEPP = DEPH 'ET' DEPZ ;
  158.  
  159. *-- Détermination de l'amplification
  160. 'SI' ('NON' ('EXISTE' AMP)) ;
  161. * on tient compte de l'étendue spatiale tel que dz est du même ordre
  162. * que dx ou dy
  163. xx yy zz = ('COOR' 1 GEOP) ('COOR' 2 GEOP) SMV ;
  164. minx maxx = ('MINIMUM' xx) ('MAXIMUM' xx);
  165. miny maxy = ('MINIMUM' yy) ('MAXIMUM' yy);
  166. minz maxz = ('MINIMUM' zz) ('MAXIMUM' zz);
  167. dx = maxx - minx;
  168. dy = maxy - miny;
  169. dz = 'MAXIMUM' ('PROG' (maxz - minz) maxz) ;
  170. 'SI' (dz 'EGA' 0.) ;
  171. AMP = 1. ;
  172. 'SINON' ;
  173. AMP = ('MAXIMUM' ('PROG' dx dy)) / dz ;
  174. 'FINSI' ;
  175. 'FINSI' ;
  176.  
  177. *-- détermination de la position de l'oeil
  178. 'SI' (('EXISTE' OEIL1) 'OU' ('EXISTE' OEIL2)) ;
  179. 'SI' ('EXISTE' OEIL1) ;
  180. OEIL = OEIL1 ;
  181. 'SINON' ;
  182. 'SI' ('NEG' ('DIME' OEIL2) 3) ;
  183. 'ERREUR'
  184. 'L oeil est soit un point 3D, soit une liste de 3 réels' ;
  185. 'FINSI' ;
  186. OEIL = ('EXTR' OEIL2 1) ('EXTR' OEIL2 2) ('EXTR' OEIL2 3) ;
  187. 'FINSI' ;
  188. * on tient compte de la dilatation
  189. OEIL = ('COOR' 1 oeil) ('COOR' 2 oeil) (('COOR' 3 oeil) * AMP);
  190.  
  191. 'SINON' ;
  192. * on s'appuie sur l'étendue spatiale
  193. xx yy zz = ('COOR' 1 GEOP) ('COOR' 2 GEOP) (SMV*AMP) ;
  194. minx maxx = ('MINIMUM' xx) ('MAXIMUM' xx);
  195. miny maxy = ('MINIMUM' yy) ('MAXIMUM' yy);
  196. minz maxz = ('MINIMUM' zz) ('MAXIMUM' zz);
  197. xc yx zc = (.5*(minx + maxx)) (.5*(miny + maxy)) (.5*(minz + maxz));
  198. xo = minx - (.5 * (maxx - minx));
  199. yo = miny - (2. * (maxy - miny));
  200. zo = minz + (4. * (maxz - minz));
  201.  
  202. * l'oeil doit être à une hauteur minimale
  203. zm = .5 * ('MAXIMUM' ('PROG' (maxx - minx)(maxy - miny))) ;
  204. zo = 'MAXIMUM' ('PROG' zo zm) ;
  205.  
  206. OEIL = xo yo zo ;
  207. 'FINSI' ;
  208.  
  209. * Tracé
  210. * =====
  211.  
  212. 'SI' ('EGA' TYPT 'FLECHE') ;
  213. * Tracé par petites flêches
  214. VEC1 = 'VECT' DEPP AMP 'A' 'A' 'UZ' 'ROUGE' ;
  215. DETRB = 'DEFO' GEO0 DEPP 0. VEC1 'DEFAUT' ;
  216. 'SI' ltitr ;
  217. 'TRAC' OEIL DETRB 'TITRE' BARA ;
  218. 'SINON' ;
  219. 'TRAC' OEIL DETRB ;
  220. 'FINSI' ;
  221. 'FINSI' ;
  222.  
  223. 'SI' ('EGA' TYPT 'VOLUME') ;
  224. * Tracé en volume
  225.  
  226. * amplification
  227. GEOB = 'PLUS' GEO0 (DEPP '*' AMP) ;
  228.  
  229. * différents éléments
  230. CTBAS = 'COULEUR' ('CONTOUR' GEO0) 'BLEU' ;
  231. CTHAU = 'COULEUR' ('CONTOUR' GEOB) 'BLEU' ;
  232. F1 = 'COULEUR' GEO0 'JAUN' ;
  233. F2 = 'COULEUR' GEOB 'ROUG' ;
  234.  
  235. 'OPTI' 'ELEM' 'QUA8' ;
  236. F3 = 'REGLER' CTBAS 1 CTHAU ;
  237.  
  238. SUPTOT = F1 'ET' F2 'ET' F3 ;
  239.  
  240. 'SI' lcach ;
  241. * faces cachées
  242. 'SI' ltitr ;
  243. 'TRAC' OEIL SUPTOT 'CACHE' 'TITRE' BARA ;
  244. 'SINON' ;
  245. 'TRAC' OEIL SUPTOT 'CACHE' ;
  246. 'FINSI' ;
  247. 'SINON' ;
  248. * tout visible
  249. 'SI' ltitr ;
  250. 'TRAC' OEIL SUPTOT 'TITRE' BARA ;
  251. 'SINON' ;
  252. 'TRAC' OEIL SUPTOT ;
  253. 'FINSI' ;
  254. 'FINSI' ;
  255. 'FINSI' ;
  256.  
  257. 'SI' ('EGA' TYPT 'SUPER') ;
  258. * Tracé en volume avec isovaleurs d'un deuxième champ
  259.  
  260. * amplification
  261. GEOB = 'PLUS' GEO0 (DEPP '*' AMP) ;
  262. GEOB0 = CHAN 'POI1' GEOB ;
  263.  
  264. * construction du champ-point déplacé :
  265. PRG2 = 'PROG' NA*0. ;
  266. 'REPETER' LOOP1 NA ;
  267. I = &LOOP1 ;
  268. PPP = 'POINT' GEOP0 I ;
  269. 'REMPLACER' PRG2 I ('EXTR' SMV2 'SCAL' PPP) ;
  270. 'FIN' LOOP1 ;
  271. SMV2B = 'MANU' 'CHPO' GEOB0 1 'SCAL' PRG2 ;
  272.  
  273. * les faces sont forcément cachées, donc on ne tient pas compte de lcach
  274. 'SI' ltitr ;
  275. 'TRAC' OEIL GEOB smv2b 'TITRE' BARA ;
  276. 'SINON' ;
  277. 'TRAC' OEIL GEOB smv2b ;
  278. 'FINSI' ;
  279. 'FINSI' ;
  280.  
  281.  
  282. * Retour dans la dimension d'origine
  283. 'SI' ('NEG' ndime 3) ;
  284. 'OPTION' 'DIME' ndime ;
  285. 'OPTION' 'MODE' savmode ;
  286. 'FINSI' ;
  287.  
  288. 'FINPROC' ;
  289.  
  290.  
  291.  

© Cast3M 2003 - Tous droits réservés.
Mentions légales