#!/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