/*************************************************************************************************************************************/ /* */ /* R O T A T I O N D ' U N P R O J E C T O R B I D I M E N S I O N N E L : */ /* */ /* */ /* Author of '$xrs/RotProj2D.11$K' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 20060602141119). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 : */ /* */ /*************************************************************************************************************************************/ @define PRAGMA_CPP_____MODULE_NON_DERIVABLE /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* F I C H I E R S D ' I N C L U D E S : */ /* */ /*************************************************************************************************************************************/ #include INCLUDES_BASE /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 UTILISER_LE_MODE_RVB \ VRAI \ /* Faut-il utiliser le mode 'RVB' ('VRAI') ou bien le mode 'XYZ' ('FAUX') ? Ceci fut */ \ /* introduit le 20060604103305... */ #define FAIRE_UNE_ROTATION_TRIDIMENSIONNELLE \ VRAI \ /* Faut-il faire une rotation tridimensionnelle ('VRAI') ou bien une transformation */ \ /* arbitraire ('FAUX') ce qui ouvre la porte a des 'IFS' tridimensionnelles... */ #define RAPPORT_DE_ZOOM \ ABSENCE_D_EFFET_DE_ZOOM \ /* Rapport de zoom (introduit le 20060603095115). */ #define ROTATION_OX_IMPLICITE \ FZERO #define ROTATION_OY_IMPLICITE \ FZERO #define ROTATION_OZ_IMPLICITE \ FZERO /* Angles de rotation. */ #define TRANSLATION_OX_IMPLICITE \ FZERO #define TRANSLATION_OY_IMPLICITE \ FZERO #define TRANSLATION_OZ_IMPLICITE \ FZERO /* Translation de l'origine. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M A C R O S U T I L E S : */ /* */ /*************************************************************************************************************************************/ #include xci/luminance.01.I" /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* R O T A T I O N D ' U N P R O J E C T O R B I D I M E N S I O N N E L : */ /* */ /*************************************************************************************************************************************/ BCommande(nombre_d_arguments,arguments) /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(CHAR,INIC(POINTERc(nom_imageA),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageAFx),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageAFy),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageAFz),NOM_PIPE)); /* Projections Arguments. */ DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageRFx),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageRFy),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageRFz),NOM_PIPE)); /* Projections Resultats. */ DEFV(Logical,INIT(utiliser_le_mode_RVB,UTILISER_LE_MODE_RVB)); /* Faut-il utiliser le mode 'RVB' ('VRAI') ou bien le mode 'XYZ' ('FAUX') ? Ceci fut */ /* introduit le 20060604103305... */ DEFV(Logical,INIT(faire_une_rotation_tridimensionnelle,FAIRE_UNE_ROTATION_TRIDIMENSIONNELLE)); /* Faut-il faire une rotation tridimensionnelle ('VRAI') ou bien une transformation */ /* arbitraire ('FAUX') ce qui ouvre la porte a des 'IFS' tridimensionnelles... */ DEFV(Float,INIT(rapport_DE_ZOOM,RAPPORT_DE_ZOOM)); /* Rapport de zoom (introduit le 20060603095115). */ DEFV(Float,INIT(angle_de_ROTATION_OX,ROTATION_OX_IMPLICITE)); DEFV(Float,INIT(angle_de_ROTATION_OY,ROTATION_OY_IMPLICITE)); DEFV(Float,INIT(angle_de_ROTATION_OZ,ROTATION_OZ_IMPLICITE)); /* Angles de rotation. */ DEFV(Float,INIT(translation_OX,TRANSLATION_OX_IMPLICITE)); DEFV(Float,INIT(translation_OY,TRANSLATION_OY_IMPLICITE)); DEFV(Float,INIT(translation_OZ,TRANSLATION_OZ_IMPLICITE)); /* Translation de l'origine. */ /*..............................................................................................................................*/ INITIALISATION_TRANSFORMATION; /* Mise en place de la transformation neutre... */ GET_ARGUMENTSi(nombre_d_arguments ,BLOC( GET_ARGUMENT_C("imageA=""A=",nom_imageA); GET_ARGUMENT_C("imageAFx=""AFx=",nom_imageAFx); GET_ARGUMENT_C("imageAFy=""AFy=",nom_imageAFy); GET_ARGUMENT_C("imageAFz=""AFz=",nom_imageAFz); GET_ARGUMENT_C("imageR=""R=",nom_imageR); GET_ARGUMENT_C("imageRFx=""RFx=",nom_imageRFx); GET_ARGUMENT_C("imageRFy=""RFy=",nom_imageRFy); GET_ARGUMENT_C("imageRFz=""RFz=",nom_imageRFz); GET_ARGUMENT_L("RVB=",utiliser_le_mode_RVB); GET_ARGUMENT_N("XYZ=",utiliser_le_mode_RVB); GET_ARGUMENT_L("rotation=",faire_une_rotation_tridimensionnelle); GET_ARGUMENT_N("transformation_quelconque=""tq=",faire_une_rotation_tridimensionnelle); GET_ARGUMENT_F("ZOOM=",rapport_DE_ZOOM); PROCESS_ARGUMENT_F("ROTATION_OX=",angle_de_ROTATION_OX ,BLOC(VIDE;) ,BLOC(EGAL(vecteurs_____ordre_de_la_ROTATION_0X,nombre_d_arguments_recuperes); ) ); PROCESS_ARGUMENT_F("ROTATION_OY=",angle_de_ROTATION_OY ,BLOC(VIDE;) ,BLOC(EGAL(vecteurs_____ordre_de_la_ROTATION_0Y,nombre_d_arguments_recuperes); ) ); PROCESS_ARGUMENT_F("ROTATION_OZ=",angle_de_ROTATION_OZ ,BLOC(VIDE;) ,BLOC(EGAL(vecteurs_____ordre_de_la_ROTATION_0Z,nombre_d_arguments_recuperes); ) ); GET_ARGUMENT_F("a11=",ASD2(vecteurs_____matrix_3D,cx,cx)); GET_ARGUMENT_F("a12=",ASD2(vecteurs_____matrix_3D,cx,cy)); GET_ARGUMENT_F("a13=",ASD2(vecteurs_____matrix_3D,cx,cz)); GET_ARGUMENT_F("a21=",ASD2(vecteurs_____matrix_3D,cy,cx)); GET_ARGUMENT_F("a22=",ASD2(vecteurs_____matrix_3D,cy,cy)); GET_ARGUMENT_F("a23=",ASD2(vecteurs_____matrix_3D,cy,cz)); GET_ARGUMENT_F("a31=",ASD2(vecteurs_____matrix_3D,cz,cx)); GET_ARGUMENT_F("a32=",ASD2(vecteurs_____matrix_3D,cz,cy)); GET_ARGUMENT_F("a33=",ASD2(vecteurs_____matrix_3D,cz,cz)); GET_ARGUMENT_F("tX=""TRANSLATION_OX=",translation_OX); GET_ARGUMENT_F("tY=""TRANSLATION_OY=",translation_OY); GET_ARGUMENT_F("tZ=""TRANSLATION_OZ=",translation_OZ); ) ); begin_nouveau_block Bblock BDEFV(imageF,Image_AFx); BDEFV(imageF,Image_AFy); BDEFV(imageF,Image_AFz); /* Definition des trois projections Arguments. */ BDEFV(imageF,Image_RFx); BDEFV(imageF,Image_RFy); BDEFV(imageF,Image_RFz); /* Definition des trois projections Resultats. */ GENERER_LE_NOM_DE_TROIS_COMPOSANTES_CHROMATIQUES_RVB_XYZ(nom_imageA ,nom_imageAFx,nom_imageAFy,nom_imageAFz ,utiliser_le_mode_RVB ); GENERER_LE_NOM_DE_TROIS_COMPOSANTES_CHROMATIQUES_RVB_XYZ(nom_imageR ,nom_imageRFx,nom_imageRFy,nom_imageRFz ,utiliser_le_mode_RVB ); /* Introduit sous cette forme le 20060603184034... */ Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image(Image_AFx,nom_imageAFx)))) Bblock Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image(Image_AFy,nom_imageAFy)))) Bblock Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image(Image_AFz,nom_imageAFz)))) Bblock Test(IL_FAUT(faire_une_rotation_tridimensionnelle)) Bblock T_ZOOM(rapport_DE_ZOOM); /* Mise en place du zoom (introduit le 20060603095115). */ GENERATION_DE_LA_MATRICE_DE_ROTATION(vecteurs_____ordre_de_la_ROTATION_0X ,T_ROTATION_X(angle_de_ROTATION_OX); ,vecteurs_____ordre_de_la_ROTATION_0Y ,T_ROTATION_Y(angle_de_ROTATION_OY); ,vecteurs_____ordre_de_la_ROTATION_0Z ,T_ROTATION_Z(angle_de_ROTATION_OZ); ); /* Mise en place du produit des trois rotations relatives aux trois axes. */ Eblock ATes Bblock /* Dans le cas ou la transformation est arbitraire, les coefficients de la matrice sont */ /* supposes corrects apres leur entree (totale ou partielle...). */ Eblock ETes begin_image Bblock storeF_point(TRANSFORMATION_GEOMETRIQUE_3D_Fx(loadF_point(Image_AFx,X,Y) ,loadF_point(Image_AFy,X,Y) ,loadF_point(Image_AFz,X,Y) ,translation_OX ) ,Image_RFx ,X ,Y ); storeF_point(TRANSFORMATION_GEOMETRIQUE_3D_Fy(loadF_point(Image_AFx,X,Y) ,loadF_point(Image_AFy,X,Y) ,loadF_point(Image_AFz,X,Y) ,translation_OY ) ,Image_RFy ,X ,Y ); storeF_point(TRANSFORMATION_GEOMETRIQUE_3D_Fz(loadF_point(Image_AFx,X,Y) ,loadF_point(Image_AFy,X,Y) ,loadF_point(Image_AFz,X,Y) ,translation_OZ ) ,Image_RFz ,X ,Y ); /* Rotation des trois projections... */ Eblock end_image CALi(IupdateF_image(nom_imageRFx,Image_RFx)); CALi(IupdateF_image(nom_imageRFy,Image_RFy)); CALi(IupdateF_image(nom_imageRFz,Image_RFz)); /* Rangement des trois projections Resultats. */ 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 EDEFV(imageF,Image_RFz); EDEFV(imageF,Image_RFy); EDEFV(imageF,Image_RFx); /* Definition des trois projections Resultats. */ EDEFV(imageF,Image_AFz); EDEFV(imageF,Image_AFy); EDEFV(imageF,Image_AFx); /* Definition des trois projections Arguments. */ Eblock end_nouveau_block RETU_Commande; Eblock ECommande