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



Copyright © Jean-François COLONNA, 2019-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2019-2024.