/*************************************************************************************************************************************/ /* */ /* R O T A T I O N D ' U N P R O J E C T O R T R I D I M E N S I O N N E L : */ /* */ /* */ /* Author of '$xrs/RotProj3D.11$K' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 20060602141127). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 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 20060603095209). */ #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. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P A R A M E T R E S : */ /* */ /*************************************************************************************************************************************/ #include xci/sequence.01.I" /* ATTENTION, on definit ainsi le symbole 'DERNIERE_IMAGE' qui ne sert a rien ici, puisque */ /* c'est en effet 'Zmax' qui joue ce role... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M A C R O S U T I L E S : */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* R O T A T I O N D ' U N P R O J E C T O R T R I D I M E N S I O N N E L : */ /* */ /*************************************************************************************************************************************/ BCommande(nombre_d_arguments,arguments) /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(CHAR,INIC(POINTERc(nom_albumAFx),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_postfixeAFx),NOM_UNDEF_VIDE)); DEFV(Int,INIT(premiere_imageAFx,PREMIERE_IMAGE)); DEFV(Int,INIT(pas_des_imagesAFx,PAS_DES_IMAGES)); DEFV(Int,INIT(nombre_de_chiffresAFx,NOMBRE_DE_CHIFFRES)); /* Definition de l'album Argument 'Fx'... */ DEFV(CHAR,INIC(POINTERc(nom_albumAFy),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_postfixeAFy),NOM_UNDEF_VIDE)); DEFV(Int,INIT(premiere_imageAFy,PREMIERE_IMAGE)); DEFV(Int,INIT(pas_des_imagesAFy,PAS_DES_IMAGES)); DEFV(Int,INIT(nombre_de_chiffresAFy,NOMBRE_DE_CHIFFRES)); /* Definition de l'album Argument 'Fy'... */ DEFV(CHAR,INIC(POINTERc(nom_albumAFz),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_postfixeAFz),NOM_UNDEF_VIDE)); DEFV(Int,INIT(premiere_imageAFz,PREMIERE_IMAGE)); DEFV(Int,INIT(pas_des_imagesAFz,PAS_DES_IMAGES)); DEFV(Int,INIT(nombre_de_chiffresAFz,NOMBRE_DE_CHIFFRES)); /* Definition de l'album Argument 'Fz'... */ DEFV(CHAR,INIC(POINTERc(nom_albumRFx),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_postfixeRFx),NOM_UNDEF_VIDE)); DEFV(Int,INIT(premiere_imageRFx,PREMIERE_IMAGE)); DEFV(Int,INIT(pas_des_imagesRFx,PAS_DES_IMAGES)); DEFV(Int,INIT(nombre_de_chiffresRFx,NOMBRE_DE_CHIFFRES)); /* Definition de l'album Resultat 'Fx'... */ DEFV(CHAR,INIC(POINTERc(nom_albumRFy),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_postfixeRFy),NOM_UNDEF_VIDE)); DEFV(Int,INIT(premiere_imageRFy,PREMIERE_IMAGE)); DEFV(Int,INIT(pas_des_imagesRFy,PAS_DES_IMAGES)); DEFV(Int,INIT(nombre_de_chiffresRFy,NOMBRE_DE_CHIFFRES)); /* Definition de l'album Resultat 'Fy'... */ DEFV(CHAR,INIC(POINTERc(nom_albumRFz),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_postfixeRFz),NOM_UNDEF_VIDE)); DEFV(Int,INIT(premiere_imageRFz,PREMIERE_IMAGE)); DEFV(Int,INIT(pas_des_imagesRFz,PAS_DES_IMAGES)); DEFV(Int,INIT(nombre_de_chiffresRFz,NOMBRE_DE_CHIFFRES)); /* Definition de l'album Resultat 'Fz'... */ 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 20060603095209). */ 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("albumAFx=""AFx=",nom_albumAFx); GET_ARGUMENT_C("postfixeAFx=",nom_postfixeAFx); GET_ARGUMENT_I("premiereAFx=",premiere_imageAFx); GET_ARGUMENT_I("pasAFx=",pas_des_imagesAFx); GET_ARGUMENT_I("chiffresAFx=",nombre_de_chiffresAFx); GET_ARGUMENT_C("albumAFy=""AFy=",nom_albumAFy); GET_ARGUMENT_C("postfixeAFy=",nom_postfixeAFy); GET_ARGUMENT_I("premiereAFy=",premiere_imageAFy); GET_ARGUMENT_I("pasAFy=",pas_des_imagesAFy); GET_ARGUMENT_I("chiffresAFy=",nombre_de_chiffresAFy); GET_ARGUMENT_C("albumAFz=""AFz=",nom_albumAFz); GET_ARGUMENT_C("postfixeAFz=",nom_postfixeAFz); GET_ARGUMENT_I("premiereAFz=",premiere_imageAFz); GET_ARGUMENT_I("pasAFz=",pas_des_imagesAFz); GET_ARGUMENT_I("chiffresAFz=",nombre_de_chiffresAFz); GET_ARGUMENT_C("albumRFx=""RFx=",nom_albumRFx); GET_ARGUMENT_C("postfixeRFx=",nom_postfixeRFx); GET_ARGUMENT_I("premiereRFx=",premiere_imageRFx); GET_ARGUMENT_I("pasRFx=",pas_des_imagesRFx); GET_ARGUMENT_I("chiffresRFx=",nombre_de_chiffresRFx); GET_ARGUMENT_C("albumRFy=""RFy=",nom_albumRFy); GET_ARGUMENT_C("postfixeRFy=",nom_postfixeRFy); GET_ARGUMENT_I("premiereRFy=",premiere_imageRFy); GET_ARGUMENT_I("pasRFy=",pas_des_imagesRFy); GET_ARGUMENT_I("chiffresRFy=",nombre_de_chiffresRFy); GET_ARGUMENT_C("albumRFz=""RFz=",nom_albumRFz); GET_ARGUMENT_C("postfixeRFz=",nom_postfixeRFz); GET_ARGUMENT_I("premiereRFz=",premiere_imageRFz); GET_ARGUMENT_I("pasRFz=",pas_des_imagesRFz); GET_ARGUMENT_I("chiffresRFz=",nombre_de_chiffresRFz); GET_ARGUMENT_L("rotation=",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(albumF,Album_AFx); BDEFV(albumF,Album_AFy); BDEFV(albumF,Album_AFz); /* Definition des trois projections Arguments. */ BDEFV(albumF,Album_RFx); BDEFV(albumF,Album_RFy); BDEFV(albumF,Album_RFz); /* Definition des trois projections Resultats. */ CALi(dAloadF_album(Album_AFx ,nom_albumAFx ,nom_postfixeAFx ,premiere_imageAFx ,pas_des_imagesAFx ,nombre_de_chiffresAFx ,FAUX ,UNDEF ,FAUX ) ); CALi(dAloadF_album(Album_AFy ,nom_albumAFy ,nom_postfixeAFy ,premiere_imageAFy ,pas_des_imagesAFy ,nombre_de_chiffresAFy ,FAUX ,UNDEF ,FAUX ) ); CALi(dAloadF_album(Album_AFz ,nom_albumAFz ,nom_postfixeAFz ,premiere_imageAFz ,pas_des_imagesAFz ,nombre_de_chiffresAFz ,FAUX ,UNDEF ,FAUX ) ); /* Chargement des trois projections Arguments. */ /* */ /* L'argument 'Inv' ('FAUX') a ete introduit le 20091125135416... */ Test(IL_FAUT(faire_une_rotation_tridimensionnelle)) Bblock T_ZOOM(rapport_DE_ZOOM); /* Mise en place du zoom (introduit le 20060603095209). */ 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_album Bblock AstoreF_point(TRANSFORMATION_GEOMETRIQUE_3D_Fx(AloadF_point(Album_AFx,X,Y,Z) ,AloadF_point(Album_AFy,X,Y,Z) ,AloadF_point(Album_AFz,X,Y,Z) ,translation_OX ) ,Album_RFx ,X ,Y ,Z ); AstoreF_point(TRANSFORMATION_GEOMETRIQUE_3D_Fy(AloadF_point(Album_AFx,X,Y,Z) ,AloadF_point(Album_AFy,X,Y,Z) ,AloadF_point(Album_AFz,X,Y,Z) ,translation_OY ) ,Album_RFy ,X ,Y ,Z ); AstoreF_point(TRANSFORMATION_GEOMETRIQUE_3D_Fz(AloadF_point(Album_AFx,X,Y,Z) ,AloadF_point(Album_AFy,X,Y,Z) ,AloadF_point(Album_AFz,X,Y,Z) ,translation_OZ ) ,Album_RFz ,X ,Y ,Z ); /* Rotation des trois projections... */ Eblock end_album CALi(dAupdateF_album(nom_albumRFx ,nom_postfixeRFx ,premiere_imageRFx ,pas_des_imagesRFx ,Album_RFx ,nombre_de_chiffresRFx ,FAUX ) ); CALi(dAupdateF_album(nom_albumRFy ,nom_postfixeRFy ,premiere_imageRFy ,pas_des_imagesRFy ,Album_RFy ,nombre_de_chiffresRFy ,FAUX ) ); CALi(dAupdateF_album(nom_albumRFz ,nom_postfixeRFz ,premiere_imageRFz ,pas_des_imagesRFz ,Album_RFz ,nombre_de_chiffresRFz ,FAUX ) ); /* Rangement des trois projections Resultats. */ /* */ /* L'argument 'Inv' ('FAUX') a ete introduit le 20100624091741... */ EDEFV(albumF,Album_RFz); EDEFV(albumF,Album_RFy); EDEFV(albumF,Album_RFx); /* Definition des trois projections Resultats. */ EDEFV(albumF,Album_AFz); EDEFV(albumF,Album_AFy); EDEFV(albumF,Album_AFx); /* Definition des trois projections Arguments. */ Eblock end_nouveau_block RETU_Commande; Eblock ECommande