#!/bin/csh
#######################################################################################################################################
# #
# V I S U A L I S A T I O N D ' U N E S U R F A C E A V E C D E S P A R T I C U L E S : #
# #
# #
# Utilisation : #
# #
# $xrs/SurfParti.01$Z <Gen> <ImageR> [<PerU> [<PerV> [<FacPas> [<Deriv> [<GArg> [<PArg> [<I> [<X> [<Y> [<Z> [<P> [<FR>]]]]]]]]]]]] #
# #
# #
# Author of '$xrs/SurfParti.01$Z' : #
# #
# Jean-Francois Colonna (LACTAMME, 20060413092611). #
# #
#######################################################################################################################################
set Generateur=$1
# On notera le 20060427153922 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 ImageR=$2
set PeriodiserU=$3
set PeriodiserV=$4
# Les periodisations eventuelles de 'u' et 'v' ont ete introduites le 20060417123139... #
set FacteurPas=$5
set Derivees=$6
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 PArguments=($8)
# Ce parametre permet d'introduire une liste quelconque de parametres de la commande #
# '$xrv/particule.10$X' et par exemple : #
# #
# "N_AU_CARRE=FAUX LISTE_RAYON=0.01 ZOOM=1" #
# #
set Inversion=$9
set XInversion=$10
set YInversion=$11
set ZInversion=$12
set PInversion=$13
# La possibilite de faire une inversion geometrique a ete introduite le 20060426102457... #
set ForcerRayonI=$14
# La possibilite de forcer le rayon d'inversion a ete introduite le 20080401141309... #
setArgum PeriodiserU `GetParam $xrv/maillage_u_v$X "periodiser_U"`
# Introduit le 20060426101033... #
setArgum PeriodiserV `GetParam $xrv/maillage_u_v$X "periodiser_V"`
# Introduit le 20060426101033... #
setArgum FacteurPas 10
setArgum Derivees 0
# La valeur nulle par defaut permet de transformer les surfaces en polyhedre... #
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
# Introduit le 20051217182832 afin de permettre de donner le '$xrs' ou pas... #
set GenerateurEffectif=$xrs/$GenerateurEffectif
# Introduit le 20051010140027 afin de permettre de donner le '$X' ou pas... #
if (! -e $GenerateurEffectif) then
set GenerateurEffectif=$GenerateurEffectif$X
else
endif
else
endif
if (-e $GenerateurEffectif) then
FileTmpB imageT
FileTmpB LiStE_P1
set PaS_u=`GetParam $GenerateurEffectif "pu"`
set PaS_v=`GetParam $GenerateurEffectif "pv"`
# Recuperation des pas par defaut en {u,v}. #
set PaS_u=`calcul $FacteurPas*$PaS_u`
set PaS_v=`calcul $FacteurPas*$PaS_v`
# Calcul des pas effectifs en {u,v}. #
$GenerateurEffectif \
pu=$PaS_u pv=$PaS_v \
lister_les_points=VRAI lister_les_points_avant=VRAI lister_u_et_v=VRAI \
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... #
FileTmpE imageT
$CA $LiStE_P1 | \
$SE -e 's/^.* \(U=[^ ]*\) .*$/\1/' \
-e 's/U=//' \
> $LiStE_P1.u
$CA $LiStE_P1 | \
$SE -e 's/^.* \(V=[^ ]*\) .*$/\1/' \
-e 's/V=//' \
> $LiStE_P1.v
# Generation de la liste des coordonnees {u,v}. #
$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}. #
$CA $LiStE_P1 | \
$SE -e 's/^.* \(ROUGE=[^ ]*\) .*$/\1/' \
-e 's/ROUGE=//' \
> $LiStE_P1$ROUGE
$CA $LiStE_P1 | \
$SE -e 's/^.* \(VERTE=[^ ]*\) .*$/\1/' \
-e 's/VERTE=//' \
> $LiStE_P1$VERTE
$CA $LiStE_P1 | \
$SE -e 's/^.* \(BLEUE=[^ ]*\) .*$/\1/' \
-e 's/BLEUE=//' \
> $LiStE_P1$BLEUE
# Generation de la liste des couleurs {R,V,B}. #
$CA $LiStE_P1 | \
$SE -e 's/^.* \(RAYON=[^ ]*\) .*$/\1/' \
-e 's/RAYON=//' \
> $LiStE_P1.r
# Generation de la liste des RAYONs au cas ou (introduit le 20060426101033)... #
FileTmpB LiStE_P2
FileTmpB LiStE_P3
set Parametres_uv="$K_VIDE"
set Parametres_uv="$Parametres_uv"" ne=0"
set Parametres_uv="$Parametres_uv"" fichierU=$LiStE_P1.u"
set Parametres_uv="$Parametres_uv"" fichierV=$LiStE_P1.v"
set Parametres_uv="$Parametres_uv"" periodiser_U=$PeriodiserU"
set Parametres_uv="$Parametres_uv"" periodiser_V=$PeriodiserV"
# Introduit le 20060414090053 pour simplifier la suite... #
set Parametres_uv="$Parametres_uv"" suites_non_monotones=VRAI"
# Introduit le 20091102115701 au cas ou... #
$xrv/maillage_u_v$X \
$Parametres_uv \
fichierS=$LiStE_P1$COORD_X \
> $LiStE_P2$COORD_X
$xrv/maillage_u_v$X \
$Parametres_uv \
fichierS=$LiStE_P1$COORD_Y \
> $LiStE_P2$COORD_Y
$xrv/maillage_u_v$X \
$Parametres_uv \
fichierS=$LiStE_P1$COORD_Z \
> $LiStE_P2$COORD_Z
# Generation de la liste des coordonnees {X,Y,Z} du maillage... #
$xrv/maillage_u_v$X \
$Parametres_uv \
fichierS=$LiStE_P1$ROUGE \
> $LiStE_P3$ROUGE
$xrv/maillage_u_v$X \
$Parametres_uv \
fichierS=$LiStE_P1$VERTE \
> $LiStE_P3$VERTE
$xrv/maillage_u_v$X \
$Parametres_uv \
fichierS=$LiStE_P1$BLEUE \
> $LiStE_P3$BLEUE
# Generation de la liste des couleurs {R,V,B} du maillage... #
$xrv/maillage_u_v$X \
$Parametres_uv \
fichierS=$LiStE_P1.r \
> $LiStE_P2.r
# Generation de la liste des RAYONs du maillage au cas ou (introduit le 20060426101033)... #
if ($Inversion == $NEXIST) then
# La possibilite de faire une inversion geometrique a ete introduite le 20060426102457... #
$xrv/neutre$X \
ne=0 \
fichier=$LiStE_P2$COORD_X \
> $LiStE_P3$COORD_X
$xrv/neutre$X \
ne=0 \
fichier=$LiStE_P2$COORD_Y \
> $LiStE_P3$COORD_Y
$xrv/neutre$X \
ne=0 \
fichier=$LiStE_P2$COORD_Z \
> $LiStE_P3$COORD_Z
set LiStE_RaYoN="$K_VIDE"
# Les RAYONs ne sont pas utilises lorsqu'il n'y a pas inversion... #
else
# La possibilite de faire une inversion geometrique a ete introduite le 20060426102457... #
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_P2$COORD_X"
set Parametres_Inv="$Parametres_Inv"" LISTE_Y=$LiStE_P2$COORD_Y"
set Parametres_Inv="$Parametres_Inv"" LISTE_Z=$LiStE_P2$COORD_Z"
if ("$ForcerRayonI" == "$K_VIDE") then
set Parametres_Inv="$Parametres_Inv"" LISTE_RAYON=$LiStE_P2.r"
else
set Parametres_Inv="$Parametres_Inv"" LISTE_RAYON=$ForcerRayonI"
# Possibilite introduite le 20080401141309... #
endif
$xrv/inversion.01$X \
$Parametres_Inv \
pX=1 pY=0 pZ=0 pRAYON=0 \
> $LiStE_P3$COORD_X
$xrv/inversion.01$X \
$Parametres_Inv \
pX=0 pY=1 pZ=0 pRAYON=0 \
> $LiStE_P3$COORD_Y
$xrv/inversion.01$X \
$Parametres_Inv \
pX=0 pY=0 pZ=1 pRAYON=0 \
> $LiStE_P3$COORD_Z
$xrv/inversion.01$X \
$Parametres_Inv \
pX=0 pY=0 pZ=0 pRAYON=1 \
> $LiStE_P3.r
set LiStE_RaYoN="LISTE_RAYON=$LiStE_P3.r"
# Les RAYONs sont utilises lorsqu'il y a inversion... #
endif
set NPointsX=`$CA $LiStE_P3$COORD_X | $WCl`
set NPointsY=`$CA $LiStE_P3$COORD_Y | $WCl`
set NPointsZ=`$CA $LiStE_P3$COORD_Z | $WCl`
set NPointsXYZ=`$xcg/MAX3.01$X x=$NPointsX y=$NPointsY z=$NPointsZ entier=VRAI`
$xrv/particule.10$X np=1 iterations=$NPointsXYZ \
coordonnees_dans_0_1=VRAI \
AXYZ=1 BXYZ=0 \
zoom_automatique=FAUX \
LISTE_X=$LiStE_P3$COORD_X \
LISTE_Y=$LiStE_P3$COORD_Y \
LISTE_Z=$LiStE_P3$COORD_Z \
LISTE_ROUGE=$LiStE_P3$ROUGE \
LISTE_VERTE=$LiStE_P3$VERTE \
LISTE_BLEUE=$LiStE_P3$BLEUE \
$LiStE_RaYoN \
Lz=1000 \
isoles=FAUX chainer=FAUX \
ajuster_points=VRAI equidistance=VRAI \
cubique=VRAI LISTE_dX=$Derivees LISTE_dY=$Derivees LISTE_dZ=$Derivees \
RVB=VRAI \
extrema_hors=FAUX \
$PArguments \
R=$ImageR \
chiffres=0 \
$formatI
# Et enfin, visualisation de la surface... #
FileTmpE LiStE_P1
FileTmpE LiStE_P2
FileTmpE LiStE_P3
# Nettoyage... #
else
EROR "Le generateur de surface '$Generateur' n'existe pas."
endif