/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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



Copyright © Jean-François COLONNA, 2019-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2019-2024.