/*************************************************************************************************************************************/ /* */ /* G E N E R A T I O N D ' U N E I M A G E A P A R T I R D E D E U X */ /* L I S T E S D E C O O R D O N N E E S C A R T E S I E N N E S : */ /* */ /* */ /* Nota : */ /* */ /* Il est possible de chainer les points entre */ /* eux via 'chainer_les_points'. Mais il est aussi */ /* possible de "simuler" ce chainage (mais pas "en etoile") */ /* des points {X,Y,Z} arguments en utilisant au */ /* prealable 'v $xci/interpole.01$K' qui interpole */ /* lineairement entre deux points consecutifs. */ /* */ /* */ /* Note : */ /* */ /* Le 20161114160503, je note qu'une */ /* utilisation "neutre" possible est la */ /* suivante : */ /* */ /* */ /* :Debut_listG_load_image__store_image: */ /* */ /* $Z $xci/valeurs_imag$X \ */ /* $Z denormalisees=VRAI \ */ /* $Z premiere=1 \ */ /* $Z derniere=$tailleI \ */ /* $Z PX=1 \ */ /* $Z PY=0 \ */ /* $Z >& $xTV/COORDONNEES$COORD_X */ /* $Z $xci/valeurs_imag$X \ */ /* $Z denormalisees=VRAI \ */ /* $Z premiere=1 \ */ /* $Z derniere=$tailleI \ */ /* $Z PX=0 \ */ /* $Z PY=1 \ */ /* $Z >& $xTV/COORDONNEES$COORD_Y */ /* $Z */ /* $Z $xrv/load_image$X \ */ /* $Z A=$xTV/IMAGE.1 \ */ /* $Z LISTE_X=$xTV/COORDONNEES$COORD_X \ */ /* $Z LISTE_Y=$xTV/COORDONNEES$COORD_Y \ */ /* $Z >& $xTV/COORDONNEES$LUMIN */ /* $Z $xrv/store_image$X \ */ /* $Z ne=0 \ */ /* $Z LISTE_X=$xTV/COORDONNEES$COORD_X \ */ /* $Z LISTE_Y=$xTV/COORDONNEES$COORD_Y \ */ /* $Z LISTE_NIVEAU=$xTV/COORDONNEES$LUMIN \ */ /* $Z R=$xTV/IMAGE.2 \ */ /* $Z Ndenormalises=VRAI \ */ /* $Z Xdenormalisees=VRAI \ */ /* $Z Ydenormalisees=VRAI */ /* */ /* :Fin_listG_load_image__store_image: */ /* */ /* */ /* A la fin de ce processus, les deux images */ /* '$xTV/IMAGE.1/ et '$xTV/IMAGE.2' doivent */ /* evidemment etre identiques... */ /* */ /* */ /* Author of '$xrv/store_image$K' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 20051207151403). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N T E R F A C E ' listG ' : */ /* */ /* */ /* :Debut_listG: */ /* :Fin_listG: */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D I R E C T I V E S S P E C I F I Q U E S D E C O M P I L A T I O N : */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* F I C H I E R S D ' I N C L U D E S : */ /* */ /*************************************************************************************************************************************/ #include INCLUDES_BASE #include image_image_IMAGESF_EXT /* Introduit le 20121110112405... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* V A L E U R S I M P L I C I T E S D E S P A R A M E T R E S : */ /* */ /*************************************************************************************************************************************/ #define LES_COORDONNEES_X_SONT_NORMALISEES \ VRAI #define LES_COORDONNEES_Y_SONT_NORMALISEES \ VRAI #define LES_NIVEAUX_______SONT_NORMALISES_ \ VRAI /* Introduit le 20140430152305 pour eviter des problemes d'arrondis lors des operations */ /* de denormalisation... */ #define FACTEUR_DES_COORDONNEES_X \ FU #define TRANSLATION_DENORMALISEE_DES_COORDONNEES_X \ ZERO #define FACTEUR_DES_COORDONNEES_Y \ FU #define TRANSLATION_DENORMALISEE_DES_COORDONNEES_Y \ ZERO #define FACTEUR_DES_NIVEAUX______ \ FU #define TRANSLATION___NORMALISEE_DES_NIVEAUX______ \ ZERO /* Introduit le 20210309160941 pour, par exemple, visualiser des noyaux de convolution... */ /* */ /* Par exemple, avec 'v $xci/nettete.01$X', on pourra faire : */ /* */ /* $xrv/VisualisationNoyauConvolution.11$Z $xci/nettete.01$X */ /* */ /* ce qui donne une image centree du noyau de convolution par defaut... */ #define CUMULER_LES_NIVEAUX \ FAUX #define PONDERATION_CUMULER_LES_NIVEAUX_ADD2 \ FU #define PONDERATION_CUMULER_LES_NIVEAUX_MAX2 \ FZERO /* Introduit le 20131119160651 afin de permettre de choisir entre ranger les niveaux avec */ /* "ecrasement" ('FAUX') ou bien les cumuler ('VRAI') ? Les ponderations de choix de la */ /* methode de cumul ont ete introduites le 20190116141516 et les valeurs par defaut */ /* garantissent la compatibilite anterieure... */ #define DISPERSER_LES_NIVEAUX_AUX_quatre_COINS_DES_CARRES_ELEMENTAIRES \ FAUX #define ECRASER_LES_NIVEAUX_ANTERIEURS \ FAUX /* Introduit le 20140101151916 afin de permettre la dispersion "interpole" de chaque niveau */ \ /* aux quatre coins des carres elementaires... */ #define FAIRE_UN_EPAISSISSEMENT_CIRCULAIRE \ FAUX \ /* Introduit le 20120517082358 afin de permettre de choisir entre un epaississement carre */ \ /* ('FAUX') et un epaississement circulaire ('VRAI'). */ #define DEMI_PAVE_X \ ZERO #define DEMI_PAVE_Y \ ZERO /* Introduit le 20120430094519 afin de pouvoir epaissir les points, mais surtout par */ /* "symetrie" avec 'v $xrv/store_album$K 20120429165655'... */ #define DEMI_PAVE_XG \ ZERO #define DEMI_PAVE_YG \ ZERO #define DEMI_PAVE_XD \ ZERO #define DEMI_PAVE_YD \ ZERO /* Introduit le 20120430094519 afin de generaliser le processus d'epaississement symetrique */ /* precedent, sans perdre la compatibilite avec lui... */ #define FAIRE_DES_PAVES_HOMOTHETIQUES \ FAUX \ /* Introduit le 20170322095152 pour permettre de faire des paves "homothetiques", */ \ /* c'est-a-dire des paves dont la taille est fonction de '$formatI'... */ #define TESTER_LES_HORS_BORNES_NATURELLES \ FAUX \ /* Introduit le 20111113113031 pour ne pas tester les "hors bornes naturelles"... */ \ /* */ \ /* La valeur par defaut est passee de 'VRAI' a 'FAUX' le 20120417134325, depuis que */ \ /* 'SUPER_cDENORMALISE_O(...)' ont ete introduits car, en effet, ces procedures peuvent */ \ /* generer des valeurs hors bornes naturelles... */ #define EDITER_LE_MESSAGE_DES_HORS_BORNES_NATURELLES \ VRAI \ /* Introduit le 20120124075103 pour gerer le message des "hors bornes naturelles"... */ #define TRACER_L__HORIZONTALE_DE_CHAQUE_POINT \ FAUX #define TRACER_LA_VERTICALE___DE_CHAQUE_POINT \ FAUX /* Introduit le 20160323083049 afin de pouvoir materialiser l'horizontale et la verticale */ /* de chaque point... */ #define CHAINER_LES_POINTS \ FAUX #define CHAINER_LES_POINTS_EN_ETOILE \ FAUX /* Introduit le 20120124075908 pour permettre le chainage des points entre-eux et complete */ /* le 20120129101749 afin de permettre le chainage en etoile (par rapport au premier point). */ #define UTILISER_LE_MODE_HISTOGRAMME \ FAUX #define UTILISER_LE_MODE_HISTOGRAMME_HORIZONTAL \ FAUX #define Xmin_HISTOGRAMME_HORIZONTAL \ Xmin #define UTILISER_LE_MODE_HISTOGRAMME_VERTICAL \ VRAI #define Ymin_HISTOGRAMME_VERTICAL \ Ymin /* Introduit le 20131201094231 et utile si 'IL_NE_FAUT_PAS(chainer_les_points)' : cela */ /* permet de materialiser chaque point par un segment vertical et/ou horizontal... */ /* */ /* Cela fut complete par {Xmin,Ymin} le 20210826103359... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N D E S F I C H I E R S : */ /* */ /*************************************************************************************************************************************/ #include xrv/ARITHMET.1d.I" /* Passage a l'allocation dynamique le 20060214193405... */ #include xrv/ARITHMET.21.I" #include xrv/champs_5.41.I" #define X_IMPLICITE \ FZERO #define Y_IMPLICITE \ FZERO #define Z_IMPLICITE \ FZERO gGENERATION_D_UN_FICHIER(fichier_LISTE_X,liste_initiale_des_X); gGENERATION_D_UN_FICHIER(fichier_LISTE_Y,liste_initiale_des_Y); gGENERATION_D_UN_FICHIER(fichier_LISTE_Z,liste_initiale_des_Z); /* Definition en memoire des fichiers de coordonnees cartesiennes. Le fichier des */ /* coordonnees 'Z' a ete introduit le 20060208161951... */ #define ELEMENT_DU_FICHIER_LISTE_X(index) \ gELEMENT_DU_FICHIER(liste_initiale_des_X,index) #define ELEMENT_DU_FICHIER_LISTE_Y(index) \ gELEMENT_DU_FICHIER(liste_initiale_des_Y,index) #define ELEMENT_DU_FICHIER_LISTE_Z(index) \ gELEMENT_DU_FICHIER(liste_initiale_des_Z,index) /* Acces a un element courant des fichiers de coordonnees cartesiennes. */ #define NIVEAU_IMPLICITE \ FU gGENERATION_D_UN_FICHIER(fichier_LISTE_NIVEAU,liste_initiale_des_NIVEAU); /* Definition en memoire du fichier des niveaux... */ #define ELEMENT_DU_FICHIER_LISTE_NIVEAU(index) \ gELEMENT_DU_FICHIER(liste_initiale_des_NIVEAU,index) /* Acces a un element courant du fichier des niveaux... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N D E L ' E P A I S S I S S E M E N T : */ /* */ /*************************************************************************************************************************************/ #define DEMI_PAVE_X_IMPLICITE \ FLOT(DEMI_PAVE_X) #define DEMI_PAVE_Y_IMPLICITE \ FLOT(DEMI_PAVE_Y) gGENERATION_D_UN_FICHIER(fichier_LISTE_DEMI_PAVE_X,liste_initiale_des_DEMI_PAVE_X); gGENERATION_D_UN_FICHIER(fichier_LISTE_DEMI_PAVE_Y,liste_initiale_des_DEMI_PAVE_Y); /* Definition en memoire des fichiers des "demi-paves" (introduits le 20160428093732). */ #define ELEMENT_DU_FICHIER_DEMI_PAVE_X(index) \ INTE(gELEMENT_DU_FICHIER(liste_initiale_des_DEMI_PAVE_X,index)) #define ELEMENT_DU_FICHIER_DEMI_PAVE_Y(index) \ INTE(gELEMENT_DU_FICHIER(liste_initiale_des_DEMI_PAVE_Y,index)) /* Acces a un element courant des fichiers des "demi-paves" (introduits le 20160428093732). */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* G E N E R A T I O N D ' U N E I M A G E A P A R T I R D E D E U X */ /* L I S T E S D E C O O R D O N N E E S C A R T E S I E N N E S : */ /* */ /*************************************************************************************************************************************/ BCommande(nombre_d_arguments,arguments) /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock #include xrv/ARITHMET.22.I" #include xci/valeurs.03.I" DEFV(CHAR,INIT(POINTERc(nom_imageA),NOM_PIPE_Local)); /* Nom de l'eventuelle image Argument (de fond) introduit le 20181008143042... */ DEFV(CHAR,INIT(POINTERc(nom_imageR),NOM_PIPE_Local)); /* Nom de l'image a generer... */ DEFV(Positive,INIT(dimension_de_l_espace,BI_DIMENSIONNEL)); /* Dimension de l'espace des coordonnees ({X.Y} par defaut...). */ DEFV(Logical,INIT(les_coordonnees_X_sont_normalisees,LES_COORDONNEES_X_SONT_NORMALISEES)); DEFV(Logical,INIT(les_coordonnees_Y_sont_normalisees,LES_COORDONNEES_Y_SONT_NORMALISEES)); DEFV(Logical,INIT(les_niveaux_______sont_normalises_,LES_NIVEAUX_______SONT_NORMALISES_)); /* Introduit le 20140430152305 pour eviter des problemes d'arrondis lors des operations */ /* de denormalisation... */ DEFV(Float,INIT(facteur_des_coordonnees_X,FACTEUR_DES_COORDONNEES_X)); DEFV(Int,INIT(translation_denormalisee_des_coordonnees_X,TRANSLATION_DENORMALISEE_DES_COORDONNEES_X)); DEFV(Float,INIT(facteur_des_coordonnees_Y,FACTEUR_DES_COORDONNEES_Y)); DEFV(Int,INIT(translation_denormalisee_des_coordonnees_Y,TRANSLATION_DENORMALISEE_DES_COORDONNEES_Y)); DEFV(Float,INIT(facteur_des_niveaux______,FACTEUR_DES_NIVEAUX______)); DEFV(Float,INIT(translation___normalisee_des_niveaux______,TRANSLATION___NORMALISEE_DES_NIVEAUX______)); /* Introduit le 20210309160941 pour, par exemple, visualiser des noyaux de convolution... */ DEFV(Logical,INIT(cumuler_les_niveaux,CUMULER_LES_NIVEAUX)); DEFV(Float,INIT(ponderation_cumuler_les_niveaux_ADD2,PONDERATION_CUMULER_LES_NIVEAUX_ADD2)); DEFV(Float,INIT(ponderation_cumuler_les_niveaux_MAX2,PONDERATION_CUMULER_LES_NIVEAUX_MAX2)); /* Introduit le 20131119160651 afin de permettre de choisir entre ranger les niveaux avec */ /* "ecrasement" ('FAUX') ou bien les cumuler ('VRAI') ? Les ponderations de choix de la */ /* methode de cumul ont ete introduites le 20190116141516 et les valeurs par defaut */ /* garantissent la compatibilite anterieure... */ DEFV(Logical,INIT(disperser_les_niveaux_aux_quatre_coins_des_carres_elementaires ,DISPERSER_LES_NIVEAUX_AUX_quatre_COINS_DES_CARRES_ELEMENTAIRES ) ); DEFV(Logical,INIT(ecraser_les_niveaux_anterieurs,ECRASER_LES_NIVEAUX_ANTERIEURS)); /* Introduit le 20140101151916 afin de permettre la dispersion "interpole" de chaque niveau */ /* aux quatre coins des carres elementaires... */ DEFV(Logical,INIT(faire_un_epaississement_circulaire,FAIRE_UN_EPAISSISSEMENT_CIRCULAIRE)); /* Introduit le 20120517082358 afin de permettre de choisir entre un epaississement carre */ /* ('FAUX') et un epaississement circulaire ('VRAI'). */ DEFV(Int,INIT(demi_pave_XG,DEMI_PAVE_XG)); DEFV(Int,INIT(demi_pave_YG,DEMI_PAVE_YG)); DEFV(Int,INIT(demi_pave_XD,DEMI_PAVE_XD)); DEFV(Int,INIT(demi_pave_YD,DEMI_PAVE_YD)); /* Introduit le 20120430184507 afin de generaliser le processus d'epaississement symetrique */ /* precedent, sans perdre la compatibilite avec lui... */ DEFV(Logical,INIT(faire_des_paves_homothetiques,FAIRE_DES_PAVES_HOMOTHETIQUES)); /* Introduit le 20170322095152 pour permettre de faire des paves "homothetiques", */ /* c'est-a-dire des paves dont la taille est fonction de '$formatI'... */ DEFV(Logical,INIT(tester_les_hors_bornes_naturelles,TESTER_LES_HORS_BORNES_NATURELLES)); /* Introduit le 20111113112752 pour ne pas tester les "hors bornes naturelles"... */ /* */ /* La valeur par defaut est passee de 'VRAI' a 'FAUX' le 20120417134325, depuis que */ /* 'SUPER_cDENORMALISE_O(...)' ont ete introduits car, en effet, ces procedures peuvent */ /* generer des valeurs hors bornes naturelles... */ DEFV(Logical,INIT(editer_le_message_des_hors_bornes_naturelles,EDITER_LE_MESSAGE_DES_HORS_BORNES_NATURELLES)); /* Introduit le 20120124075103 pour gerer le message des "hors bornes naturelles"... */ DEFV(Logical,INIT(tracer_l__horizontale_de_chaque_point,TRACER_L__HORIZONTALE_DE_CHAQUE_POINT)); DEFV(Logical,INIT(tracer_la_verticale___de_chaque_point,TRACER_LA_VERTICALE___DE_CHAQUE_POINT)); /* Introduit le 20160323083049 afin de pouvoir materialiser l'horizontale et la verticale */ /* de chaque point... */ DEFV(Logical,INIT(chainer_les_points,CHAINER_LES_POINTS)); DEFV(Logical,INIT(chainer_les_points_en_etoile,CHAINER_LES_POINTS_EN_ETOILE)); /* Introduit le 20120124075908 pour permettre le chainage des points entre-eux et complete */ /* le 20120129101749 afin de permettre le chainage en etoile (par rapport au premier point). */ DEFV(Logical,INIT(utiliser_le_mode_histogramme,UTILISER_LE_MODE_HISTOGRAMME)); DEFV(Logical,INIT(utiliser_le_mode_histogramme_horizontal,UTILISER_LE_MODE_HISTOGRAMME_HORIZONTAL)); DEFV(Int,INIT(Xmin_histogramme_horizontal,Xmin_HISTOGRAMME_HORIZONTAL)); DEFV(Logical,INIT(utiliser_le_mode_histogramme_vertical,UTILISER_LE_MODE_HISTOGRAMME_VERTICAL)); DEFV(Int,INIT(Ymin_histogramme_vertical,Ymin_HISTOGRAMME_VERTICAL)); /* Introduit le 20131201094231 et utile si 'IL_NE_FAUT_PAS(chainer_les_points)' : cela */ /* permet de materialiser chaque point par un segment vertical et/ou horizontal... */ /* */ /* Cela fut complete par {Xmin,Ymin} le 20210826103359... */ /*..............................................................................................................................*/ GET_ARGUMENTSi(nombre_d_arguments ,BLOC(PROCESS_ARGUMENT_I("nombre_elements=""ne=",nombre_d_elements ,BLOC(VIDE;) ,BLOC(Bblock PRINT_AVERTISSEMENT("'ne=' doit etre defini avant toute entree de fichiers"); Eblock ) ); PROCESS_ARGUMENTS_DE_DEFINITION_DES_FICHIERS_01; PROKESF_ARGUMENT_FICHIER("LISTE_X=" ,fichier_LISTE_X ,liste_initiale_des_X ,X_IMPLICITE ,lTRANSFORMAT_0d ,iGENERATION_D_UN_FICHIER ); PROKESF_ARGUMENT_FICHIER("LISTE_Y=" ,fichier_LISTE_Y ,liste_initiale_des_Y ,Y_IMPLICITE ,lTRANSFORMAT_0d ,iGENERATION_D_UN_FICHIER ); PROKESF_ARGUMENT_C("LISTE_Z=",fichier_LISTE_Z ,BLOC(VIDE;) ,BLOC(VIDE;) ,BLOC( Bblock lTRANSFORMAT_0d(fichier_LISTE_Z ,liste_initiale_des_Z ,Z_IMPLICITE ); EGAL(dimension_de_l_espace,TRI_DIMENSIONNEL); /* Lorsque le fichier 'LISTE_Z', on force le mode {X,Y,Z} (introduit le 20060208161951...). */ Eblock ) ,BLOC(iGENERATION_D_UN_FICHIER(liste_initiale_des_Z,Z_IMPLICITE);) ); PROKESF_ARGUMENT_FICHIER("LISTE_NIVEAU=" ,fichier_LISTE_NIVEAU ,liste_initiale_des_NIVEAU ,NIVEAU_IMPLICITE ,lTRANSFORMAT_0d ,iGENERATION_D_UN_FICHIER ); PROKESF_ARGUMENT_FICHIER("LISTE_DEMI_PAVE_X=""demi_pave_X=""dpX=" ,fichier_LISTE_DEMI_PAVE_X ,liste_initiale_des_DEMI_PAVE_X ,DEMI_PAVE_X_IMPLICITE ,lTRANSFORMAT_0d ,iGENERATION_D_UN_FICHIER ); PROKESF_ARGUMENT_FICHIER("LISTE_DEMI_PAVE_Y=""demi_pave_Y=""dpY=" ,fichier_LISTE_DEMI_PAVE_Y ,liste_initiale_des_DEMI_PAVE_Y ,DEMI_PAVE_Y_IMPLICITE ,lTRANSFORMAT_0d ,iGENERATION_D_UN_FICHIER ); GET_ARGUMENT_I("premier=",premier_element_d_un_fichier); GET_ARGUMENT_I("pas=",pas_de_parcours_d_un_fichier); /* Parametres introduits le 20211004113151... */ GET_ARGUMENT_C("imageA=""A=""F=""fond=",nom_imageA); /* Arguments introduits le 20181008143042... */ GET_ARGUMENT_C("imageR=""R=",nom_imageR); GET_ARGUMENT_L("standard=",les_images_sont_standards); /* Argument introduit le 20121110112352... */ GET_ARGUMENT_P("niveau_du_fond=""noir=",Inoir_____NOIR); /* Argument introduit le 20210819133729 pour 'v $xiirv/.BOLT.11.1.$U', mais en fait non */ /* utilise puisque redondant avec "imageA=""A=""F=""fond="... */ GET_ARGUMENT_L("cumuler_niveaux=""cumuler=""cumul=",cumuler_les_niveaux); GET_ARGUMENT_F("cumuler_ADD2=""ADD2=",ponderation_cumuler_les_niveaux_ADD2); GET_ARGUMENT_F("cumuler_MAX2=""MAX2=",ponderation_cumuler_les_niveaux_MAX2); /* Argument introduit le 20131119160651 et complete le 20190116141516 par les ponderations. */ GET_ARGUMENT_L("Xnormalisees=""Xnorm=""Xn=",les_coordonnees_X_sont_normalisees); GET_ARGUMENT_N("Xdenormalisees=""Xdenorm=""Xdn=",les_coordonnees_X_sont_normalisees); GET_ARGUMENT_L("Ynormalisees=""Ynorm=""Yn=",les_coordonnees_Y_sont_normalisees); GET_ARGUMENT_N("Ydenormalisees=""Ydenorm=""Ydn=",les_coordonnees_Y_sont_normalisees); GET_ARGUMENT_L("Nnormalises=""Nnorm=""Nn=",les_niveaux_______sont_normalises_); GET_ARGUMENT_N("Ndenormalises=""Ndenorm=""Ndn=",les_niveaux_______sont_normalises_); /* Argument introduit le 20140430152305... */ GET_ARGUMENT_F("facteur_X=""fX=",facteur_des_coordonnees_X); GET_ARGUMENT_I("translation_X=""tX=",translation_denormalisee_des_coordonnees_X); GET_ARGUMENT_F("facteur_Y=""fY=",facteur_des_coordonnees_Y); GET_ARGUMENT_I("translation_Y=""tY=",translation_denormalisee_des_coordonnees_Y); GET_ARGUMENT_F("facteur_niveaux=""fn=",facteur_des_niveaux______); GET_ARGUMENT_F("translation_niveaux=""tn=",translation___normalisee_des_niveaux______); /* Arguments introduits le 20210309160941... */ GET_ARGUMENT_L("disperser=",disperser_les_niveaux_aux_quatre_coins_des_carres_elementaires); GET_ARGUMENT_N("concentrer=",disperser_les_niveaux_aux_quatre_coins_des_carres_elementaires); GET_ARGUMENT_L("ecraser_niveaux=""ecraser=",ecraser_les_niveaux_anterieurs); /* Arguments introduits le 20140101151916... */ GET_ARGUMENT_L("epaississement_circulaire=""ecirculaire=""circulaire=",faire_un_epaississement_circulaire); GET_ARGUMENT_N("epaississement_carre=""ecarre=",faire_un_epaississement_circulaire); /* Arguments introduits le 20120517082358. On notera l'absence de "carre=" a cause de */ /* 'v $xig/fonct$vv$DEF carre='... */ GET_ARGUMENT_I("demi_pave_XG=""dpXG=",demi_pave_XG); GET_ARGUMENT_I("demi_pave_YG=""dpYG=",demi_pave_YG); GET_ARGUMENT_I("demi_pave_XD=""dpXD=",demi_pave_XD); GET_ARGUMENT_I("demi_pave_YD=""dpYD=",demi_pave_YD); /* Arguments introduits le 20120430184507... */ GET_ARGUMENT_L("paves_homothetiques=""ph=",faire_des_paves_homothetiques); /* Arguments introduits le 20170322095152... */ GET_ARGUMENT_L("tester_hors_bornes_naturelles=""hors_bornes_naturelles=""hbn=" ,tester_les_hors_bornes_naturelles ); /* Arguments introduits le 20111113113031... */ GET_ARGUMENT_L("editer_hors_bornes_naturelles=""ehbn=" ,editer_le_message_des_hors_bornes_naturelles ); /* Arguments introduits le 20120124075103... */ GET_ARGUMENT_L("horizontale=""ho=",tracer_l__horizontale_de_chaque_point); GET_ARGUMENT_L("verticale=""ve=",tracer_la_verticale___de_chaque_point); /* Arguments introduits le 20160323083049... */ GET_ARGUMENT_L("chainer_points=""cp=",chainer_les_points); GET_ARGUMENT_L("chainer_points_etoile=""cpe=",chainer_les_points_en_etoile); /* Arguments introduits le 20111113113031 et completes le 20120129101749... */ GET_ARGUMENT_L("histogramme=""h=",utiliser_le_mode_histogramme); GET_ARGUMENT_L("histogramme_horizontal=""hh=",utiliser_le_mode_histogramme_horizontal); GET_ARGUMENT_I("Xmin_histogramme_horizontal=""hhXmin=",Xmin_histogramme_horizontal); GET_ARGUMENT_L("histogramme_vertical=""hv=",utiliser_le_mode_histogramme_vertical); GET_ARGUMENT_I("Ymin_histogramme_vertical=""hvYmin=",Ymin_histogramme_vertical); /* Arguments introduits le 20131201094231 et completes par {Xmin,Ymin} le 20210826103359... */ ) ); Test(IFET(EST_FAUX(les_images_sont_standards) ,IL_FAUT(chainer_les_points) ) ) /* Test introduit le 20121110112405... */ Bblock PRINT_ATTENTION("le chainage des points n'est pas possible pour les images non standards"); EGAL(chainer_les_points,FAUX); /* Et le chainage des points est inhibe... */ Eblock ATes Bblock Eblock ETes Test(IFET(EST_FAUX(les_images_sont_standards) ,IL_FAUT(utiliser_le_mode_histogramme) ) ) /* Test introduit le 20131201094231... */ Bblock PRINT_ATTENTION("le mode histogramme n'est pas possible pour les images non standards"); EGAL(utiliser_le_mode_histogramme,FAUX); /* Et le mode histogramme est inhibe... */ Eblock ATes Bblock Eblock ETes Test(IFET(EST_FAUX(les_images_sont_standards) ,IL_FAUT(disperser_les_niveaux_aux_quatre_coins_des_carres_elementaires) ) ) /* Test introduit le 20140101152554... */ Bblock PRINT_ATTENTION("le mode dispersion des niveaux n'est pas possible pour les images non standards"); EGAL(disperser_les_niveaux_aux_quatre_coins_des_carres_elementaires,FAUX); /* Et le mode histogramme est inhibe... */ Eblock ATes Bblock Eblock ETes Test(IFET(IL_FAUT(chainer_les_points) ,IL_FAUT(utiliser_le_mode_histogramme) ) ) /* Test introduit le 20131201094231... */ Bblock PRINT_ATTENTION("le mode histogramme est incompatible avec le chainage des points"); EGAL(utiliser_le_mode_histogramme,FAUX); /* Et le mode histogramme est inhibe... */ Eblock ATes Bblock Eblock ETes Test(IFET(IL_FAUT(disperser_les_niveaux_aux_quatre_coins_des_carres_elementaires) ,IL_FAUT(utiliser_le_mode_histogramme) ) ) /* Test introduit le 20140101152554... */ Bblock PRINT_ATTENTION("le mode dispersion des niveaux est incompatible avec le chainage des points"); EGAL(disperser_les_niveaux_aux_quatre_coins_des_carres_elementaires,FAUX); /* Et le mode dispersion des niveaux est inhibe... */ Eblock ATes Bblock Eblock ETes Test(IFET(IL_FAUT(utiliser_le_mode_histogramme) ,IFET(IL_NE_FAUT_PAS(utiliser_le_mode_histogramme_horizontal) ,IL_NE_FAUT_PAS(utiliser_le_mode_histogramme_vertical) ) ) ) /* Test introduit le 20131201094231... */ Bblock PRINT_ATTENTION("le mode histogramme n'est ni horizontal, ni vertical"); EGAL(utiliser_le_mode_histogramme,FAUX); /* Et le mode histogramme est inhibe... */ Eblock ATes Bblock Eblock ETes Test(IFET(IL_FAUT(cumuler_les_niveaux) ,IFNE(dimension_de_l_espace,BI_DIMENSIONNEL) ) ) /* Test introduit le 20131119160651... */ Bblock PRINT_ATTENTION("le cumul des niveaux n'est possible qu'en mode bidimensionnel"); EGAL(cumuler_les_niveaux,FAUX); /* Et le cumul des niveaux est inhibe... */ Eblock ATes Bblock Eblock ETes begin_nouveau_block Bblock DEFV(Logical,INIT(initialiser_le_fond,VRAI)); /* La valeur par defaut assure la compatibilite anterieure (introduit le 123456789). */ DEFV(Logical,INIT(c_est_le_premier_point,VRAI)); /* Utile uniquement dans le cas du chainage... */ Test(IFNE_chaine(nom_imageA,NOM_PIPE_Local)) Bblock Test(PAS_D_ERREUR(CODE_ERROR(gIload_image(les_images_sont_standards,ImageG,IFmageR,nom_imageA)))) Bblock /* Chargement de l'image Argument, un eventuel fond (ceci fut introduit le 20181008143042). */ EGAL(initialiser_le_fond,FAUX); /* Lorsque cela s'est bien passe, le fond n'est evidemment pas a initialiser... */ Eblock ATes Bblock Test__CODE_ERREUR__ERREUR07; Eblock ETes Eblock ATes Bblock Eblock ETes Test(IL_FAUT(initialiser_le_fond)) Bblock Test(EST_VRAI(les_images_sont_standards)) Bblock CALi(FgERASE()); /* Initialisation de l'image Resultat (ATTENTION : il s'agit de 'ImageG'...). */ Eblock ATes Bblock CALi(IFinitialisation(IFmageR,FZERO)); /* Initialisation de l'image Resultat. */ Eblock ETes Eblock ATes Bblock Eblock ETes DoIn(index ,premier_element_d_un_fichier ,DERNIER_ELEMENT_D_UN_FICHIER ,pas_de_parcours_d_un_fichier ) /* Le 20211004113151 {premier_element_d_un_fichier,pas_de_parcours_d_un_fichier} ont ete */ /* introduits... */ Bblock DEFV(Float,INIT(coordonnee_X_normalisee,ELEMENT_DU_FICHIER_LISTE_X(index))); DEFV(Float,INIT(coordonnee_Y_normalisee,ELEMENT_DU_FICHIER_LISTE_Y(index))); DEFV(Float,INIT(coordonnee_Z_normalisee,ELEMENT_DU_FICHIER_LISTE_Z(index))); /* Recuperation des coordonnees normalisees {X,Y[,Z]} courantes dans les fichiers. */ DEFV(Int,INIT(coordonnee_X_denormalisee,UNDEF)); DEFV(Int,INIT(coordonnee_Y_denormalisee,UNDEF)); DEFV(Float,INIT(coordonnee_X_denormalisee_precise,FLOT__UNDEF)); DEFV(Float,INIT(coordonnee_Y_denormalisee_precise,FLOT__UNDEF)); /* Mis avant 'Test(IL_NE_FAUT_PAS(chainer_les_points))' le 20210312095035 afin de pouvoir */ /* beneficier des facteurs et translations des coordonnees... */ DEFV(Float,INIT(niveau_courant_normalise,ELEMENT_DU_FICHIER_LISTE_NIVEAU(index))); /* On notera qu'il s'agit d'un 'Float' et non pas d'un 'genere_Float' car, en effet, c'est */ /* un element d'un fichier 'Float' et non pas un point 'genere_Float'... */ DEFV(genere_p,INIT(niveau_courant_denormalise,NIVEAU_UNDEF)); DEFV(Int,INIT(demi_pave_XG_effectif ,GRANDEURS_HOMOTHETIQUES_OX(MAX2(ELEMENT_DU_FICHIER_DEMI_PAVE_X(index),demi_pave_XG) ,faire_des_paves_homothetiques ,INTE ) ) ); DEFV(Int,INIT(demi_pave_YG_effectif ,GRANDEURS_HOMOTHETIQUES_OY(MAX2(ELEMENT_DU_FICHIER_DEMI_PAVE_Y(index),demi_pave_YG) ,faire_des_paves_homothetiques ,INTE ) ) ); DEFV(Int,INIT(demi_pave_XD_effectif ,GRANDEURS_HOMOTHETIQUES_OX(MAX2(ELEMENT_DU_FICHIER_DEMI_PAVE_X(index),demi_pave_XD) ,faire_des_paves_homothetiques ,INTE ) ) ); DEFV(Int,INIT(demi_pave_YD_effectif ,GRANDEURS_HOMOTHETIQUES_OY(MAX2(ELEMENT_DU_FICHIER_DEMI_PAVE_Y(index),demi_pave_YD) ,faire_des_paves_homothetiques ,INTE ) ) ); DEFV(Float,INIT(demi_diametre_du_pave,FLOT__UNDEF)); EGAL(demi_diametre_du_pave ,MIN2(FLOT(MIN2(demi_pave_XG_effectif,demi_pave_XD_effectif)) ,FLOT(MIN2(demi_pave_YG_effectif,demi_pave_YD_effectif)) ) ); /* Demi-diametre du pave calcule a priori... */ Test(EST_VRAI(les_niveaux_______sont_normalises_)) /* Test introduit le 20140430152305... */ Bblock EGAL(niveau_courant_normalise ,AXPB(facteur_des_niveaux______ ,niveau_courant_normalise ,translation___normalisee_des_niveaux______ ) ); /* Introduit le 20210309160941... */ EGAL(niveau_courant_denormalise,__DENORMALISE_NIVEAU(niveau_courant_normalise)); /* Recuperation du niveau normalise et denormalise du point courant {X,Y} dans le fichier. */ Eblock ATes Bblock EGAL(niveau_courant_denormalise,GENP(niveau_courant_normalise)); /* Les niveaux sont supposes deja denormalises (introduit le 20140430152305). */ Eblock ETes Test(EST_VRAI(les_coordonnees_X_sont_normalisees)) /* Test introduit le 20140430152305... */ Bblock EGAL(coordonnee_X_denormalisee_precise,F__cDENORMALISE_OX(SUPER_ECHELLE_OX(coordonnee_X_normalisee))); /* Coordonnees denormalisees precises introduites pour 'store_point_continu_lineaire(...)' */ /* et 'storeF_point_continu_lineaire(...)' le 20140101151916... */ EGAL(coordonnee_X_denormalisee,SUPER_cDENORMALISE_OX(coordonnee_X_normalisee)); /* Recuperation des coordonnees denormalisees {X,Y[,Z]} courantes dans les fichiers. */ /* */ /* Le 20120417134325, '_cDENORMALISE_O?(...)' a ete remplace par 'SUPER_cDENORMALISE_O(...)' */ /* afin de permettre de conserver, si besoin est, les proportions... */ Eblock ATes Bblock EGAL(coordonnee_X_denormalisee_precise,coordonnee_X_normalisee); EGAL(coordonnee_X_denormalisee,coordonnee_X_normalisee); /* Les coordonnees 'X' sont supposees deja denormalisees (introduit le 20140430152305). */ Eblock ETes EGAL(coordonnee_X_denormalisee_precise ,COXA(AXPB(facteur_des_coordonnees_X ,COXR(coordonnee_X_denormalisee_precise) ,FLOT(translation_denormalisee_des_coordonnees_X) ) ) ); EGAL(coordonnee_X_denormalisee ,COXA(INTE(AXPB(facteur_des_coordonnees_X ,COXR(coordonnee_X_denormalisee) ,translation_denormalisee_des_coordonnees_X ) ) ) ); /* Introduit le 20210309160941 et mis avant 'Test(IL_NE_FAUT_PAS(chainer_les_points)) */ /* le 20210312095035... */ Test(EST_VRAI(les_coordonnees_Y_sont_normalisees)) /* Test introduit le 20140430152305... */ Bblock EGAL(coordonnee_Y_denormalisee_precise,F__cDENORMALISE_OY(SUPER_ECHELLE_OY(coordonnee_Y_normalisee))); /* Coordonnees denormalisees precises introduites pour 'store_point_continu_lineaire(...)' */ /* et 'storeF_point_continu_lineaire(...)' le 20140101151916... */ EGAL(coordonnee_Y_denormalisee,SUPER_cDENORMALISE_OY(coordonnee_Y_normalisee)); /* Recuperation des coordonnees denormalisees {X,Y[,Z]} courantes dans les fichiers. */ /* */ /* Le 20120417134325, '_cDENORMALISE_O?(...)' a ete remplace par 'SUPER_cDENORMALISE_O(...)' */ /* afin de permettre de conserver, si besoin est, les proportions... */ Eblock ATes Bblock EGAL(coordonnee_Y_denormalisee_precise,coordonnee_Y_normalisee); EGAL(coordonnee_Y_denormalisee,coordonnee_Y_normalisee); /* Les coordonnees 'Y' sont supposees deja denormalisees (introduit le 20140430152305). */ Eblock ETes EGAL(coordonnee_Y_denormalisee_precise ,COYA(AXPB(facteur_des_coordonnees_Y ,COYR(coordonnee_Y_denormalisee_precise) ,FLOT(translation_denormalisee_des_coordonnees_Y) ) ) ); EGAL(coordonnee_Y_denormalisee ,COYA(INTE(AXPB(facteur_des_coordonnees_Y ,COYR(coordonnee_Y_denormalisee) ,translation_denormalisee_des_coordonnees_Y ) ) ) ); /* Introduit le 20210309160941 et mis avant 'Test(IL_NE_FAUT_PAS(chainer_les_points)) */ /* le 20210312095035... */ Test(IL_NE_FAUT_PAS(chainer_les_points)) /* Test introduit le 20120124075908... */ Bblock Test(IFOU(IL_NE_FAUT_PAS(tester_les_hors_bornes_naturelles) ,IFET(IL_FAUT(tester_les_hors_bornes_naturelles) ,IFET(TEST_DANS_L_IMAGE(coordonnee_X_denormalisee,coordonnee_Y_denormalisee) ,IFOU(IFET(EST_VRAI(les_niveaux_______sont_normalises_) ,IFINff(niveau_courant_normalise ,______________NOIR_NORMALISE ,______________BLANC_NORMALISE ) ) ,IFET(EST_FAUX(les_niveaux_______sont_normalises_) ,IFINff(niveau_courant_normalise ,FLOT__NOIR ,FLOT__BLANC ) ) ) ) ) ) ) Bblock Test(IFET(IL_NE_FAUT_PAS(tracer_l__horizontale_de_chaque_point) ,IL_NE_FAUT_PAS(tracer_la_verticale___de_chaque_point) ) ) /* Test introduit le 20160323083049... */ Bblock begin_imageQ(DoIn ,COYA(SOUS(COYR(coordonnee_Y_denormalisee),demi_pave_YG_effectif)) ,COYA(ADD2(COYR(coordonnee_Y_denormalisee),demi_pave_YD_effectif)) ,PasY ,DoIn ,COXA(SOUS(COXR(coordonnee_X_denormalisee),demi_pave_XG_effectif)) ,COXA(ADD2(COXR(coordonnee_X_denormalisee),demi_pave_XD_effectif)) ,PasX ) /* Introduit le 20120429165655 afin de pouvoir epaissir les points, mais surtout par */ /* "symetrie" avec 'v $xrv/store_album$K 20120429165655', puis generalise de facon */ /* potentiellement dissymetrique le 20120430184507... */ Bblock DEFV(Logical,INIT(ranger_le_niveau,VRAI)); /* A priori, le niveau sera range systematiquement (indicateur introduit le 20120517083306). */ Test(IL_FAUT(faire_un_epaississement_circulaire)) /* Test introduit le 20120517083306... */ Bblock DEFV(Float,INIT(distance_au_centre_du_pave ,RdisF2D(FLOT(coordonnee_X_denormalisee) ,FLOT(coordonnee_Y_denormalisee) ,FLOT(X) ,FLOT(Y) ) ) ); /* Distance au centre du pave... */ Test(IFLE(distance_au_centre_du_pave,demi_diametre_du_pave)) Bblock EGAL(ranger_le_niveau,VRAI); Eblock ATes Bblock EGAL(ranger_le_niveau,FAUX); Eblock ETes Eblock ATes Bblock Eblock ETes Test(IL_FAUT(ranger_le_niveau)) /* Test introduit le 20120517083306... */ Bblock Test(EST_VRAI(les_images_sont_standards)) /* Test introduit le 20121110112405... */ Bblock DEFV(genere_p,INIT(niveau_courant_denormalise_effectif,niveau_courant_denormalise)); Test(IL_FAUT(cumuler_les_niveaux)) /* Test introduit le 20131119160651... */ Bblock DEFV(genere_p,INIT(niveau_anterieur_denormalise,load_point_valide(ImageG,X,Y))); /* On notera le 'load_point_valide(...)' car, en effet, les coordonnees {X,Y} peuvent tres */ /* bien etre en dehors de [Xmin,Xmax]x[Ymin,Ymax]... */ EGAL(niveau_courant_denormalise_effectif ,GENP(NIVA(LIZ2(ponderation_cumuler_les_niveaux_ADD2 ,FLOT(ADD2(NIVR(niveau_anterieur_denormalise) ,NIVR(niveau_courant_denormalise_effectif) ) ) ,ponderation_cumuler_les_niveaux_MAX2 ,FLOT(MAX2(NIVR(niveau_anterieur_denormalise) ,NIVR(niveau_courant_denormalise_effectif) ) ) ) ) ) ); /* On notera au passage qu'il peut y avoir ici un debordement, mais que faire d'autre que */ /* de l'accepter... */ Eblock ATes Bblock Eblock ETes Test(IL_NE_FAUT_PAS(utiliser_le_mode_histogramme)) /* Test introduit le 20131201094231... */ Bblock Test(IL_FAUT(disperser_les_niveaux_aux_quatre_coins_des_carres_elementaires)) Bblock store_point_continu_lineaire(niveau_courant_denormalise ,ImageG ,ADD2(coordonnee_X_denormalisee_precise ,FLOT(SOUS(X,Xmin_begin_ligneQ)) ) ,ADD2(coordonnee_Y_denormalisee_precise ,FLOT(SOUS(Y,Ymin_begin_colonneQ)) ) ,ecraser_les_niveaux_anterieurs ); /* Possibilite introduite le 20140101152554... */ Eblock ATes Bblock store_point_ND(niveau_courant_denormalise_effectif ,ImageG ,X ,Y ,coordonnee_Z_normalisee ,dimension_de_l_espace ); /* Rangement du point courant {X,Y[,Z]}... */ Eblock ETes Eblock ATes Bblock DEFV(Int,INIT(X_point_courant,X)); DEFV(Int,INIT(Y_point_courant,Y)); /* Memorisation du point courant {X,Y[,Z]}... */ Test(IL_FAUT(utiliser_le_mode_histogramme_horizontal)) /* Test introduit le 20131201094231... */ Bblock begin_ligneQ(DoIn,Xmin_histogramme_horizontal,X_point_courant,pasX) Bblock store_point_ND(niveau_courant_denormalise_effectif ,ImageG ,X ,Y_point_courant ,coordonnee_Z_normalisee ,dimension_de_l_espace ); Eblock end_ligneQ(EDoI) Eblock ATes Bblock Eblock ETes Test(IL_FAUT(utiliser_le_mode_histogramme_vertical)) /* Test introduit le 20131201094231... */ Bblock begin_colonneQ(DoIn,Ymin_histogramme_vertical,Y_point_courant,pasY) Bblock store_point_ND(niveau_courant_denormalise_effectif ,ImageG ,X_point_courant ,Y ,coordonnee_Z_normalisee ,dimension_de_l_espace ); Eblock end_colonneQ(EDoI) Eblock ATes Bblock Eblock ETes Eblock ETes Eblock ATes Bblock DEFV(genere_Float,INIT(niveau_courant_normalise_effectif,niveau_courant_normalise)); Test(IL_FAUT(cumuler_les_niveaux)) /* Test introduit le 20131119160651... */ Bblock DEFV(genere_Float,INIT(niveau_anterieur_normalise,loadF_point_valide(IFmageR,X,Y))); EGAL(niveau_courant_normalise_effectif ,LIZ2(ponderation_cumuler_les_niveaux_ADD2 ,ADD2(niveau_anterieur_normalise,niveau_courant_normalise_effectif) ,ponderation_cumuler_les_niveaux_MAX2 ,MAX2(niveau_anterieur_normalise,niveau_courant_normalise_effectif) ) ); /* On notera le 'loadF_point_valide(...)' car, en effet, les coordonnees {X,Y} peuvent tres */ /* bien etre en dehors de [Xmin,Xmax]x[Ymin,Ymax]... */ Eblock ATes Bblock Eblock ETes storeF_point_ND(niveau_courant_normalise_effectif ,IFmageR ,X ,Y ,coordonnee_Z_normalisee ,dimension_de_l_espace ); /* Rangement du point courant {X,Y[,Z]}... */ Eblock ETes Eblock ATes Bblock Eblock ETes Eblock end_imageQ(EDoI,EDoI) Eblock ATes Bblock Test(IL_FAUT(tracer_l__horizontale_de_chaque_point)) /* Test introduit le 20160323083049... */ Bblock begin_ligne Bblock store_point_ND(niveau_courant_denormalise ,ImageG ,X ,coordonnee_Y_denormalisee ,coordonnee_Z_normalisee ,dimension_de_l_espace ); Eblock end_ligne Eblock ATes Bblock Eblock ETes Test(IL_FAUT(tracer_la_verticale___de_chaque_point)) /* Test introduit le 20160323083049... */ Bblock begin_colonne Bblock store_point_ND(niveau_courant_denormalise ,ImageG ,coordonnee_X_denormalisee ,Y ,coordonnee_Z_normalisee ,dimension_de_l_espace ); Eblock end_colonne Eblock ATes Bblock Eblock ETes Eblock ETes Eblock ATes Bblock Test(IL_FAUT(editer_le_message_des_hors_bornes_naturelles)) /* Test introduit le 20120124075103... */ Bblock PRINT_ERREUR("l'une au moins des trois valeurs associees a un point est hors de ses bornes naturelles"); CAL1(Prer4("(point d'index %d : X=%+.^^^ Y=%+.^^^ niveau=%+.^^^ -ces trois valeurs sont normalisees-)\n" ,index ,coordonnee_X_normalisee ,coordonnee_Y_normalisee ,niveau_courant_normalise ) ); /* Le 20060105161653, le format "16g" est passe a "^^g" pour plus de souplesse... */ /* */ /* Le 20091123123620, le format "^^g" est passe a "^^^" pour plus de souplesse... */ Eblock ATes Bblock Eblock ETes Eblock ETes Eblock ATes Bblock SET_COULEURS(NOIR,niveau_courant_denormalise); SET_CURSOR(_____cNORMALISE_OX(coordonnee_X_denormalisee_precise) ,_____cNORMALISE_OY(coordonnee_Y_denormalisee_precise) ,coordonnee_Z_normalisee ); /* Depuis le 20210312100549 ce sont les coordonnees denormalisees qui sont referencees */ /* "en premier" afin de beneficier des facteurs et translations sur 'X' et 'Y'... */ Test(EST_VRAI(c_est_le_premier_point)) Bblock gA; EGAL(c_est_le_premier_point,FAUX); Eblock ATes Bblock Test(IL_NE_FAUT_PAS(chainer_les_points_en_etoile)) Bblock gB; /* Chainage automatique des points... */ Eblock ATes Bblock gS; /* Chainage automatique des points en etoile (introduit le 20120129101749). */ Eblock ETes Eblock ETes Eblock ETes Eblock EDoI CALi(gIupdate_image(les_images_sont_standards,nom_imageR,ImageG,IFmageR)); Eblock end_nouveau_block lGENERATION_D_UN_FICHIER(liste_initiale_des_DEMI_PAVE_Y,DEMI_PAVE_Y_IMPLICITE); lGENERATION_D_UN_FICHIER(liste_initiale_des_DEMI_PAVE_X,DEMI_PAVE_X_IMPLICITE); lGENERATION_D_UN_FICHIER(liste_initiale_des_NIVEAU,NIVEAU_IMPLICITE); lGENERATION_D_UN_FICHIER(liste_initiale_des_Z,Z_IMPLICITE); lGENERATION_D_UN_FICHIER(liste_initiale_des_Y,Y_IMPLICITE); lGENERATION_D_UN_FICHIER(liste_initiale_des_X,X_IMPLICITE); RETU_Commande; Eblock ECommande