/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A T I O N   D U   S I G L E   D U   F I R T E C H   " C A L C U L   S C I E N T I F I Q U E "  :                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                        07--------------------------------06                                                                       */
/*                      +                                  + |                                                                       */
/*                    +               17                 +   |                                                                       */
/*                  07-----------------------------09=06  16 |                                                                       */
/*                  |                                  |    05                                                                       */
/*                  |                                  |   +                                                                         */
/*                  |                                  | +                                                                           */
/*                  |      ---------------------------05                                                                             */
/*                  |      |     |                                                                                                   */
/*                  |      |     |                                                                                                   */
/*                  |      |  15 |                                                                                                   */
/*                  |      |     |                                                                                                   */
/*                  |      |     04----------03                                                                                      */
/*                  |      |   +            + |                                                                                      */
/*                  |      | +    14      +   |                                                                                      */
/*                  |   08=04----------03  13 |                                                                                      */
/*                  |                   |    02                                                                                      */
/*                  |                   |   +                                                                                        */
/*                  |                   | +                                                                                          */
/*                  |      ------------02                                                                                            */
/*                  |      |     |                                                                                                   */
/*                  |  11  |     |                                                                                                   */
/*                  |      |  12 |                                                                                                   */
/*                  |      |     |                                                                                                   */
/*                  |      |     +                                                                                                   */
/*                  |      |   +                                                                                                     */
/*                  |      | +                                                                                                       */
/*                  00----01                                                                                                         */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  ------------------------                                                                                         */
/*                  |                      |                                                                                         */
/*                  |                      |                                                                                         */
/*                  |      ----------      |                                                                                         */
/*                  |      |        |      |                                                                                         */
/*                  |      |        |      |                                                                                         */
/*                  |      |        |      |                                                                                         */
/*                  |      |        --------                                                                                         */
/*                  |      |                                                                                                         */
/*                  |      |                                                                                                         */
/*                  |      |                                                                                                         */
/*                  |      |        --------                                                                                         */
/*                  |      |        |      |                                                                                         */
/*                  |      |        |      |                                                                                         */
/*                  |      |        |      |                                                                                         */
/*                  |      ----------      |                                                                                         */
/*                  |                      |                                                                                         */
/*                  |          21          |                                                                                         */
/*                  |                      |                                                                                         */
/*                  ------------------------                                                                                         */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  ------------------------                                                                                         */
/*                  |                      |                                                                                         */
/*                  |                      |                                                                                         */
/*                  |      ----------      |                                                                                         */
/*                  |      |        |      |                                                                                         */
/*                  |      |        |      |                                                                                         */
/*                  |      |        |      |                                                                                         */
/*                  |      |        --------                                                                                         */
/*                  |      |                                                                                                         */
/*                  |      |                                                                                                         */
/*                  |      |                                                                                                         */
/*                  |      -----------------                                                                                         */
/*                  |                      |                                                                                         */
/*                  |                      |                                                                                         */
/*                  |                      |                                                                                         */
/*                  -----------------      |                                                                                         */
/*                                  |      |                                                                                         */
/*                                  |      |                                                                                         */
/*                                  |      |                                                                                         */
/*                  --------        |      |                                                                                         */
/*                  |      |        |      |                                                                                         */
/*                  |      |        |      |                                                                                         */
/*                  |      |        |      |                                                                                         */
/*                  |      ----------      |                                                                                         */
/*                  |                      |                                                                                         */
/*                  |          31          |                                                                                         */
/*                  |                      |                                                                                         */
/*                  ------------------------                                                                                         */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xrd/firtech.01$K' :                                                                                            */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 1989??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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_QUAD_IMAGE_EXT
#include  image_image_CONTOURS_EXT
#include  maths_fonct_COURBES_1_EXT

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   G1                                                                                                                            \
                    Bblock                                                                                                              \
                    g1;g1;                                                                                                              \
                    Eblock                                                                                                              \
                                        /* Deplacement horizontal vers la droite,                                                    */
#define   G2                                                                                                                            \
                    Bblock                                                                                                              \
                    g2;g2;                                                                                                              \
                    Eblock                                                                                                              \
                                        /* Deplacement vertical vers le haut,                                                        */
#define   G3                                                                                                                            \
                    Bblock                                                                                                              \
                    g3;g3;                                                                                                              \
                    Eblock                                                                                                              \
                                        /* Deplacement horizontal vers la gauche.                                                    */
#define   G4                                                                                                                            \
                    Bblock                                                                                                              \
                    g4;g4;                                                                                                              \
                    Eblock                                                                                                              \
                                        /* Deplacement vertical vers le bas.                                                         */
