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



Copyright © Jean-François Colonna, 2019-2021.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / Ecole Polytechnique, 2019-2021.