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