/*************************************************************************************************************************************/ /* */ /* C O N S T R U C T I O N D E L ' E S C A L I E R I N F E R N A L : */ /* */ /* */ /* */ /* ***************** */ /* * ** */ /* * * ****************** */ /* * * * ** */ /* * * * * * */ /* * * * * * */ /* * * * * * */ /* * * ******** * * */ /* * *17* * * * */ /* * * * * * * */ /* * ****** * * * */ /* * * * * * */ /* * ********* * * * */ /* * ** * * * */ /* * 11 * * 14 * 12 * * */ /* * *15************* * * */ /* * * * * * * */ /* * ********* * * 13 * */ /* * ** * * * */ /* * * * * * * */ /* * * ****** * * */ /* * * * * * */ /* * * * * * */ /* * * * * * */ /* * * * * * */ /* * *16**************** * */ /* * * * * * */ /* * ****** * * */ /* * * * * */ /* Depart -> ********************* 10 * * */ /* * * * */ /* * ** */ /* ***************************************** */ /* */ /* */ /* */ /* Author of '$xri/escalier.01$K' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 1987??????????). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 : */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* F I C H I E R S D ' I N C L U D E S : */ /* */ /*************************************************************************************************************************************/ #include INCLUDES_BASE #include image_image_CONTOURS_EXT /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P A R A M E T R E S : */ /* */ /*************************************************************************************************************************************/ #define LOCALISER_A_L_ORIGINE \ FAUX \ /* Faut-il localiser l'escalier a l'origine (indicateur introduit le 20110420165648) ? */ #define COMPATIBILITE_escalier_11 \ FAUX \ /* Si 'IL_FAUT(localiser_a_l_origine)' faut-il alors une compatibilite avec ce que genere */ \ /* 'v $xri/escalier.11$K $xri/escalier.01$K' ('VRAI') ou pas ('FAUX') ? Ceci fut introduit */ \ /* le 20110501091312... */ #define ECHELLE_K \ DEUX #define ECHELLE_X \ NEUF #define ECHELLE_Y \ NEUF /* Definition des echelles (introduites le 20110429092239). */ #define EPAISSEUR \ UN \ /* Nombre d'epaississement des contours. */ #define PAS_DES_COLORS \ DIVI(COULEURS,DIX) \ /* Pas entre chaque couleur (ou 'DIX' est un majorant du nombre de couleurs necessaires). */ #define COLOR_C \ BLANC \ /* Couleur des contours, */ #define COLOR_10 \ SOUS(COLOR_C,PAS_DES_COLORS) \ /* Couleur du contour '10', */ #define COLOR_11 \ SOUS(COLOR_10,PAS_DES_COLORS) \ /* Couleur du contour '11', */ #define COLOR_12 \ SOUS(COLOR_11,PAS_DES_COLORS) \ /* Couleur du contour '12', */ #define COLOR_13 \ SOUS(COLOR_12,PAS_DES_COLORS) \ /* Couleur du contour '13', */ #define COLOR_14 \ SOUS(COLOR_13,PAS_DES_COLORS) \ /* Couleur du contour '14', */ #define COLOR_15 \ SOUS(COLOR_14,PAS_DES_COLORS) \ /* Couleur du contour '15', */ #define COLOR_16 \ SOUS(COLOR_15,PAS_DES_COLORS) \ /* Couleur du contour '16', */ #define COLOR_17 \ SOUS(COLOR_16,PAS_DES_COLORS) \ /* Couleur du contour '17', */ #define EDITER_LES_PARAMETRES_DE_REMPLISSAGE \ FAUX \ /* Faut-il editer les couples {contexte,couleur} de remplissage ('VRAI') ou pas ('FAUX') ? */ \ /* Ceci a ete introduit le 20190716112141... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M A C R O S U T I L E S : */ /* */ /*************************************************************************************************************************************/ #define REMPLIR(contexte,couleur,numero) \ Bblock \ RCG(contexte); \ /* Recuperation du contexte associe au contour a remplir. */ \ INITIALISATION_POINT_2D(point_de_depart,ASD1(vecteurs_____cursor_3D,x),ASD1(vecteurs_____cursor_3D,y)); \ /* Positionnement du point de depart de remplissage du contour. On notera que l'on */ \ /* n'utilise pas 'TRANSFERT_POINT_2D(...)' car 'vecteurs_____cursor_3D' est tridimensionnel. */ \ INITIALISATION_POINT_2D(coin_inferieur_gauche,CADRE_GAUCHE,CADRE_INFERIEUR); \ /* Definition du coin inferieur gauche de remplissage, */ \ INITIALISATION_POINT_2D(coin_superieur_droite,CADRE_DROITE,CADRE_SUPERIEUR); \ /* Definition du coin superieur droite de remplissage. */ \ CALS(Iremplissage(ImageR \ ,ImageR \ ,ADRESSE(point_de_depart) \ ,ADRESSE(coin_inferieur_gauche) \ ,ADRESSE(coin_superieur_droite) \ ,fond,bord \ ,VRAI,VRAI,VRAI,VRAI \ ,FAUX,FAUX,FAUX,FAUX \ ,GENP(couleur) \ ) \ ); \ \ Test(IL_FAUT(editer_les_parametres_de_remplissage)) \ Bblock \ /* Edition introduite le 20190716112141... */ \ CAL3(Prme2("contour=%d niveau=%d\n",PINTE(numero),GENP(couleur))); \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ /* Remplissage du contour repere par 'contexte' avec 'couleur'. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O N S T R U C T I O N D E L ' E S C A L I E R I N F E R N A L : */ /* */ /*************************************************************************************************************************************/ BCommande(nombre_d_arguments,arguments) /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(CHAR,INIC(POINTERc(nom_imageRC),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageRR),NOM_PIPE)); DEFV(Logical,INIT(localiser_a_l_origine,LOCALISER_A_L_ORIGINE)); /* Faut-il localiser l'escalier a l'origine (indicateur introduit le 20110420165648) ? */ DEFV(Logical,INIT(compatibilite_escalier_11,COMPATIBILITE_escalier_11)); /* Si 'IL_FAUT(localiser_a_l_origine)' faut-il alors une compatibilite avec ce que genere */ /* 'v $xri/escalier.11$K $xri/escalier.01$K' ('VRAI') ou pas ('FAUX') ? Ceci fut introduit */ /* le 20110501091312... */ DEFV(Float,INIT(echelle_K,ECHELLE_K)); DEFV(Float,INIT(echelle_X,ECHELLE_X)); DEFV(Float,INIT(echelle_Y,ECHELLE_Y)); /* Definition des echelles (introduites le 20110429092239). */ DEFV(Float,INIT(Z_minimum,FLOT__UNDEF)); DEFV(Float,INIT(Z_maximum,FLOT__UNDEF)); /* Pour le "depth-cueing". */ DEFV(pointF_2D,point_de_depart); /* Point de depart du remplissage d'un contour. */ DEFV(pointF_2D,coin_inferieur_gauche); /* Coin inferieur gauche de la zone de remplissage, */ DEFV(pointF_2D,coin_superieur_droite); /* Coin superieur droite de la zone de remplissage. */ DEFV(Logical,DTb1(fond,COULEURS)); /* Definition du "fond" de l'image, */ DEFV(Logical,DTb1(bord,COULEURS)); /* Definition du "bord" d'un contour. */ DEFV(Logical,INIT(editer_les_parametres_de_remplissage,EDITER_LES_PARAMETRES_DE_REMPLISSAGE)); /* Faut-il editer les couples {contexte,couleur} de remplissage ('VRAI') ou pas ('FAUX') ? */ /* Ceci a ete introduit le 20190716112141... */ /*..............................................................................................................................*/ GET_ARGUMENTSv(nombre_d_arguments ,BLOC(GET_ARGUMENT_L("SX_SY_SZ_____compatibilite_20070416=""compatibilite_20070416=" ,SX_SY_SZ_____compatibilite_20070416 ); /* Parametre introduit le 20070416161826... */ GET_ARGUMENT_L("Ipoint_anti_aliase_segment_____compatibilite_20110420=""compatibilite_20110420=" ,Ipoint_anti_aliase_segment_____compatibilite_20110420 ); /* Parametre introduit le 20110420145753... */ GET_ARGUMENT_C("imageRC=""RC=",nom_imageRC); GET_ARGUMENT_C("imageRR=""RR=",nom_imageRR); GET_ARGUMENT_F("increment=",Iremplissage_voisinage_____increment_recursif_du_niveau_de_remplissage); GET_ARGUMENT_L("origine=",localiser_a_l_origine); /* Parametre introduit le 20110420165648... */ GET_ARGUMENT_L("compatibilite_escalier_11=""c11=",compatibilite_escalier_11); /* Parametre introduit le 20110501091312... */ GET_ARGUMENT_F("K=""SK=",echelle_K); GET_ARGUMENT_F("X=""SX=",echelle_X); GET_ARGUMENT_F("Y=""SY=",echelle_Y); /* Parametres introduits le 20110429092239... */ GET_ARGUMENT_L("editer_vecteur_2D=""ev2D=",IFsegment_____editer_le_vecteur_bidimensionnel); GET_ARGUMENT_L("editer_vecteur_3D=""ev3D=",IFseg3D_____editer_le_vecteur_tridimensionnel); /* Parametres introduits le 20110419172132... */ GET_ARGUMENT_L("editer_parametres_remplissage=""epr=",editer_les_parametres_de_remplissage); /* Parametres introduits le 20190716112141... */ ) ); SET_ECHANTILLONNAGE(PasX,PasY); BoIn(niveau,NOIR,BLANC,PAS_COULEURS) Bblock EGAL(ITb1(fond,INDX(niveau,NOIR)),FAUX); EGAL(ITb1(bord,INDX(niveau,NOIR)),VRAI); Eblock EBoI EGAL(ITb1(fond,INDX(NOIR,NOIR)),VRAI); EGAL(ITb1(bord,INDX(NOIR,NOIR)),FAUX); /* Initialisation du remplisseur de contour. */ CALS(Iinit_Z_Buffer()); SET_ANTI_ALIASING(FAUX); SET_COULEURS(NOIR,COLOR_C); CALS(FgERASE()); SK(echelle_K);SX(echelle_X);SY(echelle_Y); Test(IL_FAUT(localiser_a_l_origine)) Bblock DO(1,BLOC(g2;)); /* On notera qu'alors, par exemple : */ /* */ /* XYmaxNe 450 234 */ /* */ /* fait que l'escalier est juste inscrit dans le cadre de l'image... */ Test(IL_FAUT(compatibilite_escalier_11)) Bblock CALS(FgMIK()); EGAL(vecteurs_____scale_globale,DIVI(vecteurs_____scale_globale,FLOT(TAILLE_DU_PAVE_DES_ELEMENTS_PARADOXAUX)));; g1;g1;g2;g2; /* Ce deplacement est compatible avec 'v $xri/escalier.11$K SET_ANTI_ALIASING.VRAI.'. */ CALS(FgMOK());; Eblock ATes Bblock Eblock ETes Eblock ATes Bblock DO(1,BLOC(g1;)); DO(10,BLOC(g2;)); Eblock ETes /* Trace des contours de l'escalier infernal. */ DO(EPAISSEUR ,BLOC(WCG(vecteurs_____Gcon_01); gA;g4;gB; DO(16,BLOC(g1;));gB; g2;g3;WCG(vecteurs_____Gcon_10);g1;g2;g2;gB; DO(6,BLOC(g3;));gB; g4;gB; g3;g3;gB; g4;gB; DO(8,BLOC(g3;));gB; /* Generation de la face avant (vecteurs_____Gcon_10). */ DO(6,BLOC(g1;g2;));g1;WCG(vecteurs_____Gcon_11);g3;DO(6,BLOC(g1;g2;));gB; DO(6,BLOC(g1;));gB;WCG(vecteurs_____Gcon_30); /* Generation du palier gauche (vecteurs_____Gcon_11). */ g4;gB; DO(4,BLOC(g1;));g4;WCG(vecteurs_____Gcon_12);g2;DO(3,BLOC(g1;));gB; DO(9,BLOC(g3;g4;));gB; /* Generation du palier droit (vecteurs_____Gcon_12). */ g4;g1;WCG(vecteurs_____Gcon_13);g3;g4;g4;gA; DO(9,BLOC(g1;g2;));gB; g2;g2;g2;gB; /* Generation du bord droit (vecteurs_____Gcon_13). */ RCG(vecteurs_____Gcon_30);gA; DO(4,BLOC(g3;g4;));gB; g4;gB;g1;WCG(vecteurs_____Gcon_14);g3; /* Generation de la face interne arriere (vecteurs_____Gcon_14). */ g3;g3;g3;gB; g3;g4;CALS(FgMIC());CALS(FgMIX());CALS(FgXDIVI());g1;WCG(vecteurs_____Gcon_15);CALS(FgMOX());CALS(FgMOC());g3;g4;gB; /* Generation de la face interne gauche (vecteurs_____Gcon_15). */ g1;g1;g1;gB; DO(4,BLOC(g3;g4;));gB; g1;CALS(FgMIC());CALS(FgMIY());CALS(FgYDIVI());g2;WCG(vecteurs_____Gcon_16);CALS(FgMOY());CALS(FgMOC());g1;g2;gA; /* Generation de la marche avant (vecteurs_____Gcon_16). */ g1;g1;g2;g2;gB;WCG(vecteurs_____Gcon_31); g2;gB; g3;g3;gA; g1;g2;gB; g2;gB; g4;gA; g1;g1;g1;g1;g1;gB; /* Generation du bord interieur du bas. */ RCG(vecteurs_____Gcon_31);gA; g1;g1;gB; DO(5,BLOC(g1;g2;));gB; g3;g3;g3;gB; g4;gB; /* Generation du bord interieur du haut. */ g3;CALS(FgMIC());CALS(FgMIY());CALS(FgYDIVI());g2;WCG(vecteurs_____Gcon_17);CALS(FgMOY());CALS(FgMOC());g3;gB; /* Generation de la marche arriere (vecteurs_____Gcon_17). */ g1;g1;g2;gA; g1;g1;g2;g2;gB; WCG(vecteurs_____Gcon_02); RCG(vecteurs_____Gcon_01); SK(1);SX(1);SY(1); CALS(FgTRZ1()); g1;CALS(FgMIC()); WCG(vecteurs_____Gcon_01); RCG(vecteurs_____Gcon_02); CALS(FgMOC()); ) ); CALS(Imove(ImageR,ImageG)); CALS(Imove(ImageR1,ImageR)); CALi(Iupdate_image(nom_imageRC,ImageR1)); /* ATTENTION, il y avait autrefois : */ /* */ /* CALi(Iupdate_image("images/tests/ESCALIER.11",ImageR)); */ /* */ /* Les manoeuvres entre {ImageR,ImageR1,ImageR2} furent introduites le 20061211132153 afin */ /* d'eviter le message 'v $xcc/cpp$Z est.utilisee.dans.plusieurs'... */ REMPLIR(vecteurs_____Gcon_10,COLOR_10,10); REMPLIR(vecteurs_____Gcon_11,COLOR_11,11); REMPLIR(vecteurs_____Gcon_12,COLOR_12,12); REMPLIR(vecteurs_____Gcon_13,COLOR_13,13); REMPLIR(vecteurs_____Gcon_14,COLOR_14,14); REMPLIR(vecteurs_____Gcon_15,COLOR_15,15); REMPLIR(vecteurs_____Gcon_16,COLOR_16,16); REMPLIR(vecteurs_____Gcon_17,COLOR_17,17); /* Remplissage des contours de l'escalier infernal. */ CALS(Imove(ImageR2,ImageR)); CALi(Iupdate_image(nom_imageRR,ImageR2)); /* ATTENTION, il y avait autrefois : */ /* */ /* CALi(Iupdate_image("images/tests/ESCALIER.12",ImageR)); */ /* */ /* Les manoeuvres entre {ImageR,ImageR1,ImageR2} furent introduites le 20061211132153 afin */ /* d'eviter le message 'v $xcc/cpp$Z est.utilisee.dans.plusieurs'... */ RETU_Commande; Eblock ECommande