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