#!/bin/csh
#######################################################################################################################################
# #
# V I S U A L I S A T I O N D ' U N E N S E M B L E D E P O I N T S T R I D I M E N S I O N N E L S : #
# #
# #
# Utilisation : #
# #
# $xrv/pts_3D.11$Z [<Fichier3DA>] [<imageR>] \ #
# [<Isoles>] [<NPoints>] [<Grossissement>] \ #
# [<Rotation_OX>] [<Rotation_OY>] [<Rotation_OZ>] \ #
# [<Translation_OX>] [<Translation_OY>] [<Translation_OZ>] \ #
# [<Zoom>] \ #
# [<Ax>] [<Bx>] \ #
# [<Ay>] [<By>] \ #
# [<Az>] [<Bz>] \ #
# [<Zminimum>] [<Zmaximum>] [<ZminimumT>] [<ZmaximumT>] \ #
# [<RayonCorrectZ>] [<RayonCorrect1>] \ #
# [<Ajuster>] [<Auto>] \ #
# [<Brume>] \ #
# [<NCarre>] #
# #
# #
# Author of '$xrv/pts_3D.11$Z' : #
# #
# Jean-Francois Colonna (LACTAMME, AAAAMMJJhhmmss). #
# #
#######################################################################################################################################
GetArg Fichier3DA=$xT/Fichier3DA \
imageR=$xT/imageR \
Isoles=VRAI \
NPoints=50 \
Grossissement=1.0 \
Rotation_OX=`GetParam $xrv/particule.10$X ROTATION_OX` \
Rotation_OY=`GetParam $xrv/particule.10$X ROTATION_OY` \
Rotation_OZ=`GetParam $xrv/particule.10$X ROTATION_OZ` \
Translation_OX=`GetParam $xrv/particule.10$X TRANSLATION_OX` \
Translation_OY=`GetParam $xrv/particule.10$X TRANSLATION_OY` \
Translation_OZ=`GetParam $xrv/particule.10$X TRANSLATION_OZ` \
Zoom=1.0 \
Ax=`GetParam $xrv/particule.10$X AX` \
Bx=`GetParam $xrv/particule.10$X BX` \
Ay=`GetParam $xrv/particule.10$X AY` \
By=`GetParam $xrv/particule.10$X BY` \
Az=`GetParam $xrv/particule.10$X AZ` \
Bz=`GetParam $xrv/particule.10$X BZ` \
Zminimum=`GetParam $xrv/particule.10$X Zminimum` \
Zmaximum=`GetParam $xrv/particule.10$X Zmaximum` \
ZminimumT=`GetParam $xrv/particule.10$X ZminimumT` \
ZmaximumT=`GetParam $xrv/particule.10$X ZmaximumT` \
RayonCorrectZ=VRAI \
RayonCorrect1=VRAI \
Ajuster=VRAI \
Auto=FAUX \
Brume=FAUX \
NCarre=VRAI
# Isoles : permet de selectionner entre le mode "points isoles" ('VRAI') ou bien #
# le mode "points chaines". #
# #
# NPoints : nombre de points sur une chaine de connexion. #
# #
# Grossissement : facteur permettant de distinguer les points extremites des points #
# constitutifs des chaines de connexion. #
# #
# Rotation_OX : rotation autour de l'axe 'OX'. #
# #
# Rotation_OY : rotation autour de l'axe 'OY'. #
# #
# Rotation_OZ : rotation autour de l'axe 'OZ'. #
# #
# Translation_OX : translation parallele a l'axe 'OX' (introduite le 20111020122250). #
# #
# Translation_OY : translation parallele a l'axe 'OY' (introduite le 20111020122250). #
# #
# Translation_OZ : translation parallele a l'axe 'OZ' (introduite le 20111020122250). #
# #
# Zoom : facteur de zoom de l'image Resultat. #
# #
# {Ax,Bx} : parametres de 'AXPB(...)' pour les 'X's (introduits le 20111020125145), #
# {Ay,By} : parametres de 'AXPB(...)' pour les 'Y's (introduits le 20111020125145), #
# {Az,Bz} : parametres de 'AXPB(...)' pour les 'Z's (introduits le 20111020125145). #
# #
# {Zminimum,Zmaximum,ZminimumT,ZmaximumT} #
# : gestion du depth-cueing. Avec : #
# #
# Zminimum=ZminimumT=1.0 pas de #
# Zmaximum=ZmaximumT=1.0 depth-cueing, #
# #
# Zminimum=ZminimumT=0.0 depth-cueing #
# Zmaximum=ZmaximumT=1.0 maximal, #
# #
# (introduits le 20111020191227). #
# #
# RayonCorrectZ : afin de calculer correctement le rayon des spheres projetees. #
# RayonCorrect1 : afin de calculer correctement le rayon des spheres projetees. #
# #
# Ajuster : afin de "remettre a l'echelle" les coordonnees {X,Y,Z}. #
# #
# Auto : afin de ne pas ajuster automatiquement les coordonnees {X,Y,Z}. #
# #
# Brume : afin de generer des images dans la brume... #
# #
# NCarre : afin de parametrer le tri (introduit le 20111020112330). #
if (($Ajuster == FAUX) && ($Auto == VRAI)) then
EROR "Il y a certainement conflit entre '$K_DOLLAR""Ajuster=$Ajuster' et '$K_DOLLAR""Auto=$Auto'."
else
endif
if (-e $Fichier3DA) then
FileTmpB nomTA
FileTmpB nomT1
FileTmpB nomTX
FileTmpB nomTY
FileTmpB nomTZ
FileTmpB nomTR
FileTmpB nomTV
FileTmpB nomTB
FileTmpB nomTr
FileTmpB nomTI
#20111020110657____: set nomTI=`echo "$nomTI" | $SE -e 's+^\(.*/\)[^/]**\(.......\)$+\1\2+'` #
set nomTI=`echo "$nomTI" | $SE -e 's+^\(.*/\)[^/][^/]*\(.......\)$+\1\2+'`
# Creation de noms temporaires (dont un nom bref '$nomTI' afin d'eviter des problemes avec #
# '$LONGUEUR_NOMS' dans '$xci/acces$X'). #
$CA $Fichier3DA \
| $SE -e '/^ *$/d' \
> $nomTA
# Nettoyage du fichier Argument... #
set Npoints3D=`$WC $nomTA`
set Npoints3D=$Npoints3D[$WC1]
# Nombre de points tridimensionnels. Chacun d'entre-eux occupe une ligne du fichier #
# '$Fichier3DA' et aura en general la forme : #
# #
# X=... Y=... Z=... [RAYON=...] [ROUGE=...] [VERTE=...] [BLEUE=...] #
# #
# ou : #
# #
# X0001=... X0002=... X0003=... [RAYON=...] [ROUGE=...] [VERTE=...] [BLEUE=...] #
# #
set Xa_priori=$Xmin
set Ya_priori=$Ymin
set Za_priori=$Zmin
set Ra_priori=$GRIS_8
set Va_priori=$GRIS_8
set Ba_priori=$GRIS_8
set ra_priori=0.05
# Valeurs a priori destinees a faire qu'aucun des fichiers ne soit vide... #
$CA $nomTA \
| $SE -e 's/$/ /' \
> $nomT1
# On ajoute un espace au bout de chaque ligne afin de pouvoir recuperer le dernier champ #
# de chaque ligne grace aux '$SE' qui suivent... #
$CA $nomT1 \
| $EGRE -e "X=|X0001=" \
| $SE -e 's/.*X=\([^ ][^ ]*\) .*$/\1/' \
-e 's/.*X0001=\([^ ][^ ]*\) .*$/\1/' \
> $nomTX
(repeat $Npoints3D eval "echo $Xa_priori") \
>>! $nomTX
$CA $nomT1 \
| $EGRE -e "Y=|X0002" \
| $SE -e 's/.*Y=\([^ ][^ ]*\) .*$/\1/' \
-e 's/.*X0002=\([^ ][^ ]*\) .*$/\1/' \
> $nomTY
(repeat $Npoints3D eval "echo $Ya_priori") \
>>! $nomTY
$CA $nomT1 \
| $EGRE -e "Z=|X0003" \
| $SE -e 's/.*Z=\([^ ][^ ]*\) .*$/\1/' \
-e 's/.*X0003=\([^ ][^ ]*\) .*$/\1/' \
> $nomTZ
(repeat $Npoints3D eval "echo $Za_priori") \
>>! $nomTZ
$CA $nomT1 \
| $GRE "RAYON=" \
| $SE -e 's/.*RAYON=\([^ ][^ ]*\) .*$/\1/' \
> $nomTr
(repeat $Npoints3D eval "echo $ra_priori") \
>>! $nomTr
$CA $nomT1 \
| $GRE "ROUGE=" \
| $SE -e 's/.*ROUGE=\([^ ][^ ]*\) .*$/\1/' \
> $nomTR
(repeat $Npoints3D eval "echo $Ra_priori") \
>>! $nomTR
$CA $nomT1 \
| $GRE "VERTE=" \
| $SE -e 's/.*VERTE=\([^ ][^ ]*\) .*$/\1/' \
> $nomTV
(repeat $Npoints3D eval "echo $Va_priori") \
>>! $nomTV
$CA $nomT1 \
| $GRE "BLEUE=" \
| $SE -e 's/.*BLEUE=\([^ ][^ ]*\) .*$/\1/' \
> $nomTB
(repeat $Npoints3D eval "echo $Ba_priori") \
>>! $nomTB
set Ajustement="$K_VIDE"
# A priori... #
if (($Ajuster == VRAI) && ($Auto == FAUX)) then
set MinimumX=`$xrv/extrema.01$X ne=$Npoints3D fichier=$nomTX |& $GRE "^minimum *=" | $SE -e 's/^.*\([-+].*\)$/\1/'`
set MinimumY=`$xrv/extrema.01$X ne=$Npoints3D fichier=$nomTY |& $GRE "^minimum *=" | $SE -e 's/^.*\([-+].*\)$/\1/'`
set MinimumZ=`$xrv/extrema.01$X ne=$Npoints3D fichier=$nomTZ |& $GRE "^minimum *=" | $SE -e 's/^.*\([-+].*\)$/\1/'`
set MinimumXY=`$xcg/MIN2.01$X nombre_1=$MinimumX nombre_2=$MinimumY`
set MinimumXYZ=`$xcg/MIN2.01$X nombre_1=$MinimumXY nombre_2=$MinimumZ`
set MaximumX=`$xrv/extrema.01$X ne=$Npoints3D fichier=$nomTX |& $GRE "^maximum *=" | $SE -e 's/^.*\([-+].*\)$/\1/'`
set MaximumY=`$xrv/extrema.01$X ne=$Npoints3D fichier=$nomTY |& $GRE "^maximum *=" | $SE -e 's/^.*\([-+].*\)$/\1/'`
set MaximumZ=`$xrv/extrema.01$X ne=$Npoints3D fichier=$nomTZ |& $GRE "^maximum *=" | $SE -e 's/^.*\([-+].*\)$/\1/'`
set MaximumXY=`$xcg/MAX2.01$X nombre_1=$MaximumX nombre_2=$MaximumY`
set MaximumXYZ=`$xcg/MAX2.01$X nombre_1=$MaximumXY nombre_2=$MaximumZ`
set ExtensionX=`$xcg/SOUS.01$X nombre_1=$MaximumX nombre_2=$MinimumX`
set ExtensionX=`$xcg/ABSO.01$X nombre=$ExtensionX`
set ExtensionY=`$xcg/SOUS.01$X nombre_1=$MaximumY nombre_2=$MinimumY`
set ExtensionY=`$xcg/ABSO.01$X nombre=$ExtensionY`
set ExtensionZ=`$xcg/SOUS.01$X nombre_1=$MaximumZ nombre_2=$MinimumZ`
set ExtensionZ=`$xcg/ABSO.01$X nombre=$ExtensionZ`
set ExtensionXY=`$xcg/MAX2.01$X nombre_1=$ExtensionX nombre_2=$ExtensionY`
set ExtensionXYZ=`$xcg/MAX2.01$X nombre_1=$ExtensionXY nombre_2=$ExtensionZ`
set Homothetie=`$xcg/DIVZ.01$X nombre_1=1 nombre_2=$ExtensionXYZ`
set TranslationX=`$xcg/MUL2.01$X nombre_1=-1 nombre_2=$MinimumX`
set TranslationX=`$xcg/MUL2.01$X nombre_1=$Homothetie nombre_2=$TranslationX`
set TranslationY=`$xcg/MUL2.01$X nombre_1=-1 nombre_2=$MinimumY`
set TranslationY=`$xcg/MUL2.01$X nombre_1=$Homothetie nombre_2=$TranslationY`
set TranslationZ=`$xcg/MUL2.01$X nombre_1=-1 nombre_2=$MinimumZ`
set TranslationZ=`$xcg/MUL2.01$X nombre_1=$Homothetie nombre_2=$TranslationZ`
set Ajustement="$Ajustement"" AX=$Homothetie BX=$TranslationX"
set Ajustement="$Ajustement"" AY=$Homothetie BY=$TranslationY"
set Ajustement="$Ajustement"" BZ=$TranslationZ"
# Mise a jour des valeurs d'ajustement des coordonnees. On notera l'absence de "AZ=" afin #
# d'exploiter au mieux la dynamique des 'Z' (on verra a ce propos 'v $xiirv/MAPN.12'). #
else
endif
if (-e $Rotation_OX) then
set SRotation_OX=`$WC $Rotation_OX`
set SRotation_OX=$SRotation_OX[$WC1]
else
set SRotation_OX=1
endif
if (-e $Rotation_OY) then
set SRotation_OY=`$WC $Rotation_OY`
set SRotation_OY=$SRotation_OY[$WC1]
else
set SRotation_OY=1
endif
if (-e $Rotation_OZ) then
set SRotation_OZ=`$WC $Rotation_OZ`
set SRotation_OZ=$SRotation_OZ[$WC1]
else
set SRotation_OZ=1
endif
set Nimages=`$xcg/MAX2.01$X nombre_1=$SRotation_OX nombre_2=$SRotation_OY`
set Nimages=`$xcg/MAX2.01$X nombre_1=$SRotation_OZ nombre_2=$Nimages`
set Nimages=`echo $Nimages | $SE -e "s/^[-+]//"`
# Nombre d'images a generer en supprimant le signe a cause du test 'if(...)' qui suit... #
if ($Nimages == 1) then
set VnomTI=$nomTI$K_sepP
# Lorsqu'une seule image est demandee, on ne vas pas generer de numero d'image. #
else
set VnomTI=$imageR
# Par contre, lorsque plusieurs images sont demandees, il convient de generer des numeros... #
endif
$xrv/particule.10$X np=$Nimages \
iterations=$Npoints3D \
AX=$Ax BX=$Bx \
AY=$Ay BY=$By \
AZ=$Az BZ=$Bz \
LISTE_X=$nomTX \
LISTE_Y=$nomTY \
LISTE_Z=$nomTZ \
LISTE_ROUGE=$nomTR \
LISTE_VERTE=$nomTV \
LISTE_BLEUE=$nomTB \
LISTE_RAYON=$nomTr \
ajuster=$Auto $Ajustement \
rayon_correct_ZOOM=$RayonCorrectZ \
rayon_correct_une_seule_fois=$RayonCorrect1 \
ZOOM=$Zoom \
ROTATION_OX=$Rotation_OX \
ROTATION_OY=$Rotation_OY \
ROTATION_OZ=$Rotation_OZ \
TRANSLATION_OX=$Translation_OX \
TRANSLATION_OY=$Translation_OY \
TRANSLATION_OZ=$Translation_OZ \
isoles=$Isoles points=$NPoints grossissement=$Grossissement \
Lz=1000 \
brume=$Brume \
Zminimum=$Zminimum ZminimumT=$ZminimumT \
Zmaximum=$Zmaximum ZmaximumT=$ZmaximumT \
N_AU_CARRE=$NCarre \
editer_extrema_hors=FAUX \
R=$VnomTI \
$formatI \
|& $SE -f $xrv/supATTENTION$sed
# Le 20111020110657 l'option "N2=VRAI" a ete remplacee par "N_AU_CARRE=$NCarre" qui permet #
# avec 'FAUX' d'aller plus vite... #
# #
# Le 20111020121352 fut introduit le "editer_extrema_hors=FAUX"... #
if ($Nimages == 1) then
set Premiere=1
#20091105190248____: set Premiere="$K_sepP""`$xci/nombres$X premiere=$Premiere derniere=$Premiere`" #
set Premiere_1="`$xci/nombres$X premiere=$Premiere derniere=$Premiere`"
set Premiere="$K_sepP""$Premiere_1"
unset Premiere_1
# Pour la modification du 20091105190248 : 'v $Falias_GetXTmp 20091105172200'... #
$xci/acces$X A=$nomTI$Premiere$ROUGE R=$imageR$ROUGE \
$formatI
$xci/acces$X A=$nomTI$Premiere$VERTE R=$imageR$VERTE \
$formatI
$xci/acces$X A=$nomTI$Premiere$BLEUE R=$imageR$BLEUE \
$formatI
($DELETE $nomTI*) >& $nul
else
endif
FileTmpE nomTA
FileTmpE nomT1
FileTmpE nomTX
FileTmpE nomTY
FileTmpE nomTZ
FileTmpE nomTR
FileTmpE nomTV
FileTmpE nomTB
FileTmpE nomTr
FileTmpE nomTI $NEXIST
# Nettoyage a posteriori... #
else
EROR "Le fichier '$Fichier3DA' des points tridimensionnels n'existe pas."
endif