#define   DIAGONALE                                                                                                                     \
                    Bblock                                                                                                              \
                    gA;DO(DIAGONALE_DU_F,BLOC(G1;));G2;gB;                                                                              \
                    Eblock                                                                                                              \
                                        /* Barres obliques du 'F'.                                                                   */
#define   REMPLIR(contexte,couleur)                                                                                                     \
                    Bblock                                                                                                              \
                    Test(IL_FAUT(remplir_les_contours))                                                                                 \
                         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,Xmin,Ymin);                                                      \
                                        /* Definition du coin inferieur gauche de remplissage,                                       */ \
                         INITIALISATION_POINT_2D(coin_superieur_droite,Xmax,Ymax);                                                      \
                                        /* 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                                                                          \
                                          ,couleur                                                                                      \
                                           )                                                                                            \
                              );                                                                                                        \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Remplissage du contour repere par 'contexte' avec 'couleur' dans 'ImageR'.                */
#define   GET_POINT_COURANT                                                                                                             \
                    Bblock                                                                                                              \
                    GET_CURSOR(ASD1(pointF_courant,x),ASD1(pointF_courant,y),ASD1(pointF_courant,z));                                   \
                    Eblock                                                                                                              \
                                        /* Recuperation du curseur courant dans [0,1]...                                             */
#define   SET_ORIGINE(dX0,dY0,dZ0)                                                                                                      \
                    Bblock                                                                                                              \
                    GET_POINT_COURANT;                                                                                                  \
                    TRANSFERT_POINT_3D(pointF_origine,pointF_courant);                                                                  \
                    INITIALISATION_ACCROISSEMENT_3D(derivee_a_l_origine                                                                 \
                                                   ,MUL2(DELTA_AXE(vecteurs_____scale_OX,dX0),tension_des_arcs)                         \
                                                   ,MUL2(DELTA_AXE(vecteurs_____scale_OY,dY0),tension_des_arcs)                         \
                                                   ,MUL2(DELTA_AXE(vecteurs_____scale_OZ,dZ0),tension_des_arcs)                         \
                                                    );                                                                                  \
                    Eblock                                                                                                              \
                                        /* Definition du point origine.                                                              */
#define   SET_EXTREMITE(dXn,dYn,dZn)                                                                                                    \
                    Bblock                                                                                                              \
                    GET_POINT_COURANT;                                                                                                  \
                    TRANSFERT_POINT_3D(pointF_extremite,pointF_courant);                                                                \
                    INITIALISATION_ACCROISSEMENT_3D(derivee_a_l_extremite                                                               \
                                                   ,MUL2(DELTA_AXE(vecteurs_____scale_OX,dXn),tension_des_arcs)                         \
                                                   ,MUL2(DELTA_AXE(vecteurs_____scale_OY,dYn),tension_des_arcs)                         \
                                                   ,MUL2(DELTA_AXE(vecteurs_____scale_OZ,dZn),tension_des_arcs)                         \
                                                    );                                                                                  \
                    DRAW_CUBIQUE_2;                                                                                                     \
                    Eblock                                                                                                              \
                                        /* Definition du point extremite et trace de l'arc (origine,extremite)...                    */
#define   MOVE_ORIGINE                                                                                                                  \
                    Bblock                                                                                                              \
                    TRANSFERT_POINT_3D(pointF_origine,pointF_extremite);                                                                \
                    TRANSFERT_ACCROISSEMENT_3D(derivee_a_l_origine,derivee_a_l_extremite);                                              \
                    Eblock                                                                                                              \
                                        /* Deplacement de l'origine sur l'extremite precedente.                                      */
#define   DRAW_CUBIQUE_2                                                                                                                \
                    Bblock                                                                                                              \
                    CALS(Ivisualisation_arc_de_cubique_2P2D(ImageG                                                                      \
                                                           ,ADRESSE(pointF_origine)                                                     \
                                                           ,ADRESSE(derivee_a_l_origine)                                                \
                                                           ,niveau_origine                                                              \
                                                           ,ADRESSE(pointF_extremite)                                                   \
                                                           ,ADRESSE(derivee_a_l_extremite)                                              \
                                                           ,niveau_extremite                                                            \
                                                           ,CHOI(_____lNORMALISE_OX(RAYON_DU_POINT)                                     \
                                                                ,_____lNORMALISE_OY(RAYON_DU_POINT)                                     \
                                                                 )                                                                      \
                                                           ,AFFAIBLISSEMENT_AU_BORD                                                     \
                                                           ,TRI_DIMENSIONNEL                                                            \
                                                            )                                                                           \
                         );                                                                                                             \
                    Eblock                                                                                                              \
                                        /* Trace de l'arc de cubique...                                                              */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S  :                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   TENSION_DES_ARCS                                                                                                              \
                    FLOT(DIX)                                                                                                           \
                                        /* Plus cette valeur est proche de 1 et plus les courbes sont tendues et proches de lignes   */ \
                                        /* droites. Plus cette valeur est grande, et plus, les courbes sont courbes...               */
