$$$$ @VECOUL * @VECOUL PROCEDUR GOUNAND 13/01/22 21:15:08 7678 ************************************************************************ * Procedure qui construit un objet VCTOT1 (type VECTEUR) * de couleur variable en fonction de sa norme * à partir d'un champs de vecteur CH1 (type CHPOINT). * * L'objet VCTOT1 est constitué de 10 sous-vecteurs de couleurs * 'VIOL' 'AZUR' 'BLEU' 'TURQ' 'OCEA' 'VERT' 'OLIV' 'JAUN' 'ORAN' 'ROUG' * qui correspondent a 10 intervalles de la plage de la norme * (échelle linéaire dans le sens croissant). * * Les composantes des sous-vecteurs de couleurs sont renommées pour * permettre l'affichage de la valeur moyenne de la norme du vecteur * associée à sa couleur lors du tracé graphique. * * Il est possible d'extraire un pourcentage (VRED1 x 100) % * (si VRED1 dans [0,1]) ou un nombre donné VRED1 (si VRED1 > 1) de ces * vecteurs : aléatoirement si MOT1 = ALTR, régulièrement sinon. * * Postraitement TRAC VCTOT1 MAILLAGE ; * * Syntaxe : * --------- * VCTOT1 = @VECOUL CH1 AMPL1 CH1 (LMOT1) (MOT1) (VRED1) ; * * Entrée : * --------- * CH1 : Champs de vecteur (type CHPOINT) * AMPL1 : Facteur d'amplification (FLOTTANT) OBLIGATOIRE * LMOT1 : Préciser les noms de composantes voulues (type LISTMOTS) * MOT1 : Extraction aléatoire si MOT1 = ALTR, régulière sinon * VRED1 : Pourcentage ([0,1]) ou nombre (>1) de vecteurs * extraits (type FLOTTANT) * * Sortie : * --------- * VCTOT1 : Vecteur (VECTEUR) composé de 10 sous-type vecteur de * différentes couleurs. * ************************************************************************ * Remarques : * - Le facteur d'amplification AMPL1 est une entrée obligatoire * - Si VRED1 < 0., on extrait 100 % * - Extraire un faible pourcentage sur un petit nombre de * vecteurs peut fournir un résultat vide avec l'option * aléatoire (MOT1 = ALTR) alors qu'au moins 1 vecteurs par * couleur est extrait avec l'option régulière (gounand: * cette dernière remarque n'est plus valable. * 03/12/2012 : recodage et améliorations robustesse par S. Gounand * ajout LMOT1 et possibilité de donner le nombre de * vecteurs voulus, à la place du pourcentage. ************************************************************************ 'DEBPROC' @VECOUL CH1*'CHPOINT' AMPL1*'FLOTTANT' ; vdim = 'VALEUR' 'DIME' ; 'SI' ('NON' ('DANS' ('LECT' vdim) ('LECT' 2 3))) ; cherr = 'CHAINE' 'This procedure only works in 2 or 3 dimensions' ; 'ERREUR' cherr ; 'FINSI' ; * Lecture des noms de composantes comme pour l'opérateur VECT 'ARGUMENT' LMOT1/'LISTMOTS' ; llmot = 'EXISTE' LMOT1 ; 'SI' llmot ; vmot = 'DIME' lmot1 ; 'SI' ('NEG' vmot vdim) ; cherr = 'CHAINE' 'The given LISTMOTS is not of dimension ' vdim ; 'ERREUR' cherr ; 'FINSI' ; 'FINSI' ; * 'ARGUMENT' MOT1/'MOT' VRED1/'FLOTTANT' ; * Tests lecture MOT1 et VRED1 * Sinon options par defaut lred = 'EXISTE' vred1 ; 'SI' lred ; * Vérif lred = ('>EG' vred1 0.) ; 'FINSI' ; lalea = 'EGA' MOT1 'ALTR' ; * Extraction des noms des composantes de CH1 (2D ou 3D) 'SI' llmot ; LICP1 = LMOT1 ; 'SINON' ; * Problème potentiel si CH1 contient d'autres composantes que celles * de vitesses LICP1 = 'EXTRAIRE' CH1 'COMP' ; vlicp1 = 'DIME' LICP1 ; 'SI' ('NEG' vlicp1 vdim) ; cherr = 'CHAINE' 'The given CHPOINT hasnt got ' vdim ' component names.' ; 'LISTE' LICP1 ; 'ERREUR' cherr ; 'FINSI' ; 'FINSI' ; * Calcul de la norme N2 = 'PSCA' CH1 CH1 LICP1 LICP1 ; N1 = '**' N2 0.5 ; * Extraction min max de la norme MINI1 = 'MINI' N1 ; MAXI1 = 'MAXI' N1 ; * Pas de decoupage de la norme pour les couleurs (10) * Attention si MINI1=MAXI1 LPAS ne sera que de dimension 2... DNN1 = (MAXI1 '-' MINI1) '/' 10.D0 ; LPAS = 'PROG' MINI1 'PAS' DNN1 MAXI1 ; *'LISTE' lpas ; * * Table des couleurs de la norme * de la valeur mini (Violet) a la valeur maxi (Rouge) TAB1 = 'TABLE' ; TAB1 . 1 = 'MOT' 'VIOL' ; TAB1 . 2 = 'MOT' 'AZUR' ; TAB1 . 3 = 'MOT' 'BLEU' ; TAB1 . 4 = 'MOT' 'TURQ' ; TAB1 . 5 = 'MOT' 'OCEA' ; TAB1 . 6 = 'MOT' 'VERT' ; TAB1 . 7 = 'MOT' 'OLIV' ; TAB1 . 8 = 'MOT' 'JAUN' ; TAB1 . 9 = 'MOT' 'ORAN' ; TAB1 . 10 = 'MOT' 'ROUG' ; * * Réduction éventuelle du champ * geop1 = 'EXTRAIRE' N1 'MAIL' ; nnoe = 'NBEL' geop1 ; *debug 'MESSAGE' ('CHAINE' 'nbno=' nnoe) ; 'SI' lred ; 'SI' ('