Download montagne.procedur

Back to the list

   1 : * MONTAGNE  PROCEDUR  MAUGIS    04/10/08    21:16:32     4928           
   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 : 
 263 : *  construction du champ-point déplacé :
 264 :    PRG2   = 'PROG' NA*0. ;
 265 :    'REPETER'  LOOP1 NA ;
 266 :       I   = &LOOP1  ;
 267 :       PPP = 'POINT' GEOP0 I ;
 268 :       'REMPLACER' PRG2 I ('EXTR' SMV2 'SCAL' PPP) ;
 269 :    'FIN' LOOP1  ;
 270 :    SMV2B  = 'MANU' 'CHPO' GEOB 1 'SCAL' PRG2 ;
 271 : 
 272 : *  les faces sont forcément cachées, donc on ne tient pas compte de lcach
 273 :    'SI' ltitr ;
 274 :       'TRAC' OEIL GEOB smv2b 'TITRE' BARA ;
 275 :    'SINON' ;
 276 :       'TRAC' OEIL GEOB smv2b ;
 277 :    'FINSI' ;
 278 : 'FINSI' ;
 279 : 
 280 : 
 281 : * Retour dans la dimension d'origine
 282 : 'SI' ('NEG' ndime 3) ;
 283 :    'OPTION' 'DIME' ndime ;
 284 :    'OPTION' 'MODE' savmode ;
 285 : 'FINSI' ;
 286 : 
 287 : 'FINPROC' ;
 288 :  

© Cast3M 2003 - All rights reserved.
Disclaimer