Télécharger @vecoul.procedur

Retour à la liste

Numérotation des lignes :

  1. * @VECOUL PROCEDUR FD218221 26/10/13 21:15:05 12667
  2. ************************************************************************
  3. * Procédure qui construit un objet VCTOT1 (type VECTEUR)
  4. * de couleur variable en fonction de sa norme
  5. * à partir d'un champs de vecteur CH1 (type CHPOINT).
  6. *
  7. * L'objet VCTOT1 est constitué de 10 sous-vecteurs de couleurs
  8. * qui correspondent a 10 intervalles de la plage de la norme
  9. * (échelle linéaire dans le sens croissant) en suivant la palette
  10. * de couleur définie dans OPTI 'PALE'.
  11. *
  12. * Les composantes des sous-vecteurs de couleurs sont renommées pour
  13. * permettre l'affichage de la valeur moyenne de la norme du vecteur
  14. * associée à sa couleur lors du tracé graphique.
  15. *
  16. * Il est possible d'extraire un pourcentage (VRED1 x 100) %
  17. * (si VRED1 dans [0,1]) ou un nombre donné VRED1 (si VRED1 > 1) de ces
  18. * vecteurs : aléatoirement si MOT1 = ALTR, régulièrement sinon.
  19. *
  20. * Postraitement TRAC VCTOT1 MAILLAGE ;
  21. *
  22. * Syntaxe :
  23. * ---------
  24. * VCTOT1 = @VECOUL CH1 AMPL1 CH1 (LMOT1) (MOT1) (VRED1) ;
  25. *
  26. * Entrée :
  27. * ---------
  28. * CH1 : Champs de vecteur (type CHPOINT)
  29. * AMPL1 : Facteur d'amplification (FLOTTANT) OBLIGATOIRE
  30. * LMOT1 : Préciser les noms de composantes voulues (type LISTMOTS)
  31. * MOT1 : Extraction aléatoire si MOT1 = ALTR, régulière sinon
  32. * VRED1 : Pourcentage ([0,1]) ou nombre (>1) de vecteurs
  33. * extraits (type FLOTTANT)
  34. *
  35. * Sortie :
  36. * ---------
  37. * VCTOT1 : Vecteur (VECTEUR) composé de 10 sous-type vecteur de
  38. * différentes couleurs.
  39. *
  40. ************************************************************************
  41. * Remarques :
  42. * - Le facteur d'amplification AMPL1 est une entrée obligatoire
  43. * - Si VRED1 < 0., on extrait 100 %
  44. * - Extraire un faible pourcentage sur un petit nombre de
  45. * vecteurs peut fournir un résultat vide avec l'option
  46. * aléatoire (MOT1 = ALTR) alors qu'au moins 1 vecteurs par
  47. * couleur est extrait avec l'option régulière (gounand:
  48. * cette dernière remarque n'est plus valable.
  49. * 03/12/2012 : recodage et améliorations robustesse par S. Gounand
  50. * ajout LMOT1 et possibilité de donner le nombre de
  51. * vecteurs voulus, à la place du pourcentage.
  52. ************************************************************************
  53. 'DEBPROC' @VECOUL CH1*'CHPOINT' AMPL1*'FLOTTANT' ;
  54. VDIM = 'VALEUR' 'DIME' ;
  55. 'SI' ('NON' ('DANS' ('LECT' VDIM) ('LECT' 2 3))) ;
  56. CHERR = 'CHAINE' 'This procedure only works in 2 or 3 dimensions' ;
  57. 'ERREUR' CHERR ;
  58. 'FINSI' ;
  59. * Lecture des noms de composantes comme pour l'opérateur VECT
  60. 'ARGUMENT' LMOT1/'LISTMOTS' ;
  61. llmot = 'EXISTE' LMOT1 ;
  62. 'SI' llmot ;
  63. vmot = 'DIME' LMOT1 ;
  64. 'SI' ('NEG' VMOT VDIM) ;
  65. CHERR = 'CHAINE' 'The given LISTMOTS is not of dimension ' VDIM ;
  66. 'ERREUR' CHERR ;
  67. 'FINSI' ;
  68. 'FINSI' ;
  69. *
  70. 'ARGUMENT' MOT1/'MOT' VRED1/'FLOTTANT' ;
  71. * Tests lecture MOT1 et VRED1
  72. * Sinon options par defaut
  73. LRED = 'EXISTE' VRED1 ;
  74. 'SI' LRED ;
  75. * Vérif
  76. LRED = ('>EG' VRED1 0.) ;
  77. 'FINSI' ;
  78. LALEA = 'EGA' MOT1 'ALTR' ;
  79. * Extraction des noms des composantes de CH1 (2D ou 3D)
  80. 'SI' LLMOT ;
  81. LICP1 = LMOT1 ;
  82. 'SINON' ;
  83. * Problème potentiel si CH1 contient d'autres composantes que celles
  84. * de vitesses
  85. LICP1 = 'EXTRAIRE' CH1 'COMP' ;
  86. VLICP1 = 'DIME' LICP1 ;
  87. 'SI' ('NEG' VLICP1 VDIM) ;
  88. CHERR = 'CHAINE'
  89. 'The given CHPOINT hasnt got ' VDIM ' component names.' ;
  90. 'LISTE' LICP1 ;
  91. 'ERREUR' CHERR ;
  92. 'FINSI' ;
  93. 'FINSI' ;
  94. * Calcul de la norme
  95. N2 = 'PSCA' CH1 CH1 LICP1 LICP1 ;
  96. N1 = '**' N2 0.5 ;
  97. * Extraction min max de la norme
  98. MINI1 = 'MINI' N1 ;
  99. MAXI1 = 'MAXI' N1 ;
  100. * Pas de decoupage de la norme pour les couleurs (10)
  101. * Attention si MINI1=MAXI1 LPAS ne sera que de dimension 2...
  102. DNN1 = (MAXI1 '-' MINI1) '/' 10.D0 ;
  103. LPAS = 'PROG' MINI1 'PAS' DNN1 MAXI1 ;
  104. * Codes RVB des couleurs de l'operateur COUL (normalises entre 0. et 1.)
  105. LCOUL = 'MOTS' 'BLEU' 'ROUG' 'ROSE' 'VERT' 'TURQ' 'JAUN' 'BLAN' 'NOIR' 'VIOL' 'ORAN'
  106. 'AZUR' 'OCEA' 'CYAN' 'OLIV' 'GRIS' 'POUR' 'BRUN' 'BRIQ' 'CORA' 'BEIG'
  107. 'OR ' 'MARI' 'BOUT' 'LIME' 'LAVA' 'BRON' 'KAKI' 'PEAU' 'CARA' 'INDI' ;
  108. LROUGE = 'PROG' 0.0000 1.0000 1.0000 0.0000 0.0000 1.0000 1.0000 0.0000 0.5804 1.0000
  109. 0.1176 0.2353 0.5294 0.6039 0.7450 0.8157 0.5451 0.6980 1.0000 0.9607
  110. 1.0000 0.0000 0.0000 0.5000 0.9019 0.8549 0.9411 1.0000 0.8039 0.2941 ;
  111. LVERT = 'PROG' 0.0000 0.0000 0.0000 1.0000 0.8078 1.0000 1.0000 0.0000 0.0000 0.6471
  112. 0.5647 0.7020 0.8078 0.8039 0.7450 0.1255 0.2706 0.1333 0.5000 0.8706
  113. 0.8431 0.0000 0.3921 1.0000 0.9019 0.6470 0.9019 0.7137 0.5215 0.0000 ;
  114. LBLEU = 'PROG' 1.0000 0.0000 1.0000 0.0000 0.8196 0.0000 1.0000 0.0000 0.8274 0.0000
  115. 1.0000 0.4431 0.9804 0.1961 0.7450 0.5647 0.0745 0.1333 0.3137 0.7019
  116. 0.0000 0.5000 0.0000 0.0000 0.9803 0.1254 0.5490 0.7568 0.2470 0.5882 ;
  117. * Liste des 10 couleurs de la norme (selon VALE 'PALE')
  118. PAL1 = 'VALE' 'PALE' ;
  119. * Preconditionnement si palette par defaut :
  120. PALD = 'PALE' 'DEFA' ;
  121. A B C = 'MAXI' (PAL1 - PALD) ;
  122. 'SI' (('MAXI' ('MAXI' B) ('MAXI' C)) '<' 1.E-9) ;
  123. LCOU = 'MOTS' 'BLEU' 'AZUR' 'TURQ' 'OCEA' 'OLIV' 'VERT' 'OR' 'ORAN' 'CORA' 'ROUG' ;
  124. * Sinon, interpolation de 10 couleurs dans la palette
  125. 'SINON' ;
  126. LVAL = 'PROG' 0. 'PAS' (1. '/' 9) 1. ;
  127. LCOU = 'MOTS' ;
  128. LRPAL = 'EXTR' PAL1 'COUR' 1 ;
  129. LVPAL = 'EXTR' PAL1 'COUR' 2 ;
  130. LBPAL = 'EXTR' PAL1 'COUR' 3 ;
  131. 'REPE' B1 ('DIME' LVAL) ;
  132. VAL1 = 'EXTR' LVAL &B1 ;
  133. X1 = 'IPOL' VAL1 LRPAL ;
  134. Y1 = 'IPOL' VAL1 LVPAL ;
  135. Z1 = 'IPOL' VAL1 LBPAL ;
  136. DIS1 = 'VALE' 'GRAN' ;
  137. POS1 = -1 ;
  138. 'REPE' B2 ('DIME' LCOUL) ;
  139. X2 = 'EXTR' LROUGE &B2 ;
  140. Y2 = 'EXTR' LVERT &B2 ;
  141. Z2 = 'EXTR' LBLEU &B2 ;
  142. LS1 AS1 BS1 = CIELAB X1 Y1 Z1 ;
  143. LS2 AS2 BS2 = CIELAB X2 Y2 Z2 ;
  144. DIS2 = ((LS1 '-' LS2) '**' 2) '+' ((AS1 '-' AS2) '**' 2) '+' ((BS1 '-' BS2) '**' 2) ;
  145. 'SI' (DIS2 < DIS1) ;
  146. DIS1 = DIS2 ;
  147. POS1 = &B2 ;
  148. 'FINSI' ;
  149. 'FIN' B2 ;
  150. COUL1 = 'EXTR' LCOUL POS1 ;
  151. LCOU = LCOU 'ET' COUL1 ;
  152. 'FIN' B1 ;
  153. 'FINSI' ;
  154. *
  155. * Réduction éventuelle du champ
  156. *
  157. GEOP1 = 'EXTRAIRE' N1 'MAIL' ;
  158. NNOE = 'NBEL' GEOP1 ;
  159. *debug 'MESSAGE' ('CHAINE' 'nbno=' nnoe) ;
  160. 'SI' LRED ;
  161. 'SI' ('&lt;EG' VRED1 1.5D0) ;
  162. NNCIB = 'ENTIER' ('+' ('*' NNOE VRED1) 0.5) ;
  163. 'SINON' ;
  164. NNCIB = 'ENTIER' ('+' VRED1 0.5) ;
  165. 'FINSI' ;
  166. *debug 'MESSAGE' ('CHAINE' 'nbno cible=' nncib) ;
  167. NNCIB = 'MINIMUM' ('LECT' NNOE NNCIB) ;
  168. VRED1F = '/' ('FLOTTANT' NNCIB) ('FLOTTANT' NNOE) ;
  169. *debug 'MESSAGE' ('CHAINE' 'VRED1F=' VRED1F) ;
  170. 'SI' LALEA ;
  171. RESU1 = 'BRUI' 'BLAN' 'UNIF' 0.5 0.5 GEOP1 ;
  172. GEOP1 = 'POINT' RESU1 'EGSUPE' ('-' 1. VRED1F) ;
  173. 'SINON' ;
  174. VPAS = '/' ('FLOTTANT' NNOE) ('FLOTTANT' NNCIB) ;
  175. LELEM1 = 'ENTIER' ('PROG' 1.5 'PAS' VPAS 'NPAS' ('-' NNCIB 1)) ;
  176. GEOP1 = 'ELEM' GEOP1 LELEM1 ;
  177. 'FINSI' ;
  178. N1 = 'REDU' N1 GEOP1 ;
  179. CH1 = 'REDU' CH1 GEOP1 ;
  180. 'FINSI' ;
  181. NRED = 'NBEL' GEOP1 ;
  182. *debug 'MESSAGE' ('CHAINE' 'nbno apres red=' nred) ;
  183. *
  184. VCTOT1 = 'VIDE' 'VECTEUR' ;
  185. NNOTOT = 0 ;
  186. * Boucle de decoupage (10 couleurs ou 2 si MAXI1=MINI1)
  187. *NBOU1 = 10 ;
  188. NBOU1 = '-' ('DIME' LPAS) 1 ;
  189. 'REPETER' BOU1 NBOU1 ;
  190. INDI1 = &BOU1 ;
  191. COU1 = 'EXTRAIRE' LCOU INDI1 ;
  192. BAS1 = 'EXTRAIRE' LPAS INDI1 ;
  193. SUP1 = 'EXTRAIRE' LPAS ('+' INDI1 1) ;
  194. MAILN1 = 'EXTRAIRE' N1 'MAIL' ;
  195. MAIL1 = 'POIN' N1 'EGINFE' SUP1 ;
  196. NMAIL1 = 'NBEL' MAIL1 ;
  197. *debug 'MESSAGE' ('CHAINE' 'nbno bou1=' INDI1 ' mail1=' nmail1) ;
  198. NNOTOT = '+' NNOTOT NMAIL1 ;
  199. MRED = 'DIFF' MAIL1 MAILN1 ;
  200. N1 = 'REDU' N1 MRED ;
  201. * Norme moyenne de la couleur pour trace
  202. MOY1 = (SUP1 + BAS1) * 0.5D0 ;
  203. * Extraction de la valeur de la norme (sans exposant) pour trace
  204. FMOY1 = 'CHAIN' 'FORMAT' '(1PE8.2)' MOY1 ;
  205. FMOY1_1 = 'EXTRAIRE' FMOY1 1 4 ;
  206. FMOY1_2 = 'EXTRAIRE' FMOY1 5 8 ;
  207. CHM1 = 'REDU' CH1 MAIL1 ;
  208. * Changement du nom des composantes pour afficher la valeur de la norme
  209. 'SI' ('EGA' vdim 3) ;
  210. LIST2 = 'MOTS' fMOY1_1 fMOY1_2 ' ' ;
  211. 'SINON' ;
  212. LIST2 = 'MOTS' fMOY1_1 fMOY1_2 ;
  213. 'FINSI' ;
  214. CHM2 = 'NOMC' LICP1 LIST2 CHM1 ;
  215. * Fabrication vecteur élémentaire de couleur COU1
  216. VCW1 = 'VECT' CHM2 AMPL1 LIST2 COU1 ;
  217. * Assemblage vecteur total
  218. VCTOT1 = VCTOT1 'ET' VCW1 ;
  219. 'FIN' BOU1 ;
  220. *debug 'MESSAGE' ('CHAINE' 'nnotot=' nnotot) ;
  221. 'SI' ('NEG' NNOTOT NRED) ;
  222. 'ERREUR' 5 ;
  223. 'FINSI' ;
  224. *
  225. 'FINPROC' VCTOT1 ;
  226.  
  227.  
  228.  

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