#define   NIVEAU_DU_F                                                                                                                   \
                    BLANC                                                                                                               \
                                        /* Niveau de trace des contours du 'F'.                                                      */
#define   COLOR_11  PRED(NIVEAU_DU_F)                                                                                                   \
                                        /* Couleur du contour '11',                                                                  */
#define   COLOR_12  PRED(COLOR_11)                                                                                                      \
                                        /* Couleur du contour '12',                                                                  */
#define   COLOR_13  PRED(COLOR_12)                                                                                                      \
                                        /* Couleur du contour '13',                                                                  */
#define   COLOR_14  PRED(COLOR_13)                                                                                                      \
                                        /* Couleur du contour '14',                                                                  */
#define   COLOR_15  PRED(COLOR_14)                                                                                                      \
                                        /* Couleur du contour '15',                                                                  */
#define   COLOR_16  PRED(COLOR_15)                                                                                                      \
                                        /* Couleur du contour '16',                                                                  */
#define   COLOR_17  PRED(COLOR_16)                                                                                                      \
                                        /* Couleur du contour '17',                                                                  */
#define   HAUTEUR_DU_F                                                                                                                  \
                    SIX                                                                                                                 \
                                        /* Hauteur elementaire des barres du 'F'.                                                    */
#define   PETITE_LARGEUR_DU_F                                                                                                           \
                    QUATRE                                                                                                              \
                                        /* Largeur de la petite barre du 'F'.                                                        */
#define   GRANDE_LARGEUR_DU_F                                                                                                           \
                    SEPT                                                                                                                \
                                        /* Largeur de la grande barre du 'F'.                                                        */
#define   DIAGONALE_DU_F                                                                                                                \
                    DEUX                                                                                                                \
                                        /* Deplacement horizontal pour les barres obliques du 'F'.                                   */
#define   RAYON_DU_POINT                                                                                                                \
                    DEUX                                                                                                                \
                                        /* Rayon du point representatif.                                                             */
#define   AFFAIBLISSEMENT_AU_BORD                                                                                                       \
                    FU                                                                                                                  \
                                        /* Afin de faire un degrade du centre vers le bord...                                        */
#define   NIVEAU_DU_C                                                                                                                   \
                    GRIS_5                                                                                                              \
                                        /* Niveau de trace des contours du 'F'.                                                      */
#define   NIVEAU_ORIGINE_DU_C                                                                                                           \
                    NIVEAU_DU_C                                                                                                         \
                                        /* Niveau du point origine pour l'interpolation du 'C',                                      */
#define   NIVEAU_EXTREMITE_DU_C                                                                                                         \
                    NIVEAU_DU_C                                                                                                         \
                                        /* Niveau du point extremite pour l'interpolation du 'C'.                                    */
#define   COLOR_21  PRED(NIVEAU_DU_C)                                                                                                   \
                                        /* Couleur du contour '21 entourant le 'C'.                                                  */
#define   PETITE_HAUTEUR_DU_C                                                                                                           \
                    QUATRE                                                                                                              \
                                        /* Petite hauteur du 'C'.                                                                    */
#define   GRANDE_HAUTEUR_DU_C                                                                                                           \
                    SIX                                                                                                                 \
                                        /* Grande hauteur du 'C'.                                                                    */
#define   LARGEUR_DU_C                                                                                                                  \
                    QUATRE                                                                                                              \
                                        /* Largeur elementaire du 'C'.                                                               */
#define   NIVEAU_DU_S                                                                                                                   \
                    GRIS_6                                                                                                              \
                                        /* Niveau de trace des contours du 'F'.                                                      */
#define   NIVEAU_ORIGINE_DU_S                                                                                                           \
                    NIVEAU_DU_S                                                                                                         \
                                        /* Niveau du point origine pour l'interpolation du 'S',                                      */
#define   NIVEAU_EXTREMITE_DU_S                                                                                                         \
                    NIVEAU_DU_S                                                                                                         \
                                        /* Niveau du point extremite pour l'interpolation du 'S'.                                    */
#define   COLOR_31  PRED(NIVEAU_DU_S)                                                                                                   \
                                        /* Couleur du contour '31' entourant le 'S'.                                                 */
#define   HAUTEUR_DU_S                                                                                                                  \
                    SIX                                                                                                                 \
                                        /* Hauteur elementaire des barres du 'S'.                                                    */
