#!/bin/csh ####################################################################################################################################### # # # G E N E R A T I O N D E ' < palette > ' P A R I N T E R P O L A T I O N E T / O U L I S S A G E : # # # # # # source $xigP/.INTERPOLE$Y # # # # # # Arguments : # # # # numeros : liste des numeros des niveaux (de 1 a ...). # # # # niveaux : liste des niveaux a positionner ("+" signifiant "NiveauPrecedent+1"). # # # # fonction : fonction a appliquer au niveau ("N", "D", "A", "1", "2", "3" ou "4"). # # # # rouge : niveau de la composante '$ROUGE' si la variable 'rouge' existe (sera detruite au retour) # # et si '$SystemeRVB', sinon, si '$SystemeHLS' donne le niveau de la composante '$TEINT'. # # verte : niveau de la composante '$VERTE' si la variable 'verte' existe (sera detruite au retour) # # et si '$SystemeRVB', sinon, si '$SystemeHLS' donne le niveau de la composante '$LUMIN'. # # bleue : niveau de la composante '$BLEUE' si la variable 'bleue' existe (sera detruite au retour) # # et si '$SystemeRVB', sinon, si '$SystemeHLS' donne le niveau de la composante '$SATUR'. # # # # teint : donne le niveau de la composante '$TEINT' si '$SystemeHLS' dans [$NOIR,$BLANC]. # # lumin : donne le niveau de la composante '$LUMIN' si '$SystemeHLS' dans [$NOIR,$BLANC]. # # satur : donne le niveau de la composante '$SATUR' si '$SystemeHLS' dans [$NOIR,$BLANC]. # # # # initialisation : indique s'il faut initialiser ('EXIST') ou pas ('NEXIST') la palette. # # # # echelle : definit un facteur de 'SCALE' a appliquer a la (ou aux) composantes apres une # # interpolation ; ainsi, en interpolant entre 0 et 3, puis en faisant une mise a # # l'echelle de 64.0, on obtient une palette en marche d'escalier 0,64,128,196. # # translation : definit une translation de 'SCALE' a appliquer a la (ou aux) composantes apres une # # interpolation. # # # # Fderivee : facteur utilise lors du calcul des derivees pour l'interpolation de lissage. On notera # # que malheureusement '$Fderivee' ne sert a rien dans le cas ou systematiquement les # # niveaux correspondant a la definition du "point de depart" par {1,2} (ou a la definition # # du "point d'arrivee" par {3,4}) dans les listes {$rouge,$verte,$bleue} sont egaux car, en # # effet, dans ces conditions les derivees etant obtenues par des differences ("2"-"1" et # # "4"-"3" respectivement) sont systematiquement nulles, et donc les mutiplier par '$Fderivee' # # ne change rien a cela... # # D2A3 : indicateur logique disant si l'interpolation est 'D2-->A3' ('VRAI') ou 'D1-->A4' ('FAUX') # # ('v $xiii/Images$STR interpoler_les_listes_de_substitution_entre_D2_et_A3'). # # EpsilonLissage : petite valeur destinee, lorsqu'elle n'est pas nulle, a corriger le probleme decrit # # dans 'v $xigP/gris.52.1$Z LISSE.X'. # # # # systeme : systeme de couleurs utilisees ("RVB" ou "HLS", soit '$SystemeRVB' ou '$SystemeHLS'). # # # # ToutConserver : ne faire aucun '$DELETE' a la fin (introduit le 20141117115807). # # NePasInterpoler : ne faire aucune interpolation (introduit le 20141117115807). # # # # # # Author of '$xigP/.INTERPOLE$Y' : # # # # Jean-Francois COLONNA (LACTAMME, AAAAMMJJhhmmss). # # # ####################################################################################################################################### source $xigP/.INTERPOLE.initialisations$Y # Introduit sous cette forme le 20240324110309... # if ($?Fderivee == $NEXIST) then set Fderivee = 1.0 # Valeur par defaut... # else endif if ($?D2A3 == $NEXIST) then set D2A3 = VRAI # Valeur par defaut... # else endif if ($?EpsilonLissage == $NEXIST) then set EpsilonLissage = 0.0 # Valeur par defaut (introduit le 20040910143721) assurant la compatibilite anterieure. # else endif if ($?systeme == $NEXIST) then if (($?rouge == $EXIST) && ($?verte == $EXIST) && ($?bleue == $EXIST)) then set systeme = $SystemeRVB # Cas ou il s'agit surement du {R,V,B}... # else if (($?teint == $EXIST) && ($?lumin == $EXIST) && ($?satur == $EXIST)) then set systeme = $SystemeHLS # Cas ou il s'agit surement du {H,L,S}... # else set systeme = $SystemeRVB # Valeur par defaut... # endif endif else endif set Systeme_RVB_HLS="entree=$systeme sortie=$systeme" # Choix du systeme de couleur. # if ("$systeme" == "$SystemeRVB") then rw $palette$ROUGE >& $nul rw $palette$VERTE >& $nul rw $palette$BLEUE >& $nul else if ($?teint == $EXIST) then set rouge = ($teint) else endif if ($?lumin == $EXIST) then set verte = ($lumin) else endif if ($?satur == $EXIST) then set bleue = ($satur) else endif rw $palette$TEINT >& $nul rw $palette$LUMIN >& $nul rw $palette$SATUR >& $nul endif set VaL_NoM="Valider_noms_relatifs=FAUX" # Introduit le 20080116174617... # if ($?initialisation == $NEXIST) then $xciP/ACCES$X pA=$paletteI pR=$palette entree=$SystemeRVB sortie=$systeme $VaL_NoM # Initialisation lorsque cela est demande... # else if ($initialisation == $EXIST) then $xciP/ACCES$X pA=$paletteI pR=$palette entree=$SystemeRVB sortie=$systeme $VaL_NoM # Initialisation lorsque cela est demande... # else endif endif set nD=$NOIR set nA=$BLANC # Definition des niveaux de Depart et d'Arrivee a priori pour '$xciP/INTERPOLE$X'. # set n1=$NOIR set n4=$BLANC set n2=`expr $n1 + 1` set n3=`expr $n4 - 1` # Definition des niveaux de Depart et d'Arrivee a priori pour '$xciP/LISSE$X'. # if ($?numeros == $NEXIST) then set numeros=`$xci/nombres$X premiere=1 derniere=$#niveaux zero="$K_VIDE"` # Lorsque la liste '$numeros' est absente, on la genere a partir du nombre d'elements de # # la liste '$niveaux' qui est necessairement presente... # else endif foreach numero ($numeros) if ("$niveaux[$numero]" == "+") then if ($numero > 1) then @ numero_1 = $numero - 1 @ niveaux[$numero] = $niveaux[$numero_1] + 1 # Un niveau repere par "+" doit etre substitue par le niveau qui le precede (s'il existe) # # incremente d'une unite (introduit le 20030127091538 pour 'v $xigP/escalier2.01$Z' et toutes # # les palettes de ce type... # else @ niveaux[$numero] = 0 # Un "+" en tete permet de definir le premier niveau (0)... # endif else endif end foreach numero ($numeros) if ($?rouge == $EXIST) then set nR=$rouge[$numero] set eR=VRAI else set nR=`$xciP/G_NIVEAU$X p=$palette n=$niveaux[$numero] rouge=VRAI verte=FAUX bleue=FAUX $VaL_NoM |& $CA` set eR=FAUX endif if ($?verte == $EXIST) then set nV=$verte[$numero] set eV=VRAI else set nV=`$xciP/G_NIVEAU$X p=$palette n=$niveaux[$numero] rouge=FAUX verte=VRAI bleue=FAUX $VaL_NoM |& $CA` set eV=FAUX endif if ($?bleue == $EXIST) then set nB=$bleue[$numero] set eB=VRAI else set nB=`$xciP/G_NIVEAU$X p=$palette n=$niveaux[$numero] rouge=FAUX verte=FAUX bleue=VRAI $VaL_NoM |& $CA` set eB=FAUX endif if ($?NePasInterpoler == $NEXIST) then # Test introduit le 20141117115807... # $xciP/S_NIVEAU$X pA=$palette n=$niveaux[$numero] nR=$nR nV=$nV nB=$nB pR=$palette $Systeme_RVB_HLS $VaL_NoM # Definition et mise en place systematique # # du niveau courant. # else endif switch ("$fonction[$numero]") case "N": # Definition d'un niveau "standard". # breaksw case "D": set nD=$numero # Definition du niveau de Depart. # breaksw case "A": set nA=$numero # Definition du niveau d'Arrivee. # if ($?NePasInterpoler == $NEXIST) then # Test introduit le 20141117115807... # $xciP/INTERPOLE$X pA=$palette \ rouge=$eR verte=$eV bleue=$eB \ nD=$niveaux[$nD] nA=$niveaux[$nA] \ pR=$palette \ $Systeme_RVB_HLS \ $VaL_NoM # Interpolation du niveau de Depart au niveau d'Arrivee. # else endif if ($?echelle == $EXIST) then $xciP/SCALE$X pA=$palette \ rouge=$eR verte=$eV bleue=$eB \ nD=$niveaux[$nD] nA=$niveaux[$nA] \ multiplieur=$echelle \ translation=0 \ pR=$palette \ $Systeme_RVB_HLS \ $VaL_NoM # Mise a l'echelle des niveaux apres interpolation. # else endif if ($?translation == $EXIST) then $xciP/SCALE$X pA=$palette \ rouge=$eR verte=$eV bleue=$eB \ nD=$niveaux[$nD] nA=$niveaux[$nA] \ multiplieur=1.0 \ translation=$translation \ pR=$palette \ $Systeme_RVB_HLS \ $VaL_NoM # Translation des niveaux apres interpolation. # else endif set nD=$nA # Definition du niveau de Depart suivant. # breaksw case "1": set n1=$numero # Definition du niveau de type "1". # breaksw case "2": set n2=$numero # Definition du niveau de type "2". # breaksw case "3": set n3=$numero # Definition du niveau de type "3". # breaksw case "4": set n4=$numero # Definition du niveau de type "4". # $xciP/LISSE$X pA=$palette \ rouge=$eR verte=$eV bleue=$eB \ n1=$niveaux[$n1] n2=$niveaux[$n2] n3=$niveaux[$n3] n4=$niveaux[$n4] \ facteur=$Fderivee \ interpoler_D2_et_A3=$D2A3 \ EpsilonLissageSubstitution=$EpsilonLissage \ pR=$palette \ $Systeme_RVB_HLS \ $VaL_NoM # Lissage suivant la spline cubique (n1,n2,n3,n4). # if ($?echelle == $EXIST) then $xciP/SCALE$X pA=$palette \ rouge=$eR verte=$eV bleue=$eB \ nD=$niveaux[$nD] nA=$niveaux[$nA] \ multiplieur=$echelle \ translation=0 \ pR=$palette \ $Systeme_RVB_HLS \ $VaL_NoM # Interpolation du niveau de Depart au niveau d'Arrivee. # else endif if ($?translation == $EXIST) then $xciP/SCALE$X pA=$palette \ rouge=$eR verte=$eV bleue=$eB \ nD=$niveaux[$nD] nA=$niveaux[$nA] \ multiplieur=1.0 \ translation=$translation \ pR=$palette \ $Systeme_RVB_HLS \ $VaL_NoM # Translation des niveaux apres interpolation. # else endif set n1=$n3 set n2=$n4 # Definition des niveaux 'n1' et 'n2' suivants. # breaksw default: #20240105111212____: echo "ATTENTION : la fonction demandee n'est pas reconnue." # echo "ATTENTION : la fonction demandee ('$fonction[$numero]') n'est pas reconnue." breaksw endsw end if ($?rouge == $EXIST) then unset rouge else endif if ($?verte == $EXIST) then unset verte else endif if ($?bleue == $EXIST) then unset bleue else endif if ($?teint == $EXIST) then unset teint else endif if ($?lumin == $EXIST) then unset lumin else endif if ($?satur == $EXIST) then unset satur else endif if ($?ToutConserver == $NEXIST) then # Introduit le 20141117115807... # unset numeros unset niveaux unset fonction if ($?initialisation == $EXIST) then unset initialisation else endif if ($?echelle == $EXIST) then unset echelle else endif if ($?translation == $EXIST) then unset translation else endif else endif if ("$systeme" == "$SystemeRVB") then ro $palette$ROUGE ro $palette$VERTE ro $palette$BLEUE else rw $palette$ROUGE >& $nul rw $palette$VERTE >& $nul rw $palette$BLEUE >& $nul $xciP/ACCES$X pA=$palette pR=$palette entree=$SystemeHLS sortie=$SystemeRVB $VaL_NoM ro $palette$ROUGE ro $palette$VERTE ro $palette$BLEUE delete $palette$TEINT delete $palette$LUMIN delete $palette$SATUR # A compter du 19990211122100, meme lorsque le systeme {H,L,S} est utilise pour la generation # # d'une palette, c'est la palette {R,V,B} uniquement qui est generee et conservee... # endif if ($?ToutConserver == $NEXIST) then # Introduit le 20141117115807... # unset palette unset paletteI # Pour permettre un autre appel... # unset VaL_NoM unset Systeme_RVB_HLS else endif