/*************************************************************************************************************************************/ /* */ /* M E L A N G E T R I D I M E N S I O N N E L D E D E U X I M A G E S : */ /* */ /* */ /* Definition : */ /* */ /* Cette commande genere une image */ /* dont le nom est le premier argument */ /* d'appel ; elle est le resultat de */ /* la combinaison tridimensionnelle des */ /* deux images Arguments. */ /* */ /* */ /* Author of '$xci/merge_3D.01$K' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 1994??????????). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P A R A M E T R E S : */ /* */ /*************************************************************************************************************************************/ #define FACTEUR_MULTIPLICATIF_DE_Z_BufferA1 \ FU #define TRANSLATION_DE_Z_BufferA1 \ FZERO /* De facon a pouvoir faire un 'a.Z1+b'. */ #define FACTEUR_MULTIPLICATIF_DE_Z_BufferA2 \ FU #define TRANSLATION_DE_Z_BufferA2 \ FZERO /* De facon a pouvoir faire un 'a.Z2+b'. */ #define MEMORISER_LE_Z_BUFFER \ VRAI \ /* Afin de savoir s'il faut memoriser le 'Z-Bufer' resultant ('VRAI') ou pas ('FAUX'). */ #define MARQUEUR_A1 \ NOIR #define MARQUEUR_A2 \ BLANC /* Marqueurs dans l'image 'MR'. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M A C R O S U T I L E S : */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M E L A N G E T R I D I M E N S I O N N E L D E D E U X I M A G E S : */ /* */ /*************************************************************************************************************************************/ BCommande(nombre_d_arguments,arguments) /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageMR),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_Z_BufferR),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageA1),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_Z_BufferA1),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageA2),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_Z_BufferA2),NOM_PIPE)); DEFV(Float,INIT(facteur_multiplicatif_de_Z_BufferA1,FACTEUR_MULTIPLICATIF_DE_Z_BufferA1)); DEFV(Float,INIT(translation_de_Z_BufferA1,TRANSLATION_DE_Z_BufferA1)); /* De facon a pouvoir faire un 'a.Z1+b'. */ DEFV(Float,INIT(facteur_multiplicatif_de_Z_BufferA2,FACTEUR_MULTIPLICATIF_DE_Z_BufferA2)); DEFV(Float,INIT(translation_de_Z_BufferA2,TRANSLATION_DE_Z_BufferA2)); /* De facon a pouvoir faire un 'a.Z2+b'. */ DEFV(Logical,INIT(memoriser_le_Z_Buffer,MEMORISER_LE_Z_BUFFER)); /* Afin de savoir s'il faut memoriser le 'Z-Bufer' resultant ('VRAI') ou pas ('FAUX'). */ DEFV(genere_p,INIT(marqueurA1,MARQUEUR_A1)); DEFV(genere_p,INIT(marqueurA2,MARQUEUR_A2)); /* Marqueurs dans l'image 'MR'. */ /*..............................................................................................................................*/ GET_ARGUMENTSi(nombre_d_arguments ,BLOC(GET_ARGUMENT_C("imageA1=""A1=",nom_imageA1); GET_ARGUMENT_C("Z_BufferA1=""ZA1=",nom_Z_BufferA1); GET_ARGUMENT_C("imageA2=""A2=",nom_imageA2); GET_ARGUMENT_C("Z_BufferA2=""ZA2=",nom_Z_BufferA2); GET_ARGUMENT_C("imageR=""R=",nom_imageR); GET_ARGUMENT_C("imageMR=""MR=",nom_imageMR); GET_ARGUMENT_C("Z_BufferR=""ZR=",nom_Z_BufferR); GET_ARGUMENT_F("a1=",facteur_multiplicatif_de_Z_BufferA1); GET_ARGUMENT_F("b1=",translation_de_Z_BufferA1); GET_ARGUMENT_F("a2=",facteur_multiplicatif_de_Z_BufferA2); GET_ARGUMENT_F("b2=",translation_de_Z_BufferA2); GET_ARGUMENT_L("Z-Buffer=",memoriser_le_Z_Buffer); GET_ARGUMENT_P("mA1=",marqueurA1); GET_ARGUMENT_P("mA2=",marqueurA2); ) ); CALi(Inoir(ImageR)); CALi(Inoir(ImageG)); /* Initialisation des images Resultat. */ Test(PAS_D_ERREUR(CODE_ERROR(Iload_image(ImageR,nom_imageA1)))) Bblock /* Chargement de la premiere image Argument, */ Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image(Z_Buffer,nom_Z_BufferA1)))) Bblock /* Et de son 'Z-Buffer'. */ Test(PAS_D_ERREUR(CODE_ERROR(Iload_image(ImageA,nom_imageA2)))) Bblock /* Chargement de la deuxieme image Argument, */ Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image(IFmageA,nom_Z_BufferA2)))) Bblock /* Et de son 'Z-Buffer'. */ Test(IFET(IFEQ(facteur_multiplicatif_de_Z_BufferA1,FU),IFEQ(translation_de_Z_BufferA1,FZERO))) Bblock Eblock ATes Bblock CALS(IFscale(Z_Buffer,facteur_multiplicatif_de_Z_BufferA1,Z_Buffer,translation_de_Z_BufferA1)); /* Si besoin est, on fait un 'a.Z1+b'. */ Eblock ETes Test(IFET(IFEQ(facteur_multiplicatif_de_Z_BufferA2,FU),IFEQ(translation_de_Z_BufferA2,FZERO))) Bblock Eblock ATes Bblock CALS(IFscale(IFmageA,facteur_multiplicatif_de_Z_BufferA2,IFmageA,translation_de_Z_BufferA2)); /* Si besoin est, on fait un 'a.Z2+b'. */ Eblock ETes CALS(ImoveM_3D_volume_avec_marquage(ImageR,ImageG,ImageA,IFmageA,marqueurA1,marqueurA2)); /* Combinaison tridimensionnelle des deux images Arguments avec les conventions */ /* suivantes : */ /* */ /* R = A1 */ /* A = A2 */ /* */ CALi(Iupdate_image(nom_imageR,ImageR)); CALi(Iupdate_image(nom_imageMR,ImageG)); Test(IL_FAUT(memoriser_le_Z_Buffer)) Bblock CALi(IupdateF_image(nom_Z_BufferR,Z_Buffer)); Eblock ATes Bblock Eblock ETes Eblock ATes Bblock Test__CODE_ERREUR__ERREUR07; Eblock ETes Eblock ATes Bblock Test__CODE_ERREUR__ERREUR07; Eblock ETes Eblock ATes Bblock Test__CODE_ERREUR__ERREUR07; Eblock ETes Eblock ATes Bblock Test__CODE_ERREUR__ERREUR07; Eblock ETes RETU_Commande; Eblock ECommande