/*************************************************************************************************************************************/
/* */
/* T E S T D E L A P R O J E C T I O N P L A N E Q U E L C O N Q U E : */
/* */
/* */
/* Author of '$xtKi/projector.01$K' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 1989??????????). */
/* */
/*************************************************************************************************************************************/
#include INCLUDES_BASE
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* P A R A M E T R E S : */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* M A C R O S U T I L E S : */
/* */
/*************************************************************************************************************************************/
#define INTERSECTE(Xp,Yp,Zp) \
Bblock \
INITIALISATION_POINT_3D(point,_____cNORMALISE_OX(Xp),_____cNORMALISE_OY(Yp),_____cNORMALISE_OZ(Zp)); \
/* Le point a projeter est symetrique de l'observateur par rapport au centre du */ \
/* plan de projection. */ \
PROJECTION_PLANE_QUELCONQUE(intersection,point,plan,observateur); \
/* Projection : on doit donc trouver le centre de l'ecran... */ \
CAL2(Prin3("point = (%d,%d,%d)\n" \
,PINTE(Xp) \
,PINTE(Yp) \
,PINTE(Zp) \
) \
); \
CAL2(Prin3(" --> intersection = (%d,%d,%d)" \
,_cDENORMALISE_OX(ASD1(intersection,x)) \
,_cDENORMALISE_OY(ASD1(intersection,y)) \
,_cDENORMALISE_OZ(ASD1(intersection,z)) \
) \
); \
Eblock
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* T E S T D E L A P R O J E C T I O N P L A N E Q U E L C O N Q U E : */
/* */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
DEFV(pointF_3D,observateur);
/* Definition de la position de l'observateur. */
DEFV(pointF_3D,point);
/* Point courant a projeter. */
DEFV(pointF_3D,intersection);
/* Point d'intersection recherche. */
DEFV(plan_3D,plan);
/* Plan de projection. */
/*..............................................................................................................................*/
GET_ARGUMENTS_(nombre_d_arguments
,BLOC(VIDE;)
);
SET_ECHANTILLONNAGE(PasX,PasY);
EGAL(ASD1(plan,pA),FZERO);
EGAL(ASD1(plan,pB),FZERO);
EGAL(ASD1(plan,pC),FU);
EGAL(ASD1(plan,pD),FZERO);
/* Le plan de projection est le plan (OX,OY), soit Z=0. */
INITIALISATION_POINT_3D(observateur,_____cNORMALISE_OX(Xmin),_____cNORMALISE_OY(Ymin),_____cNORMALISE_OZ(Zmax));
/* L'observateur est sur OZ au point +Zmax. */
INTERSECTE(Xmax,Ymax,NEGA(Zmax));
/* Projection : on doit donc trouver le centre de l'ecran... */
INTERSECTE(Xmin,Ymin,NEGA(Zmax));
/* Projection... */
INTERSECTE(INFINI,INFINI,ZERO);
/* Projection... */
INTERSECTE(MOIT(MOINS_L_INFINI),MOIT(MOINS_L_INFINI),ZERO);
/* Projection. On notera le 'MOIT(...)' destine a eviter le message : */
/* */
/* Floating point exception */
/* */
RETU_Commande;
Eblock
ECommande