/*************************************************************************************************************************************/ /* */ /* D I S P E R S I O N D ' U N E I M A G E F L O T T A N T E : */ /* */ /* */ /* Author of '$xci/disperse.01$K' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 1997??????????). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 #include image_image_ALEATOIRES_1_EXT /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P A R A M E T R E S : */ /* */ /*************************************************************************************************************************************/ #define INITIALISER_imageR_avec_imageA \ FAUX \ /* Indique s'il faut initialiser 'imageR' avec 'imageA' ('VRAI') ou bien mettre a 'NOIR' */ \ /* 'imageR' ('FAUX'). */ #define GRAINE \ DEUX \ /* Graine du generateur aleatoire. */ #define NOMBRE_DE_POINTS_DU_NUAGE \ EXP2(DOUP(TROIS)) \ /* Nombre de points du nuage a generer. */ #define DISPERSION_INFERIEURE_DES_X \ NEGA(DEUX) #define DISPERSION_SUPERIEURE_DES_X \ NEUT(DEUX) /* Definition de la dispersion des coordonees 'X'. */ #define DISPERSION_INFERIEURE_DES_Y \ NEGA(DEUX) #define DISPERSION_SUPERIEURE_DES_Y \ NEUT(DEUX) /* Definition de la dispersion des coordonees 'Y'. */ #define DISPERSION_INFERIEURE_DES_NIVEAUX \ FLOT(NEGA(SEIZE)) #define DISPERSION_SUPERIEURE_DES_NIVEAUX \ FLOT(NEUT(SEIZE)) /* Definition de la dispersion des niveaux. */ #define PRENDRE_LE_MAXIMUM \ FAUX \ /* Indique s'il faut prendre le maximum entre la valeur courante et la valeur anterieure */ \ /* ('VRAI') ou proceder a un cumul arithmetique ('FAUX'). */ #define UTILISER_LE_MODE_BACK \ FAUX \ /* Indique s'il faut utiliser le mode {begin_image,end_image} ('FAUX') ou bien le mode */ \ /* {begin_image_back,end_image_back} ('VRAI'). Ceci a ete introduit le 20170402100844 afin */ \ /* de tester 'PROGRESSION_DES_BEGIN_END' dans le cas {begin_image_back,end_image_back}... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M A C R O S U T I L E S : */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D I S P E R S I O N D ' U N E I M A G E F L O T T A N T E : */ /* */ /*************************************************************************************************************************************/ BCommande(nombre_d_arguments,arguments) /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageA),NOM_PIPE)); DEFV(Logical,INIT(initialiser_imageR_avec_imageA,INITIALISER_imageR_avec_imageA)); /* Indique s'il faut initialiser 'imageR' avec 'imageA' ('VRAI') ou bien mettre a 'NOIR' */ /* 'imageR' ('FAUX'). */ DEFV(Int,INIT(graine,GRAINE)); /* Graine du generateur aleatoire. */ DEFV(Int,INIT(nombre_de_points_du_nuage,NOMBRE_DE_POINTS_DU_NUAGE)); /* Nombre de points du nuage a generer. */ DEFV(Int,INIT(dispersion_inferieure_des_X,DISPERSION_INFERIEURE_DES_X)); DEFV(Int,INIT(dispersion_superieure_des_X,DISPERSION_SUPERIEURE_DES_X)); /* Definition de la dispersion des coordonees 'X'. */ DEFV(Int,INIT(dispersion_inferieure_des_Y,DISPERSION_INFERIEURE_DES_Y)); DEFV(Int,INIT(dispersion_superieure_des_Y,DISPERSION_SUPERIEURE_DES_Y)); /* Definition de la dispersion des coordonees 'Y'. */ DEFV(Float,INIT(dispersion_inferieure_des_niveaux,DISPERSION_INFERIEURE_DES_NIVEAUX)); DEFV(Float,INIT(dispersion_superieure_des_niveaux,DISPERSION_SUPERIEURE_DES_NIVEAUX)); /* Definition de la dispersion des niveaux. */ /* */ /* Le 20100423100708 la dispersion des niveaux est passee de 'Int' a 'Float' plus logique */ /* puisque les images sont de type 'imageF'... */ DEFV(Logical,INIT(prendre_le_maximum,PRENDRE_LE_MAXIMUM)); /* Indique s'il faut prendre le maximum entre la valeur courante et la valeur anterieure */ /* ('VRAI') ou proceder a un cumul arithmetique ('FAUX'). */ DEFV(Logical,INIT(utiliser_le_mode_back,UTILISER_LE_MODE_BACK)); /* Indique s'il faut utiliser le mode {begin_image,end_image} ('FAUX') ou bien le mode */ /* {begin_image_back,end_image_back} ('VRAI'). Ceci a ete introduit le 20170402100844 afin */ /* de tester 'PROGRESSION_DES_BEGIN_END' dans le cas {begin_image_back,end_image_back}... */ /*..............................................................................................................................*/ GET_ARGUMENTSi(nombre_d_arguments ,BLOC(GET_ARGUMENT_C("imageA=""A=",nom_imageA); GET_ARGUMENT_C("imageR=""R=",nom_imageR); GET_ARGUMENT_L("initialiser=",initialiser_imageR_avec_imageA); GET_ARGUMENT_I("graine=",graine); GET_ARGUMENT_L("affiner_rdn=",rdnIFnD_____affiner_la_generation); GET_ARGUMENT_L("iterer_rdn=",rdnIFnD_____iterer_la_generation); GET_ARGUMENT_I("points=",nombre_de_points_du_nuage); GET_ARGUMENT_I("dix=""diX=",dispersion_inferieure_des_X); GET_ARGUMENT_I("dsx=""dsX=",dispersion_superieure_des_X); GET_ARGUMENT_I("diy=""diY=",dispersion_inferieure_des_Y); GET_ARGUMENT_I("dsy=""dsY=",dispersion_superieure_des_Y); GET_ARGUMENT_F("din=""diN=",dispersion_inferieure_des_niveaux); GET_ARGUMENT_F("dsn=""dsN=",dispersion_superieure_des_niveaux); GET_ARGUMENT_L("maximum=",prendre_le_maximum); GET_ARGUMENT_L("mode_back=""back=",utiliser_le_mode_back); /* Arguments introduits le 20170402100844... */ ) ); Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image(IFmageA,nom_imageA)))) Bblock Test(IL_FAUT(initialiser_imageR_avec_imageA)) Bblock CALi(IFmove(IFmageR,IFmageA)); /* Initialisation de l'image Resultat avec l'image Argument. */ Eblock ATes Bblock CALi(IFinitialisation(IFmageR,FZERO)); /* Initialisation de l'image Resultat a 'NOIR'. */ Eblock ETes Test(IL_NE_FAUT_PAS(utiliser_le_mode_back)) Bblock CALS(IFdispersion_aleatoire(IFmageR,IFmageA ,graine ,nombre_de_points_du_nuage ,dispersion_inferieure_des_X,dispersion_superieure_des_X ,dispersion_inferieure_des_Y,dispersion_superieure_des_Y ,dispersion_inferieure_des_niveaux,dispersion_superieure_des_niveaux ,prendre_le_maximum ) ); /* Et dispersion... */ Eblock ATes Bblock CALS(IFdispersion_aleatoire_back(IFmageR,IFmageA ,graine ,nombre_de_points_du_nuage ,dispersion_inferieure_des_X,dispersion_superieure_des_X ,dispersion_inferieure_des_Y,dispersion_superieure_des_Y ,dispersion_inferieure_des_niveaux,dispersion_superieure_des_niveaux ,prendre_le_maximum ) ); /* Et dispersion en mode "back" (introduite le 20170402100844...). */ Eblock ETes CALi(IupdateF_image(nom_imageR,IFmageR)); Eblock ATes Bblock Test__CODE_ERREUR__ERREUR07; Eblock ETes RETU_Commande; Eblock ECommande