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