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