/*************************************************************************************************************************************/ /* */ /* 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* * * * */ /* * * * * * * */ /* * ****** * * * <--- plan 22 */ /* * * * * * */ /* * ********* * * * */ /* * ** * * * */ /* * 11 * * 14 * 12 * * */ /* * *15************* * * <--- plan 21 */ /* * * * * * * */ /* * ********* * * 13 * */ /* * ** * * * */ /* * * * * * * */ /* * * ****** * * <--- plan 23 */ /* * * * * * */ /* * * * * * */ /* * * * * * */ /* * * * * * */ /* * *16**************** * */ /* * * * * * */ /* * ****** * * */ /* * * * * */ /* Depart -> ********************* 10 * * */ /* * * * */ /* * ** */ /* ***************************************** <--- plan 20 */ /* */ /* */ /* */ /* Author of '$xri/escalier.02$K' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 1994??????????). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 20110420183000) ? */ #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 COLOR_20 \ SUCC(NOIR) #define COLOR_23 \ ADD2(COLOR_20,GRO1(FRA3(COULEURS))) #define COLOR_21 \ ADD2(COLOR_20,GRO2(FRA3(COULEURS))) #define COLOR_22 \ PRED(BLANC) /* Definition des degrades. */ #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 20190716112253... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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(ImageA \ ,ImageA \ ,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'. */ #define DEGRADE(couleur,couleur_mm,couleur_Mm,couleur_mM,couleur_MM) \ Bblock \ CALS(Iremplacement_d_un_niveau_par_interpolation(ImageR \ ,ImageA \ ,couleur \ ,couleur_mm \ ,couleur_Mm \ ,couleur_mM \ ,couleur_MM \ ) \ ); \ Eblock \ /* Degrade des contours remplis reperes par '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_imageR),NOM_PIPE)); DEFV(Logical,INIT(localiser_a_l_origine,LOCALISER_A_L_ORIGINE)); /* Faut-il localiser l'escalier a l'origine (indicateur introduit le 20110420183000) ? */ 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(genere_p,INIT(color_20,COLOR_20)); DEFV(genere_p,INIT(color_21,COLOR_21)); DEFV(genere_p,INIT(color_22,COLOR_22)); DEFV(genere_p,INIT(color_23,COLOR_23)); /* Definition des degrades. */ 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 20190716112253... */ /*..............................................................................................................................*/ GET_ARGUMENTSv(nombre_d_arguments ,BLOC(GET_ARGUMENT_L("SX_SY_SZ_____compatibilite_20070416=""compatibilite_20070416=" ,SX_SY_SZ_____compatibilite_20070416 ); /* Parametre introduit le 20070416161853... */ GET_ARGUMENT_L("Ipoint_anti_aliase_segment_____compatibilite_20110420=""compatibilite_20110420=" ,Ipoint_anti_aliase_segment_____compatibilite_20110420 ); /* Parametre introduit le 20110420145730... */ GET_ARGUMENT_C("imageR=""R=",nom_imageR); GET_ARGUMENT_L("origine=",localiser_a_l_origine); /* Parametre introduit le 20110420183000... */ GET_ARGUMENT_P("c20=",color_20); GET_ARGUMENT_P("c21=",color_21); GET_ARGUMENT_P("c22=",color_22); GET_ARGUMENT_P("c23=",color_23); 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 20110419172206... */ GET_ARGUMENT_L("editer_parametres_remplissage=""epr=",editer_les_parametres_de_remplissage); /* Parametres introduits le 20190716112253... */ ) ); 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(2);SX(9);SY(9); 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... */ 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(ImageA,ImageG)); 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. */ CALi(Inoir(ImageR)); DEGRADE(COLOR_10,color_20,color_20,color_20,color_20); DEGRADE(COLOR_11,color_20,color_20,color_22,color_22); DEGRADE(COLOR_12,color_20,color_20,color_22,color_22); DEGRADE(COLOR_13,color_20,color_22,color_20,color_22); DEGRADE(COLOR_14,color_21,color_21,color_21,color_21); DEGRADE(COLOR_15,color_23,color_21,color_23,color_21); DEGRADE(COLOR_16,color_20,color_23,color_20,color_23); DEGRADE(COLOR_17,color_21,color_22,color_21,color_22); /* Degrade des contours de l'escalier infernal. */ CALi(Iupdate_image(nom_imageR,ImageR)); RETU_Commande; Eblock ECommande