#!/bin/csh
#######################################################################################################################################
# #
# T R A N S F O R M A T I O N D ' U N E V A R I E T E Q U E L C O N Q U E #
# ( U N E S U R F A C E P A R E X E M P L E ) E N U N E D E N S I T E : #
# #
# #
# Utilisation : #
# #
# $xrs/SurfDensi.01$Z \ #
# <Gen> <AR> [<P> [<D> [<FE> [<FP> [<GA> [<DA> [<FD> [<R> [<GC> [<SG> [<S> [<I> [<X> [<Y> [<Z> [<P>]]]]]]]]]]]]]]]] #
# #
# #
# Author of '$xrs/SurfDensi.01$Z' : #
# #
# Jean-Francois Colonna (LACTAMME, 20100826132644). #
# #
#######################################################################################################################################
set Generateur=$1
# On notera que '$Generateur' peut etre '$xrs/project2D.11$X' ; dans ce cas, il convient #
# que l'argument '$GArguments' (ci-apres...) contiennent obligatoirement les parametres #
# suivants : #
# #
# imageFx= #
# imageFy= #
# imageFz= #
# #
# et d'autres eventuellement utiles... #
set AlbumR=$2
set Premiere=$3
set Derniere=$4
set FEcarte=$5
# Diminuer la valeur de ce parametre revient a "etaler" les taches de densite. On a donc #
# tout interet a prendre de grandes valeurs : 10000 par exemple... #
# #
# Le 20120517095735, le parametre '$FEcarte' joue un role supplementaire : #
# #
# $FEcarte > 0 Utiliser '$xrv/densite.01$X' : TRES LENT, mais plus CONTINU. #
# $FEcarte = 0 Utiliser '$xrv/store_album$X' : TRES RAPIDE, mais plus DISCRET. #
# #
# n'ayant pas trouve de solution plus simple (en particulier, il y a deja un trop grand #
# nombre de parametres...). #
set FacteurPas=$6
# Le 20120517095735, le parametre '$FacteurPas' joue un role supplementaire : #
# #
# si $FEcarte = 0 alors il designe la demi-taille des paves... #
# #
# n'ayant pas trouve de solution plus simple (en particulier, il y a deja un trop grand #
# nombre de parametres...). #
set GArguments=($7)
# Ce parametre permet d'introduire une liste quelconque de parametres de la commande #
# '$Generateur' (voir ci-dessus le cas de '$xrs/project2D.11$X'...). #
set DArguments=($8)
# Ce parametre permet d'introduire une liste quelconque de parametres de la commande #
# '$xrv/densite.01$X'. #
set FDcarte=$9
set Rcarte=$10
set GCcarte=$11
set SGDcarte=$12
set Scarte=$13
set Inversion=$14
set XInversion=$15
set YInversion=$16
set ZInversion=$17
set PInversion=$18
setArgum Premiere 1
setArgum Derniere 32
setArgum FEcarte 100
setArgum FacteurPas 10
setArgum FDcarte 1
setArgum Rcarte VRAI
# Cette valeur par defaut semble garantir qu'un cercle reste un cercle... #
setArgum GCcarte FAUX
if ("$SGDcarte" == "$K_VIDE") then
set IGDcarte=FAUX
set SGDcarte=`GetParam $xrv/densite.01$X seuil_grandes_distances`
# On notera alors que la valeur : #
# #
# SGDcarte=0.1 #
# #
# garantit assez surement que la densite calculee ci-apres est identique a celle que l'on #
# obtiendrait en l'absence de ce parametre '$SGDcarte'... #
else
set IGDcarte=VRAI
endif
setArgum Scarte `GetParam $xrv/densite.01$X maximum`
setArgum Inversion $NEXIST
setArgum XInversion `GetParam $xrv/inversion.01$X "Xpole"`
setArgum YInversion `GetParam $xrv/inversion.01$X "Ypole"`
setArgum ZInversion `GetParam $xrv/inversion.01$X "Zpole"`
setArgum PInversion `GetParam $xrv/inversion.01$X "puissance"`
set GenerateurEffectif=$Generateur
if (! -e $GenerateurEffectif) then
set GenerateurEffectif=$xrs/$GenerateurEffectif
if (! -e $GenerateurEffectif) then
set GenerateurEffectif=$GenerateurEffectif$X
else
endif
else
endif
if (-e $GenerateurEffectif) then
FileTmpB LiStE_P1
FileTmpB imageT
#20101026140042____: set PaS_u=`GetParam $GenerateurEffectif "pu"` #
set PaS_u=`GetParam $GenerateurEffectif "pu" $NEXIST`
#20101026140042____: set PaS_v=`GetParam $GenerateurEffectif "pv"` #
set PaS_v=`GetParam $GenerateurEffectif "pv" $NEXIST`
set PaS_w=`GetParam $GenerateurEffectif "pw" $NEXIST`
# Recuperation des pas par defaut en {u,v[,w]}. #
if ("$PaS_u" != "$K_VIDE") then
set PaS_u="pu="`calcul $FacteurPas*$PaS_u`
# Calcul du pas effectif en {u}. Ceci fut introduit le 20101026140042 afin de pouvoir #
# utiliser, en tant que '$GenerateurEffectif', des progammes tel 'v $xrk/lorenz.11$K'. #
else
endif
if ("$PaS_v" != "$K_VIDE") then
set PaS_v="pv="`calcul $FacteurPas*$PaS_v`
# Calcul du pas effectif en {v}. Ceci fut introduit le 20101026140042 afin de pouvoir #
# utiliser, en tant que '$GenerateurEffectif', des progammes tel 'v $xrk/lorenz.11$K'. #
else
endif
if ("$PaS_w" != "$K_VIDE") then
set PaS_w="pw="`calcul $FacteurPas*$PaS_w`
# Calcul du pas effectif en {w}. Ceci fut introduit le 20101005175411 afin de pouvoir #
# utiliser, en tant que '$GenerateurEffectif', des progammes tel 'v $xrs/project3D.11$K'. #
else
endif
set VaLiDe=`GetParam $GenerateurEffectif "lister_u_et_v" $NEXIST`
if ("$VaLiDe" != "$K_VIDE") then
if ("$VaLiDe" != "FAUX") then
EROR "Le parametre 'lister_u_et_v=' a la valeur 'VRAI' par defaut."
# Validation introduite le 20101006101838 suite a la suppression de "lister_u_et_v=FAUX" #
# ci-apres... #
else
endif
else
endif
$GenerateurEffectif \
nombre_periodes=1 \
$PaS_u $PaS_v $PaS_w \
lister_les_points=VRAI lister_les_points_avant=FAUX \
ZOOM=1 \
$GArguments \
R=$imageT chiffres=0 \
extrema_hors=FAUX \
$formatI | \
$SE -e "s/^/ /" \
> $LiStE_P1
# Generation de la liste des points... #
# #
# Le "extrema_hors=FAUX" est destine a eliminer les messages d'avertissement sur les #
# coordonnees hors-previsions... #
# #
# Le "nombre_periodes=1" a ete introduit le 20100914084613 pour ameliorer la lisiblite... #
# #
# Le 20101006101838, "lister_u_et_v=FAUX" a ete supprime a cause de 'v $xrs/project3D.11$K' #
# qui n'a pas cette option a cette date. Cela a ete remplace par une validation de cela #
# juste avant... #
unset PaS_w
unset PaS_v
unset PaS_u
FileTmpE imageT
$CA $LiStE_P1 | \
$SE -e 's/^.* \(X=[^ ]*\) .*$/\1/' \
-e 's/X=//' \
> $LiStE_P1$COORD_X
$CA $LiStE_P1 | \
$SE -e 's/^.* \(Y=[^ ]*\) .*$/\1/' \
-e 's/Y=//' \
> $LiStE_P1$COORD_Y
$CA $LiStE_P1 | \
$SE -e 's/^.* \(Z=[^ ]*\) .*$/\1/' \
-e 's/Z=//' \
> $LiStE_P1$COORD_Z
# Generation de la liste des coordonnees {X,Y,Z}. #
FileTmpB LiStE_P2
if ($Inversion == $NEXIST) then
# Cas ou il n'y a pas d'inversion geometrique : #
$xrv/neutre$X \
ne=0 \
fichier=$LiStE_P1$COORD_X \
> $LiStE_P2$COORD_X
$xrv/neutre$X \
ne=0 \
fichier=$LiStE_P1$COORD_Y \
> $LiStE_P2$COORD_Y
$xrv/neutre$X \
ne=0 \
fichier=$LiStE_P1$COORD_Z \
> $LiStE_P2$COORD_Z
else
# Cas ou il y a inversion geometrique : #
set Parametres_Inv="$K_VIDE"
set Parametres_Inv="$Parametres_Inv"" ne=0"
set Parametres_Inv="$Parametres_Inv"" Xpole=$XInversion"
set Parametres_Inv="$Parametres_Inv"" Ypole=$YInversion"
set Parametres_Inv="$Parametres_Inv"" Zpole=$ZInversion"
set Parametres_Inv="$Parametres_Inv"" puissance=$PInversion"
set Parametres_Inv="$Parametres_Inv"" LISTE_X=$LiStE_P1$COORD_X"
set Parametres_Inv="$Parametres_Inv"" LISTE_Y=$LiStE_P1$COORD_Y"
set Parametres_Inv="$Parametres_Inv"" LISTE_Z=$LiStE_P1$COORD_Z"
$xrv/inversion.01$X \
$Parametres_Inv \
pX=1 pY=0 pZ=0 pRAYON=0 \
> $LiStE_P2$COORD_X
$xrv/inversion.01$X \
$Parametres_Inv \
pX=0 pY=1 pZ=0 pRAYON=0 \
> $LiStE_P2$COORD_Y
$xrv/inversion.01$X \
$Parametres_Inv \
pX=0 pY=0 pZ=1 pRAYON=0 \
> $LiStE_P2$COORD_Z
endif
FileTmpE LiStE_P1
set NPointsX=`$CA $LiStE_P2$COORD_X | $WCl`
set NPointsY=`$CA $LiStE_P2$COORD_Y | $WCl`
set NPointsZ=`$CA $LiStE_P2$COORD_Z | $WCl`
set NPointsXYZ=`$xcg/MAX3.01$X x=$NPointsX y=$NPointsY z=$NPointsZ entier=VRAI`
set Xminimum=`$xrv/extrema.01$X ne=0 fichier=$LiStE_P2$COORD_X Prme=VRAI | $GRE "^minimum=" | $SE -e "s/^.*=//"`
set Xmaximum=`$xrv/extrema.01$X ne=0 fichier=$LiStE_P2$COORD_X Prme=VRAI | $GRE "^maximum=" | $SE -e "s/^.*=//"`
# A priori, ne sert a rien, mais plus tard... #
set Yminimum=`$xrv/extrema.01$X ne=0 fichier=$LiStE_P2$COORD_Y Prme=VRAI | $GRE "^minimum=" | $SE -e "s/^.*=//"`
set Ymaximum=`$xrv/extrema.01$X ne=0 fichier=$LiStE_P2$COORD_Y Prme=VRAI | $GRE "^maximum=" | $SE -e "s/^.*=//"`
# A priori, ne sert a rien, mais plus tard... #
set Zminimum=`$xrv/extrema.01$X ne=0 fichier=$LiStE_P2$COORD_Z Prme=VRAI | $GRE "^minimum=" | $SE -e "s/^.*=//"`
set Zmaximum=`$xrv/extrema.01$X ne=0 fichier=$LiStE_P2$COORD_Z Prme=VRAI | $GRE "^maximum=" | $SE -e "s/^.*=//"`
if ($FEcarte > 0) then
# Test introduit le 20120517095735... #
$xrv/densite.01$X \
ne=$NPointsXYZ \
LISTE_X=$LiStE_P2$COORD_X \
LISTE_Y=$LiStE_P2$COORD_Y \
LISTE_Z=$LiStE_P2$COORD_Z \
rectangulaire=$Rcarte grand_carre=$GCcarte \
Eexposant=2 \
Fexponentielle=$BLANC \
ignorer_grandes_distances=$IGDcarte seuil_grandes_distances=$SGDcarte \
maximum=$Scarte \
facteur=$FDcarte Efacteur=$FEcarte \
FZmin=$Zminimum FZmax=$Zmaximum \
Zmin=`calcul $Premiere-$Premiere` Zmax=`calcul $Derniere-$Premiere` \
ValiderAxes=FAUX \
$DArguments \
album=VRAI premiere=$Premiere \
R=$AlbumR \
$formatI
# Et enfin, generation de la densite... #
# #
# Le parametre "Fexponentielle=$BLANC" a ete introduit le 20100831161305 afin que les #
# densites calculees soient compatibles avec celles de 'v $xci/densite_3D.11$K'... #
else
FileTmpB LiStE_P3
$xrv/normalise.01$X \
ne=0 \
fichier=$LiStE_P2$COORD_Z \
> $LiStE_P3$COORD_Z
# Et ce afin d'occuper tout l'album (introduit le 20120517130840)... #
$xrv/store_album$X \
ne=$NPointsXYZ \
LISTE_X=$LiStE_P2$COORD_X \
LISTE_Y=$LiStE_P2$COORD_Y \
LISTE_Z=$LiStE_P3$COORD_Z \
LISTE_NIVEAU=1 \
rectangulaire=$Rcarte grand_carre=$GCcarte \
epaississement_spherique=VRAI \
demi_pave_X=$FacteurPas demi_pave_Y=$FacteurPas demi_pave_Z=$FacteurPas \
Zmin=`calcul $Premiere-$Premiere` Zmax=`calcul $Derniere-$Premiere` \
ValiderAxes=FAUX \
$DArguments \
premiere=$Premiere \
R=$AlbumR \
$formatI
# Et enfin, generation d'une fausse densite car, en effet, elle est "tout ou rien"... #
FileTmpE LiStE_P3
endif
if ($EXIST) then
# Ce test a ete mis en place le 20100831210648 afin de comprendre pourquoi l'image #
# 'v $xiirs/BKLN.82' etait incorrecte : seuls les points du premier plan etaient lumineux, #
# les autres etant tres sombres. Il est apparu que l'ombre calculee etait "plus large" que #
# la densite, or en general, seuls les points des contours des ombres sont lumineux, les #
# autres a l'interieur etant attenues. Cela venait de 'v $xrv/densite.01$K EXPX' qui genere #
# ses densites sous forme de gaussiennes, qui donc decroissent tres vite. Le traitement de #
# '$AlbumR' par 'v $xci/ombrage.11$K' et par 'v $xci/accumule.42$K' ensuite etait le #
# responsable de cela. La solution fut donc ci-apres de normaliser independamment les pages #
# de '$AlbumR', puis de les binariser en conservant tout ce qui est superieur a un certain #
# seuil (0.001), puis enfin de refaire une "vraie" densite de '$AlbumR' afin d'obtenir un #
# resultat du type de 'v $xiirc/MANE.61.2'... #
if ($FEcarte > 0) then
# Test introduit le 20120517104112... #
$xci/normalise.02$X \
A=$AlbumR \
standard=FAUX \
premiere=$Premiere derniere=$Derniere \
independante=VRAI extrema=FAUX \
R=$AlbumR \
$formatI
# Introduit le 20100831205433 afin d'essayer d'avoir une certaine compatibilite avec #
# 'v $xci/densite_3D.11$K'... #
$xci/acces_3D.11$X \
A=$AlbumR \
premiere=$Premiere \
Zmin=`calcul $Premiere-$Premiere` Zmax=`calcul $Derniere-$Premiere` \
brutal=VRAI binariser=VRAI Fseuil=0.001 \
R=$AlbumR \
$formatI
# Introduit le 20100901090847 pour "contrer" le fait que 'v $xrv/densite.01$K EXPX' genere #
# des gaussiennes contrairement a 'v $xci/densite_3D.11$K' qui est lineaire. Le 'Fseuil' #
# est destine a recuperer une bonne partie des gaussiennes (qui decroissent evidemment #
# tres vite). #
#20100903221027____: set PaveXYZ=2 #
#20100904091648____: set PaveXYZ=4 #
set PaveXYZ=2
# Parametre introduit le 20100903213559... #
$xci/densite_3D.11$X \
A=$AlbumR \
standard=VRAI \
premiere=$Premiere \
Zmin=`calcul $Premiere-$Premiere` Zmax=`calcul $Derniere-$Premiere` \
dx=$PaveXYZ dy=$PaveXYZ dz=$PaveXYZ \
R=$AlbumR \
$formatI
else
endif
else
endif
FileTmpE LiStE_P2
# Nettoyage... #
else
EROR "Le generateur de surface '$Generateur' n'existe pas."
endif