#define   LARGEUR_DU_S                                                                                                                  \
                    SIX                                                                                                                 \
                                        /* Largeur elementaire du 'S'.                                                               */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A T I O N   D U   S I G L E   D U   F I R T E C H   " C A L C U L   S C I E N T I F I Q U E "  :                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE));
     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(pointF_3D,pointF_courant);
                                        /* Definition du point courant.                                                              */
     DEFV(pointF_3D,pointF_origine);
     DEFV(pointF_3D,pointF_extremite);
                                        /* Definition des points origines et extremite dee l'arc de cubique.                         */
     DEFV(deltaF_3D,derivee_a_l_origine);
     DEFV(deltaF_3D,derivee_a_l_extremite);
                                        /* Definition des vecteurs derivees a l'origine et a l'extremite.                            */
     DEFV(genere_p,INIT(niveau_origine,NIVEAU_UNDEF));
     DEFV(genere_p,INIT(niveau_extremite,NIVEAU_UNDEF));
                                        /* Niveaux origine et extremite du trace d'un arc de cubique...                              */
     DEFV(Logical,INIT(remplir_les_contours,VRAI));
                                        /* Indique s'il faut ('VRAI') ou pas ('FAUX') remplir les contours...                        */
     DEFV(Float,INIT(tension_des_arcs,TENSION_DES_ARCS));
                                        /* Definition de la tension des arcs de cubique ; plus cette valeur est proche de 1 et       */
                                        /* plus les courbes sont tendues et proches de lignes droites. Plus cette valeur est         */
                                        /* grande, et plus, les courbes sont courbes...                                              */
     /*..............................................................................................................................*/
     GET_ARGUMENTSv(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_L("SX_SY_SZ_____compatibilite_20070416=""compatibilite_20070416="
                                       ,SX_SY_SZ_____compatibilite_20070416
                                        );
                                        /* Parametre introduit le 20070416161706...                                                  */
                         GET_ARGUMENT_L("Ipoint_anti_aliase_segment_____compatibilite_20110420=""compatibilite_20110420="
                                       ,Ipoint_anti_aliase_segment_____compatibilite_20110420
                                        );
                                        /* Parametre introduit le 20110420145500...                                                  */

                         GET_ARGUMENT_C("imageR=""R=",nom_imageR);
                         GET_ARGUMENT_F("tension=""t=",tension_des_arcs);
                         GET_ARGUMENT_L("remplir=""r=",remplir_les_contours);
                         )
                    );

     CALi(Inoir(ImageR));
                                        /* R  : futur resultat.                                                                      */
     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(FgERASE());
                                        /* Clear...                                                                                  */
     SET_COULEURS(NOIR,BLANC);
     SET_ANTI_ALIASING(FAUX);
     SK(4);
                                        /* Definition de l'echelle globale.                                                          */
     SX(8);
                                        /* Definition de l'echelle sur l'axe des 'X'.                                                */
     SY(8);
                                        /* Definition de l'echelle sur l'axe des 'Y'.                                                */
     SZ(8);
                                        /* Definition de l'echelle sur l'axe des 'Z'.                                                */
     gA;DO(6,BLOC(g1;));gA;
     gA;DO(4,BLOC(g2;));gA;
                                        /* Positionnement au point de reference du 'F'.                                              */
     SK(2);
                                        /* Definition de l'echelle globale.                                                          */
     SX(4);
                                        /* Definition de l'echelle sur l'axe des 'X'.                                                */
     SY(4);
                                        /* Definition de l'echelle sur l'axe des 'Y'.                                                */
     SZ(4);
                                        /* Definition de l'echelle sur l'axe des 'Z'.                                                */
     WCG(vecteurs_____Gcon_00);
                                        /* Point de reference general...                                                             */

     SET_COULEURS(NOIR,NIVEAU_DU_F);
                                        /* Choix de la couleur du contour du 'F'.                                                    */
     FgMIC();
     g1;g2;WCG(vecteurs_____Gcon_11);g3;g4;
     gA;G1;gB;WCG(vecteurs_____Gcon_01);
     gA;DO(HAUTEUR_DU_F,BLOC(G2;));gB;
     gA;DO(PETITE_LARGEUR_DU_F,BLOC(G1;));gB;WCG(vecteurs_____Gcon_02);
     gA;G2;gB;WCG(vecteurs_____Gcon_03);g1;WCG(vecteurs_____Gcon_13);g3;g2;WCG(vecteurs_____Gcon_14);g4;
     gA;DO(PETITE_LARGEUR_DU_F,BLOC(G3;));gB;WCG(vecteurs_____Gcon_04);WCG(vecteurs_____Gcon_08);
     gA;DO(HAUTEUR_DU_F,BLOC(G2;));gB;
     gA;DO(GRANDE_LARGEUR_DU_F,BLOC(G1;));gB;WCG(vecteurs_____Gcon_05);
     gA;G2;gB;WCG(vecteurs_____Gcon_06);WCG(vecteurs_____Gcon_09);g1;WCG(vecteurs_____Gcon_16);g3;g2;WCG(vecteurs_____Gcon_17);g4;
     gA;DO(ADD2(GRANDE_LARGEUR_DU_F,UN),BLOC(G3;));gB;WCG(vecteurs_____Gcon_07);
     gA;FgMOC();gB;
                                        /* Face avant du 'F' (contour 11).                                                           */
     RCG(vecteurs_____Gcon_01);
     DIAGONALE;
     g3;WCG(vecteurs_____Gcon_12);g1;
     gA;DO(SOUS(HAUTEUR_DU_F,UN),BLOC(G2;));gB;
                                        /* Premiere face de cote verticale du 'F' (contour 12).                                      */
     RCG(vecteurs_____Gcon_02);DIAGONALE;WCG(vecteurs_____Gcon_02);
     RCG(vecteurs_____Gcon_03);DIAGONALE;WCG(vecteurs_____Gcon_03);
     RCG(vecteurs_____Gcon_04);DIAGONALE;WCG(vecteurs_____Gcon_04);g3;WCG(vecteurs_____Gcon_15);g1;
     RCG(vecteurs_____Gcon_02);gA;RCG(vecteurs_____Gcon_03);gB;
                                        /* Deuxieme face de cote verticale du 'F' (contour 13).                                      */
     RCG(vecteurs_____Gcon_03);gA;RCG(vecteurs_____Gcon_04);gB;
                                        /* Troisieme face de cote horizontale du 'F' (contour 14).                                   */
     gA;DO(SOUS(HAUTEUR_DU_F,UN),BLOC(G2;));gB;
                                        /* Quatrieme face de cote verticale du 'F' (contour 15).                                     */
     RCG(vecteurs_____Gcon_05);DIAGONALE;WCG(vecteurs_____Gcon_05);
     RCG(vecteurs_____Gcon_06);DIAGONALE;WCG(vecteurs_____Gcon_06);
     RCG(vecteurs_____Gcon_07);DIAGONALE;WCG(vecteurs_____Gcon_07);
     RCG(vecteurs_____Gcon_05);gA;RCG(vecteurs_____Gcon_06);gB;
                                        /* Cinquieme face de cote verticale du 'F' (contour 16).                                     */
     RCG(vecteurs_____Gcon_06);gA;RCG(vecteurs_____Gcon_07);gB;
                                        /* Sixieme face de cote horizontale du 'F' (contour 17).                                     */

     CALS(Imove(ImageR,ImageG));
     REMPLIR(vecteurs_____Gcon_11,COLOR_11);
     REMPLIR(vecteurs_____Gcon_12,COLOR_12);
     REMPLIR(vecteurs_____Gcon_13,COLOR_13);
     REMPLIR(vecteurs_____Gcon_14,COLOR_14);
     REMPLIR(vecteurs_____Gcon_15,COLOR_15);
     REMPLIR(vecteurs_____Gcon_16,COLOR_16);
     REMPLIR(vecteurs_____Gcon_17,COLOR_17);

     CALS(Imove(ImageA1,ImageR));
                                        /* A1 = 'F' seul.                                                                            */

     CALS(FgERASE());
                                        /* Clear...                                                                                  */
     RCG(vecteurs_____Gcon_08);
     SET_COULEURS(NOIR,BLANC);
     gA;G4;gB;
     gA;DO(PETITE_LARGEUR_DU_F,BLOC(G1;));gB;WCG(vecteurs_____Gcon_02);
     gA;G2;gA;WCG(vecteurs_____Gcon_03);
     gA;DO(PETITE_LARGEUR_DU_F,BLOC(G3;));gA;WCG(vecteurs_____Gcon_04);
     RCG(vecteurs_____Gcon_02);DIAGONALE;WCG(vecteurs_____Gcon_02);
     RCG(vecteurs_____Gcon_03);DIAGONALE;WCG(vecteurs_____Gcon_03);
     RCG(vecteurs_____Gcon_04);DIAGONALE;WCG(vecteurs_____Gcon_04);g4;WCG(vecteurs_____Gcon_11);g2;
     RCG(vecteurs_____Gcon_02);gA;RCG(vecteurs_____Gcon_03);gB;
     RCG(vecteurs_____Gcon_03);gA;RCG(vecteurs_____Gcon_04);gB;
     CALS(Imove(ImageR,ImageG));
     REMPLIR(vecteurs_____Gcon_11,BLANC);
                                        /* Premiere partie du masque correspondant a la petite barre du 'F'.                         */
     CALS(Imove(ImageG,ImageR));
     RCG(vecteurs_____Gcon_09);
     SET_COULEURS(NOIR,BLANC);
     gA;DO(PETITE_LARGEUR_DU_F,BLOC(G3;));gA;
     gA;G4;gB;
     gA;DO(PETITE_LARGEUR_DU_F,BLOC(G1;));gB;WCG(vecteurs_____Gcon_02);
     gA;G2;gA;WCG(vecteurs_____Gcon_03);
     gA;DO(PETITE_LARGEUR_DU_F,BLOC(G3;));gA;WCG(vecteurs_____Gcon_04);
     RCG(vecteurs_____Gcon_02);DIAGONALE;WCG(vecteurs_____Gcon_02);
     RCG(vecteurs_____Gcon_03);DIAGONALE;WCG(vecteurs_____Gcon_03);
     RCG(vecteurs_____Gcon_04);DIAGONALE;WCG(vecteurs_____Gcon_04);g4;WCG(vecteurs_____Gcon_11);g2;
     RCG(vecteurs_____Gcon_02);gA;RCG(vecteurs_____Gcon_03);gB;
     RCG(vecteurs_____Gcon_03);gA;RCG(vecteurs_____Gcon_04);gB;
     CALS(Imove(ImageR,ImageG));
     REMPLIR(vecteurs_____Gcon_11,BLANC);
                                        /* Deuxieme partie du masque correspondant a la moitie de la grande barre du 'F'.            */
     CALS(Imove(ImageG,ImageR));
     RCG(vecteurs_____Gcon_00);
     SET_COULEURS(NOIR,BLANC);
     gA;G1;gB;WCG(vecteurs_____Gcon_01);
     gA;DO(HAUTEUR_DU_F,BLOC(G2;));gA;
     gA;G3;gB;
     gA;DO(HAUTEUR_DU_F,BLOC(G4;));gB;
     RCG(vecteurs_____Gcon_01);
     DIAGONALE;
     gA;DO(SOUS(HAUTEUR_DU_F,UN),BLOC(G2;));gB;
     gA;G3;gB;g4;WCG(vecteurs_____Gcon_11);g2;
     CALS(Imove(ImageR,ImageG));
     REMPLIR(vecteurs_____Gcon_11,BLANC);
                                        /* Troisieme partie du masque correspondant a la barre verticale du 'F'.                     */

     CALS(Icomplementation(ImageA9,ImageR));
                                        /* A9 = masque de passage du 'S' derriere le 'F'.                                            */

     CALS(FgERASE());
                                        /* Clear...                                                                                  */
     RCG(vecteurs_____Gcon_00);
     EGAL(niveau_origine,NIVEAU_ORIGINE_DU_C);
     EGAL(niveau_extremite,NIVEAU_EXTREMITE_DU_C);
     SET_COULEURS(NOIR,NIVEAU_DU_C);
                                        /* Choix de la couleur du contour du 'C' (contour 21);                                       */
     gA;DO(ADD2(GRANDE_LARGEUR_DU_F,DEUX),BLOC(G1;));gA;
     gA;DO(SOUS(HAUTEUR_DU_F,UN),BLOC(G2;));gA;
     g3;WCG(vecteurs_____Gcon_21);g1;
                                        /* Positionnement au point de reference du 'C'.                                              */
     SET_ORIGINE(NEGA(FDU),NEGA(FU),FZERO);
     gA;DO(LARGEUR_DU_C,BLOC(G3;));gA;
     gA;DO(PETITE_HAUTEUR_DU_C,BLOC(G4;));gA;
     SET_EXTREMITE(NEGA(FU),FZERO,FZERO);
                                        /* Trace d'une courbe du 'C'.                                                                */
     MOVE_ORIGINE;
     gA;DO(LARGEUR_DU_C,BLOC(G3;));gA;
     gA;DO(GRANDE_HAUTEUR_DU_C,BLOC(G2;));gA;
     SET_EXTREMITE(FZERO,FU,FZERO);
                                        /* Trace d'une courbe du 'C'.                                                                */
     MOVE_ORIGINE;
     gA;DO(LARGEUR_DU_C,BLOC(G1;));gA;
     gA;DO(GRANDE_HAUTEUR_DU_C,BLOC(G2;));gA;
     SET_EXTREMITE(FU,FZERO,FZERO);
                                        /* Trace d'une courbe du 'C'.                                                                */
     MOVE_ORIGINE;
     gA;DO(LARGEUR_DU_C,BLOC(G1;));gA;
     gA;DO(PETITE_HAUTEUR_DU_C,BLOC(G4;));gA;
     SET_EXTREMITE(FDU,NEGA(FU),FZERO);
                                        /* Trace d'une courbe du 'C'.                                                                */
     SET_ORIGINE(NEGA(FU),NEGA(FU),FZERO);
     gA;G3;G4;gA;
     SET_EXTREMITE(NEGA(FRA8(FU)),NEGA(FRA8(FU)),FZERO);
                                        /* Trace d'une barre du 'C'.                                                                 */
     SET_ORIGINE(NEGA(FDU),FU,FZERO);
     gA;DO(SOUS(LARGEUR_DU_C,UN),BLOC(G3;));gA;
     gA;DO(SOUS(PETITE_HAUTEUR_DU_C,UN),BLOC(G2;));gA;
     SET_EXTREMITE(NEGA(FU),FZERO,FZERO);
                                        /* Trace d'une courbe du 'C'.                                                                */
     MOVE_ORIGINE;
     gA;DO(SOUS(LARGEUR_DU_C,UN),BLOC(G3;));gA;
     gA;DO(SOUS(GRANDE_HAUTEUR_DU_C,DEUX),BLOC(G4;));gA;
     SET_EXTREMITE(FZERO,NEGA(FU),FZERO);
                                        /* Trace d'une courbe du 'C'.                                                                */
     MOVE_ORIGINE;
     gA;DO(SOUS(LARGEUR_DU_C,UN),BLOC(G1;));gA;
     gA;DO(SOUS(GRANDE_HAUTEUR_DU_C,DEUX),BLOC(G4;));gA;
     SET_EXTREMITE(FU,FZERO,FZERO);
                                        /* Trace d'une courbe du 'C'.                                                                */
     MOVE_ORIGINE;
     gA;DO(SOUS(LARGEUR_DU_C,UN),BLOC(G1;));gA;
     gA;DO(SOUS(PETITE_HAUTEUR_DU_C,UN),BLOC(G2;));gA;
     SET_EXTREMITE(FDU,FU,FZERO);
                                        /* Trace d'une courbe du 'C'.                                                                */
     SET_ORIGINE(FU,NEGA(FU),FZERO);
     gA;G1;G4;gA;
     SET_EXTREMITE(FRA8(FU),NEGA(FRA8(FU)),FZERO);
                                        /* Trace d'une barre du 'C'.                                                                 */
     CALS(Imove(ImageR,ImageG));
     REMPLIR(vecteurs_____Gcon_21,COLOR_21);

     CALS(Imove(ImageA2,ImageR));
                                        /* A2 = 'C' seul.                                                                            */

     CALS(FgERASE());
                                        /* Clear...                                                                                  */
     RCG(vecteurs_____Gcon_00);
     EGAL(niveau_origine,NIVEAU_ORIGINE_DU_S);
     EGAL(niveau_extremite,NIVEAU_EXTREMITE_DU_S);
     SET_COULEURS(NOIR,NIVEAU_DU_S);
                                        /* Choix de la couleur du contour du 'S' (contour 31);                                       */
     gA;DO(UN,BLOC(G3;));gA;
     gA;DO(SOUS(HAUTEUR_DU_F,TROIS),BLOC(G2;));gA;
     g1;WCG(vecteurs_____Gcon_31);g3;
                                        /* Positionnement au point de reference du 'S'.                                              */
     SET_ORIGINE(FDU,NEGA(FU),FZERO);
     gA;DO(LARGEUR_DU_S,BLOC(G1;));gA;
     gA;DO(HAUTEUR_DU_S,BLOC(G4;));gA;
     SET_EXTREMITE(FU,FZERO,FZERO);
                                        /* Trace d'une courbe du 'S'.                                                                */
     MOVE_ORIGINE;
     gA;DO(LARGEUR_DU_S,BLOC(G1;));gA;
     gA;DO(HAUTEUR_DU_S,BLOC(G2;));gA;
     SET_EXTREMITE(FZERO,FU,FZERO);
                                        /* Trace d'une courbe du 'S'.                                                                */
     MOVE_ORIGINE;
     gA;DO(LARGEUR_DU_S,BLOC(G3;));gA;
     gA;DO(HAUTEUR_DU_S,BLOC(G2;));gA;
     SET_EXTREMITE(NEGA(FU),TRIP(QUAR(FU)),FZERO);
                                        /* Trace d'une courbe du 'S'.                                                                */
     MOVE_ORIGINE;
     gA;DO(SOUS(LARGEUR_DU_S,DEUX),BLOC(G3;));gA;
     gA;DO(SOUS(HAUTEUR_DU_S,DEUX),BLOC(G2;));gA;
     SET_EXTREMITE(FZERO,FU,FZERO);
                                        /* Trace d'une courbe du 'S'.                                                                */
     MOVE_ORIGINE;
     gA;DO(SOUS(LARGEUR_DU_S,DEUX),BLOC(G1;));gA;
     gA;DO(SOUS(HAUTEUR_DU_S,DEUX),BLOC(G2;));gA;
     SET_EXTREMITE(FU,FZERO,FZERO);
                                        /* Trace d'une courbe du 'S'.                                                                */
     MOVE_ORIGINE;
     gA;DO(SOUS(LARGEUR_DU_S,UN),BLOC(G1;));gA;
     gA;DO(SOUS(HAUTEUR_DU_S,UN),BLOC(G4;));gA;
     SET_EXTREMITE(FDU,NEGA(FU),FZERO);
                                        /* Trace d'une courbe du 'S'.                                                                */
     SET_ORIGINE(FU,FU,FZERO);
     gA;G1;G2;gA;
     SET_EXTREMITE(FRA8(FU),FRA8(FU),FZERO);
                                        /* Trace d'une barre du 'S'.                                                                 */
     SET_ORIGINE(NEGA(FDU),FU,FZERO);
     gA;DO(LARGEUR_DU_S,BLOC(G3;));gA;
     gA;DO(HAUTEUR_DU_S,BLOC(G2;));gA;
     SET_EXTREMITE(NEGA(FU),FZERO,FZERO);
                                        /* Trace d'une courbe du 'S'.                                                                */
     MOVE_ORIGINE;
     gA;DO(LARGEUR_DU_S,BLOC(G3;));gA;
     gA;DO(HAUTEUR_DU_S,BLOC(G4;));gA;
     SET_EXTREMITE(FZERO,NEGA(FU),FZERO);
                                        /* Trace d'une courbe du 'S'.                                                                */
     MOVE_ORIGINE;
     gA;DO(LARGEUR_DU_S,BLOC(G1;));gA;
     gA;DO(HAUTEUR_DU_S,BLOC(G4;));gA;
     SET_EXTREMITE(FU,NEGA(TRIP(QUAR(FU))),FZERO);
                                        /* Trace d'une courbe du 'S'.                                                                */
     MOVE_ORIGINE;
     gA;DO(SOUS(LARGEUR_DU_S,DEUX),BLOC(G1;));gA;
     gA;DO(SOUS(HAUTEUR_DU_S,DEUX),BLOC(G4;));gA;
     SET_EXTREMITE(FZERO,NEGA(FU),FZERO);
                                        /* Trace d'une courbe du 'S'.                                                                */
     MOVE_ORIGINE;
     gA;DO(SOUS(LARGEUR_DU_S,DEUX),BLOC(G3;));gA;
     gA;DO(SOUS(HAUTEUR_DU_S,DEUX),BLOC(G4;));gA;
     SET_EXTREMITE(NEGA(FU),FZERO,FZERO);
                                        /* Trace d'une courbe du 'S'.                                                                */
     MOVE_ORIGINE;
     gA;DO(SOUS(LARGEUR_DU_S,UN),BLOC(G3;));gA;
     gA;DO(SOUS(HAUTEUR_DU_S,UN),BLOC(G2;));gA;
     SET_EXTREMITE(NEGA(FDU),FU,FZERO);
                                        /* Trace d'une courbe du 'S'.                                                                */
     SET_ORIGINE(NEGA(FU),NEGA(FU),FZERO);
     gA;G3;G4;gA;
     SET_EXTREMITE(NEGA(FRA8(FU)),NEGA(FRA8(FU)),FZERO);
                                        /* Trace d'une barre du 'S'.                                                                 */
     CALS(Imove(ImageR,ImageG));
     REMPLIR(vecteurs_____Gcon_31,COLOR_31);

     CALS(Imove(ImageA3,ImageR));
                                        /* A3 = 'S' seul.                                                                            */

     CALS(Iand(ImageA8,ImageA3,ImageA9));
                                        /* A8 = 'S' seul avec elimination de ce qui est derriere le 'F'.                             */

     CALS(Ibinarisation(ImageA7,ImageA2,NOIR));
                                        /* A7 = masque du 'C'.                                                                       */
     CALS(Imultiplexage(ImageA6,ImageA2,ImageA7,ImageA1));
                                        /* A6 = 'C' devant le 'F'.                                                                   */
     CALS(Ibinarisation(ImageA7,ImageA8,NOIR));
                                        /* A7 = masque du 'S'.                                                                       */
     CALS(Imultiplexage(ImageR,ImageA8,ImageA7,ImageA6));
                                        /* R  = sigle du Firtech  "calcul scientifique"...                                           */

     CALi(Iupdate_image(nom_imageR,ImageR));

     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.