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