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