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