/*************************************************************************************************************************************/
/* */
/* G E N E R A T I O N D ' U N C A D R E A L ' I N T E R I E U R D ' U N E I M A G E : */
/* */
/* */
/* Author of '$xci/cadre_zoom$K' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 20210409113936). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* P A R A M E T R E S : */
/* */
/*************************************************************************************************************************************/
#define BAS_GAUCHE \
vecteurs_____Gcon_00 \
/* Definition du coin en bas a gauche du cadre, */
#define BAS_DROITE \
vecteurs_____Gcon_01 \
/* Definition du coin en bas a droite du cadre, */
#define HAUT_DROITE \
vecteurs_____Gcon_02 \
/* Definition du coin en haut a droite du cadre, */
#define HAUT_GAUCHE \
vecteurs_____Gcon_03 \
/* Definition du coin en haut a gauche du cadre. */
#define X_BAS__GAUCHE_IMAGE \
FZERO
#define Y_BAS__GAUCHE_IMAGE \
FZERO
/* Definition du coin en bas a gauche de l'image. */
#define X_HAUT_DROITE_IMAGE \
FU
#define Y_HAUT_DROITE_IMAGE \
FU
/* Definition du coin en haut a droite de l'image. */
#define X_BAS__GAUCHE_CADRE \
FZERO
#define Y_BAS__GAUCHE_CADRE \
FZERO
/* Definition du coin en bas a gauche du cadre dit "de zoom". */
#define X_HAUT_DROITE_CADRE \
FU
#define Y_HAUT_DROITE_CADRE \
FU
/* Definition du coin en haut a droite du cadre dit "de zoom". */
#define UTILISER_LE_MODE_ZOOM \
FAUX
#define FACTEUR_DU_ZOOM \
FDEUX
#define TRANSLATION_X_DU_ZOOM \
FZERO
#define TRANSLATION_Y_DU_ZOOM \
FZERO
#define EDITER_LES_COORDONNEES_DU_CADRE \
FAUX
/* Introduits le 20210413100408 les valeurs par defaut garantissant la compatibilite */
/* anterieure... */
/* */
/* On notera que, pour faciliter l'usage, les translations 'X' et 'Y' sont en coordonees */
/* "image" dans [0,1], c'est-a-dire avec les memes unites que {{xbgi,ybgi},{xhdi,yhdi}}. */
/* */
/* Le 20210414123924, pour 'v $xiirc/.MANF.B1.1.$U $xci/cadre_zoom$X', la valeur par defaut */
/* de 'EDITER_LES_COORDONNEES_DU_CADRE' est passee de 'VRAI' a 'FAUX'... */
#define MULTIPLICATEUR_D_EDITION_DE_LA_TRANSLATION_X_DU_ZOOM \
FU
#define DIVISEUR_D_EDITION_______DE_LA_TRANSLATION_X_DU_ZOOM \
FU
#define MULTIPLICATEUR_D_EDITION_DE_LA_TRANSLATION_Y_DU_ZOOM \
FU
#define DIVISEUR_D_EDITION_______DE_LA_TRANSLATION_Y_DU_ZOOM \
FU
/* Introduits le 20210423121808 pour faciliter les choses... */
#define EPAISSEUR_DU_CADRE \
DEUX
#define OPTIMISER_L_EPAISSEUR_DU_CADRE \
FAUX
#define EPAISSEUR_MINIMALE_DU_CADRE \
EPAISSEUR_DU_CADRE
#define EPAISSEUR_MAXIMALE_DU_CADRE \
EPAISSEUR_DU_CADRE
#define RACINE_CARREE_DE_LA_SURFACE_MINIMALE_DU_CADRE \
RACX(FRA4(FRA10(FRA10(FU))))
#define RACINE_CARREE_DE_LA_SURFACE_MAXIMALE_DU_CADRE \
RACX(FRA6(FRA10(FU)))
#define EDITER_LES_INFORMATIONS_UTILES_A_L_OPTIMISATION_DE_L_EPAISSEUR_DU_CADRE \
FAUX
#define NIVEAU_DU_CADRE \
BLANC
#define METTRE_UN_LISERE_AUTOUR_DU_CADRE \
FAUX
#define NIVEAU_DU_LISERE_DU_CADRE \
BLANC
/* Definition de l'apparence du cadre. Le lisere a ete introduit le 20210917073348. Quant */
/* a l'optimisation de l'epaisseur, elle a ete introduite le 20210919083331... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* M A C R O S U T I L E S : */
/* */
/*************************************************************************************************************************************/
#define CHAINE_XBGI \
"xbgi="
#define CHAINE_YBGI \
"ybgi="
#define CHAINE_XHDI \
"xhdi="
#define CHAINE_YHDI \
"yhdi="
#define CHAINE_XBG \
"xbg="
#define CHAINE_YBG \
"ybg="
#define CHAINE_XHD \
"xhd="
#define CHAINE_YHD \
"yhd="
/* Ces quatre synonymes ont ete introduits le 20210505101250... */
#define CHAINE_TRX \
"trx="
#define CHAINE_TRY \
"try="
#define RCG_AVEC_CHANGEMENT_EVENTUEL_DE_NIVEAU(contexte) \
Bblock \
RCG(contexte); \
/* Mise en place du contexte avant changement eventuel de niveau... */ \
\
Test(IL_FAUT(mettre_un_lisere_autour_du_cadre)) \
/* Possibilite introduite le 20210917073348... */ \
Bblock \
Test(IFOU(IFEQ(compteur_des_repetitions_du_Repe,PREMIERE_ITERATION_D_UN_Repe) \
,IFEQ(compteur_des_repetitions_du_Repe,epaisseur_effective_du_cadre) \
) \
) \
Bblock \
SET_COULEURS(NOIR,niveau_du_lisere_du_cadre); \
Eblock \
ATes \
Bblock \
SET_COULEURS(NOIR,niveau_du_cadre); \
Eblock \
ETes \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
/* Procedure 'RCG(...)' avec changement eventuel de niveau. Ceci a ete introduit le */ \
/* 20210917113739 suite a l'introduction d'un possible lisere de niveau different de */ \
/* celui du cadre... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* G E N E R A T I O N D ' U N C A D R E A L ' I N T E R I E U R D ' U N E I M A G E : */
/* */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE));
DEFV(CHAR,INIC(POINTERc(nom_imageA),NOM_PIPE));
DEFV(Float,INIT(X_bas__gauche_image,X_BAS__GAUCHE_IMAGE));
DEFV(Float,INIT(Y_bas__gauche_image,Y_BAS__GAUCHE_IMAGE));
/* Definition du coin en bas a gauche de l'image. */
DEFV(Float,INIT(X_haut_droite_image,X_HAUT_DROITE_IMAGE));
DEFV(Float,INIT(Y_haut_droite_image,Y_HAUT_DROITE_IMAGE));
/* Definition du coin en haut a droite de l'image. */
DEFV(Float,INIT(X_bas__gauche_cadre,X_BAS__GAUCHE_CADRE));
DEFV(Float,INIT(Y_bas__gauche_cadre,Y_BAS__GAUCHE_CADRE));
/* Definition du coin en bas a gauche du cadre dit "de zoom". */
DEFV(Float,INIT(X_haut_droite_cadre,X_HAUT_DROITE_CADRE));
DEFV(Float,INIT(Y_haut_droite_cadre,Y_HAUT_DROITE_CADRE));
/* Definition du coin en haut a droite du cadre dit "de zoom". */
DEFV(Logical,INIT(utiliser_le_mode_zoom,UTILISER_LE_MODE_ZOOM));
DEFV(Float,INIT(facteur_du_zoom,FACTEUR_DU_ZOOM));
DEFV(Float,INIT(translation_X_du_zoom,TRANSLATION_X_DU_ZOOM));
DEFV(Float,INIT(translation_Y_du_zoom,TRANSLATION_Y_DU_ZOOM));
DEFV(Logical,INIT(editer_les_coordonnees_du_cadre,EDITER_LES_COORDONNEES_DU_CADRE));
/* Introduits le 20210413100408 les valeurs par defaut garantissant la compatibilite */
/* anterieure... */
/* */
/* On notera que, pour faciliter l'usage, les translations 'X' et 'Y' sont en coordonees */
/* "image" dans [0,1], c'est-a-dire avec les memes unites que {{xbgi,ybgi},{xhdi,yhdi}}. */
DEFV(Float,INIT(multiplicateur_d_edition_de_la_translation_X_du_zoom,MULTIPLICATEUR_D_EDITION_DE_LA_TRANSLATION_X_DU_ZOOM));
DEFV(Float,INIT(diviseur_d_edition_______de_la_translation_X_du_zoom,DIVISEUR_D_EDITION_______DE_LA_TRANSLATION_X_DU_ZOOM));
DEFV(Float,INIT(multiplicateur_d_edition_de_la_translation_Y_du_zoom,MULTIPLICATEUR_D_EDITION_DE_LA_TRANSLATION_Y_DU_ZOOM));
DEFV(Float,INIT(diviseur_d_edition_______de_la_translation_Y_du_zoom,DIVISEUR_D_EDITION_______DE_LA_TRANSLATION_Y_DU_ZOOM));
/* Introduits le 20210423121808 pour faciliter les choses... */
DEFV(Positive,INIT(epaisseur_du_cadre,EPAISSEUR_DU_CADRE));
DEFV(Logical,INIT(optimiser_l_epaisseur_du_cadre,OPTIMISER_L_EPAISSEUR_DU_CADRE));
DEFV(Positive,INIT(epaisseur_minimale_du_cadre,EPAISSEUR_MINIMALE_DU_CADRE));
DEFV(Positive,INIT(epaisseur_maximale_du_cadre,EPAISSEUR_MAXIMALE_DU_CADRE));
DEFV(Float,INIT(racine_carree_de_la_surface_minimale_du_cadre,RACINE_CARREE_DE_LA_SURFACE_MINIMALE_DU_CADRE));
DEFV(Float,INIT(racine_carree_de_la_surface_maximale_du_cadre,RACINE_CARREE_DE_LA_SURFACE_MAXIMALE_DU_CADRE));
DEFV(Logical,INIT(editer_les_informations_utiles_a_l_optimisation_de_l_epaisseur_du_cadre
,EDITER_LES_INFORMATIONS_UTILES_A_L_OPTIMISATION_DE_L_EPAISSEUR_DU_CADRE
)
);
DEFV(genere_p,INIT(niveau_du_cadre,NIVEAU_DU_CADRE));
DEFV(Logical,INIT(mettre_un_lisere_autour_du_cadre,METTRE_UN_LISERE_AUTOUR_DU_CADRE));
DEFV(genere_p,INIT(niveau_du_lisere_du_cadre,NIVEAU_DU_LISERE_DU_CADRE));
/* Definition de l'apparence du cadre. Le lisere a ete introduit le 20210917073348. Quant */
/* a l'optimisation de l'epaisseur, elle a ete introduite le 20210919083331... */
/*..............................................................................................................................*/
GET_ARGUMENTSg(nombre_d_arguments
,BLOC(GET_ARGUMENT_L("SX_SY_SZ_____compatibilite_20070416=""compatibilite_20070416="
,SX_SY_SZ_____compatibilite_20070416
);
GET_ARGUMENT_C("imageA=""A=",nom_imageA);
GET_ARGUMENT_C("imageR=""R=",nom_imageR);
GET_ARGUMENT_F("X_bas_gauche_image=""Xbgi="CHAINE_XBGI ## CHAINE_XBG,X_bas__gauche_image);
GET_ARGUMENT_F("Y_bas_gauche_image=""Ybgi="CHAINE_YBGI ## CHAINE_YBG,Y_bas__gauche_image);
GET_ARGUMENT_F("X_haut_droite_image=""Xhdi="CHAINE_XHDI ## CHAINE_XHD,X_haut_droite_image);
GET_ARGUMENT_F("Y_haut_droite_image=""Yhdi="CHAINE_YHDI ## CHAINE_YHD,Y_haut_droite_image);
GET_ARGUMENT_F("X_bas_gauche_cadre=""Xbgc=""xbgc=",X_bas__gauche_cadre);
GET_ARGUMENT_F("Y_bas_gauche_cadre=""Ybgc=""ybgc=",Y_bas__gauche_cadre);
GET_ARGUMENT_F("X_haut_droite_cadre=""Xhdc=""xhdc=",X_haut_droite_cadre);
GET_ARGUMENT_F("Y_haut_droite_cadre=""Yhdc=""yhdc=",Y_haut_droite_cadre);
GET_ARGUMENT_L("mode_zoom=""mz=",utiliser_le_mode_zoom);
GET_ARGUMENT_F("facteur_zoom=""fz=",facteur_du_zoom);
GET_ARGUMENT_F("translation_X=""trX="CHAINE_TRX,translation_X_du_zoom);
GET_ARGUMENT_F("translation_Y=""trY="CHAINE_TRY,translation_Y_du_zoom);
GET_ARGUMENT_L("editer_coordonnees_du_cadre=""eec=",editer_les_coordonnees_du_cadre);
/* Arguments introduits le 20210413100408 et completes le 20210413103757... */
GET_ARGUMENT_F("multiplicateur_edition_translation_X=""mtrX=""mtrx="
,multiplicateur_d_edition_de_la_translation_X_du_zoom
);
GET_ARGUMENT_F("diviseur_edition_translation_X=""dtrX=""dtrx="
,diviseur_d_edition_______de_la_translation_X_du_zoom
);
GET_ARGUMENT_F("multiplicateur_edition_translation_Y=""mtrY=""mtry="
,multiplicateur_d_edition_de_la_translation_Y_du_zoom
);
GET_ARGUMENT_F("diviseur_edition_translation_Y=""dtrY=""dtry="
,diviseur_d_edition_______de_la_translation_Y_du_zoom
);
/* Introduits le 20210423121808 pour faciliter les choses... */
/* */
/* Pour aider a la determination des bonnes translations en 'X' et en 'Y' lors de */
/* l'utilisation suivante de 'v $xci/cadre_zoom$K'. On notera qu'un facteur unique pourrait */
/* suffire mais l'avantage d'utiliser un multiplicateur et un diviseur est que cela facilite */
/* l'utilisation de pourcentage, par exemple : */
/* */
/* mtrX=65 */
/* dtrx=100 */
/* */
/* definira un facteur egal a 65%... */
/* */
/* Le 20210504094842, je rappelle que la procedure est la suivante : */
/* */
/* xhdi */
/* | */
/* ------------------- -yhdi */
/* | | */
/* | IMAGE | */
/* | | */
/* | --------- | */
/* | | | | */
/* | | | | */
/* | | CADRE | | */
/* | | | | */
/* | | | | */
/* | --------- | */
/* |trY/ | */
/* | / | */
/* | / | */
/* |/trX | */
/* ybgi- ------------------- */
/* | */
/* xbgi */
/* */
/* et on passe de IMAGE a CADRE a l'aide d'un zoom translate defini par les arguments : */
/* */
/* facteur_zoom=... (definit le rapport IMAGE/CADRE) */
/* */
/* multiplicateur_edition_translation_X=...(definit 'mtrX') */
/* diviseur_edition_translation_X=... (definit 'dtrX') */
/* */
/* multiplicateur_edition_translation_Y=...(definit 'mtrY') */
/* diviseur_edition_translation_Y=... (definit 'dtrY') */
/* */
/* donnant ensuite les editions des translations en 'X' et en 'Y' : */
/* */
/* mtrX */
/* translation_X = (xhdi-xbgi).------ */
/* dtrX */
/* */
/* mtrY */
/* translation_Y = (yhdi-ybgi).------ */
/* dtrY */
/* */
/* exploitables ensuite pour positionner au mieux le CADRE. */
GET_ARGUMENT_I("epaisseur=""e=",epaisseur_du_cadre);
GET_ARGUMENT_L("optimiser_epaisseur=""oe=",optimiser_l_epaisseur_du_cadre);
GET_ARGUMENT_I("epaisseur_minimale=""em=",epaisseur_minimale_du_cadre);
GET_ARGUMENT_I("epaisseur_maximale=""eM=",epaisseur_maximale_du_cadre);
GET_ARGUMENT_F("racine_carree_surface_minimale=""rcsm=",racine_carree_de_la_surface_minimale_du_cadre);
GET_ARGUMENT_F("racine_carree_surface_maximale=""rcsM=",racine_carree_de_la_surface_maximale_du_cadre);
GET_ARGUMENT_L("editer_informations_epaisseur=""eie="
,editer_les_informations_utiles_a_l_optimisation_de_l_epaisseur_du_cadre
);
GET_ARGUMENT_P("cadre=""c=""niveau=""n=",niveau_du_cadre);
GET_ARGUMENT_L("lisere_cadre=""lc=",mettre_un_lisere_autour_du_cadre);
GET_ARGUMENT_P("lisere=""l=",niveau_du_lisere_du_cadre);
/* Definition de l'apparence du cadre. Le lisere a ete introduit le 20210917073348. Quant */
/* a l'optimisation de l'epaisseur, elle a ete introduite le 20210919083331... */
)
);
Test(PAS_D_ERREUR(CODE_ERROR(Iload_image(ImageG,nom_imageA))))
Bblock
DEFV(Float,INIT(X_bas__gauche_cadre_renormalise,FLOT__UNDEF));
DEFV(Float,INIT(Y_bas__gauche_cadre_renormalise,FLOT__UNDEF));
DEFV(Float,INIT(X_haut_droite_cadre_renormalise,FLOT__UNDEF));
DEFV(Float,INIT(Y_haut_droite_cadre_renormalise,FLOT__UNDEF));
/* Ainsi, on fait comme si les coordonnees dites "images" definies par : */
/* */
/* [X_bas__gauche_image,X_haut_droite_image] */
/* [Y_bas__gauche_image,Y_haut_droite_image] */
/* */
/* correspondait a [0,1]x[0,1] ce qui permet de renormaliser les coordonnees dites "cadre" : */
/* */
/* [X_bas__gauche_cadre,X_haut_droite_cadre] */
/* [Y_bas__gauche_cadre,Y_haut_droite_cadre] */
/* */
/* et donc de pouvoir tracer le nouveau cadre... */
Test(IL_FAUT(utiliser_le_mode_zoom))
/* Test introduit le 20210413100408... */
Bblock
DEFV(Float,INIT(largeur_de_l_image,SOUS(X_haut_droite_image,X_bas__gauche_image)));
DEFV(Float,INIT(hauteur_de_l_image,SOUS(Y_haut_droite_image,Y_bas__gauche_image)));
EGAL(X_bas__gauche_cadre
,AXPB(INVZ(facteur_du_zoom)
,SOUS(X_bas__gauche_image,X_bas__gauche_image)
,ADD2(X_bas__gauche_image,translation_X_du_zoom)
)
);
EGAL(Y_bas__gauche_cadre
,AXPB(INVZ(facteur_du_zoom)
,SOUS(Y_bas__gauche_image,Y_bas__gauche_image)
,ADD2(Y_bas__gauche_image,translation_Y_du_zoom)
)
);
EGAL(X_haut_droite_cadre
,AXPB(INVZ(facteur_du_zoom)
,largeur_de_l_image
,ADD2(X_bas__gauche_image,translation_X_du_zoom)
)
);
EGAL(Y_haut_droite_cadre
,AXPB(INVZ(facteur_du_zoom)
,hauteur_de_l_image
,ADD2(Y_bas__gauche_image,translation_Y_du_zoom)
)
);
/* Ainsi, le cadre est une version "zoomee" de l'image (de son cadre...). */
Test(IL_FAUT(editer_les_coordonnees_du_cadre))
/* Test introduit le 20210413103757... */
Bblock
Test(EST_VRAI(UNE_EDITION_PARALLELE_EST_POSSIBLE))
/* Test introduit le 20210414102644 car, en effet, ce programme sera en general utilise */
/* via 'execRVB' ('v $xiirc/.MANF.B1.1.$U execRVB....xci.cadre_zoom.X') et il est n'est */
/* pas utile que cette edition ait lieu trois fois... */
Bblock
CALS(Fsauts_de_lignes(UN));
CAL3(Prme1("LargeurImage=%+.^^^ [translation_X=fraction(LargeurImage)]\n",largeur_de_l_image));
CAL3(Prme1("HauteurImage=%+.^^^ [translation_Y=fraction(HauteurImage)]\n",hauteur_de_l_image));
/* Ces deux informations sont editees afin d'aider a determiner les translations en */
/* 'X' et 'Y' du zoom... */
CALS(Fsauts_de_lignes(UN));
CAL3(Prme2("%s%+.^^^\n",CHAINE_XBG,X_bas__gauche_cadre));
CAL3(Prme2("%s%+.^^^\n",CHAINE_XHD,X_haut_droite_cadre));
CAL3(Prme2("%s%+.^^^\n",CHAINE_YBG,Y_bas__gauche_cadre));
CAL3(Prme2("%s%+.^^^\n",CHAINE_YHD,Y_haut_droite_cadre));
CALS(Fsauts_de_lignes(UN));
CAL3(Prme2("%s%+.^^^\n"
,CHAINE_TRX
,SCAL(largeur_de_l_image
,diviseur_d_edition_______de_la_translation_X_du_zoom
,multiplicateur_d_edition_de_la_translation_X_du_zoom
)
)
);
CAL3(Prme2("%s%+.^^^\n"
,CHAINE_TRY
,SCAL(hauteur_de_l_image
,diviseur_d_edition_______de_la_translation_Y_du_zoom
,multiplicateur_d_edition_de_la_translation_Y_du_zoom
)
)
);
/* Pour aider a la determination des bonnes translations en 'X' et en 'Y' lors de */
/* l'utilisation suivante de 'v $xci/cadre_zoom$K'. */
CALS(Fsauts_de_lignes(UN));
Eblock
ATes
Bblock
Eblock
ETes
Eblock
ATes
Bblock
Eblock
ETes
Eblock
ATes
Bblock
Test(IL_FAUT(editer_les_coordonnees_du_cadre))
Bblock
PRINT_ATTENTION("l'edition des coordonnees du cadre n'a de sens qu'en mode 'zoom'.");
/* Edition introduite le 20210414102644... */
Eblock
ATes
Bblock
Eblock
ETes
Eblock
ETes
EGAL(X_bas__gauche_cadre_renormalise
,HOMZ(X_bas__gauche_cadre
,X_bas__gauche_image,X_haut_droite_image
,_____cNORMALISE_OX(Xmin),_____cNORMALISE_OX(Xmax)
,_____cNORMALISE_OX(Xmin)
)
);
EGAL(Y_bas__gauche_cadre_renormalise
,HOMZ(Y_bas__gauche_cadre
,Y_bas__gauche_image,Y_haut_droite_image
,_____cNORMALISE_OY(Ymin),_____cNORMALISE_OY(Ymax)
,_____cNORMALISE_OY(Ymin)
)
);
EGAL(X_haut_droite_cadre_renormalise
,HOMZ(X_haut_droite_cadre
,X_bas__gauche_image,X_haut_droite_image
,_____cNORMALISE_OX(Xmin),_____cNORMALISE_OX(Xmax)
,_____cNORMALISE_OX(Xmin)
)
);
EGAL(Y_haut_droite_cadre_renormalise
,HOMZ(Y_haut_droite_cadre
,Y_bas__gauche_image,Y_haut_droite_image
,_____cNORMALISE_OY(Ymin),_____cNORMALISE_OY(Ymax)
,_____cNORMALISE_OY(Ymin)
)
);
/* Ainsi, on fait comme si les coordonnees dites "images" definies par : */
/* */
/* [X_bas__gauche_image,X_haut_droite_image] */
/* [Y_bas__gauche_image,Y_haut_droite_image] */
/* */
/* correspondait a [0,1]x[0,1] ce qui permet de renormaliser les coordonnees dites "cadre" : */
/* */
/* [X_bas__gauche_cadre,X_haut_droite_cadre] */
/* [Y_bas__gauche_cadre,Y_haut_droite_cadre] */
/* */
/* et donc de pouvoir tracer le nouveau cadre... */
SET_COULEURS(NOIR,niveau_du_cadre);
/* Par defaut... */
SET_CURSOR(X_bas__gauche_cadre_renormalise
,Y_bas__gauche_cadre_renormalise
,_____cNORMALISE_OZ(Zmin)
);
WCG(BAS_GAUCHE);
/* Definition du coin en bas a gauche du cadre nouveau, */
SET_CURSOR(X_haut_droite_cadre_renormalise
,Y_bas__gauche_cadre_renormalise
,_____cNORMALISE_OZ(Zmin)
);
WCG(BAS_DROITE);
/* Definition du coin en bas a droite du cadre nouveau, */
SET_CURSOR(X_haut_droite_cadre_renormalise
,Y_haut_droite_cadre_renormalise
,_____cNORMALISE_OZ(Zmin)
);
WCG(HAUT_DROITE);
/* Definition du coin en haut a droite du cadre nouveau, */
SET_CURSOR(X_bas__gauche_cadre_renormalise
,Y_haut_droite_cadre_renormalise
,_____cNORMALISE_OZ(Zmin)
);
WCG(HAUT_GAUCHE);
/* Definition du coin en haut a gauche du cadre nouveau. */
begin_nouveau_block
Bblock
DEFV(Positive,INIT(epaisseur_effective_du_cadre,epaisseur_du_cadre));
/* Introduit le 20210919083331... */
Test(IL_FAUT(optimiser_l_epaisseur_du_cadre))
/* Test introduit le 20210919083331... */
Bblock
DEFV(Float,INIT(largeur_du_cadre
,SOUS(X_haut_droite_cadre_renormalise,X_bas__gauche_cadre_renormalise)
)
);
DEFV(Float,INIT(hauteur_du_cadre
,SOUS(Y_haut_droite_cadre_renormalise,Y_bas__gauche_cadre_renormalise)
)
);
DEFV(Float,INIT(racine_carree_de_la_surface_du_cadre,FLOT__UNDEF));
DEFV(Float,INIT(racine_carree_de_la_surface_seuillee_du_cadre,FLOT__UNDEF));
EGAL(racine_carree_de_la_surface_du_cadre,RACX(MUL2(largeur_du_cadre,hauteur_du_cadre)));
EGAL(racine_carree_de_la_surface_seuillee_du_cadre
,TRON(racine_carree_de_la_surface_du_cadre
,racine_carree_de_la_surface_minimale_du_cadre
,racine_carree_de_la_surface_maximale_du_cadre
)
);
/* C'est evidemment la racinee carree de la surface qu'il faut utiliser afin d'obtenir */
/* une valeur homogene a une longueur qui sera donc "compatible" avec l'epaisseur qui */
/* elle-aussi est une longueur... */
EGAL(epaisseur_effective_du_cadre
,INTE(HOMO(racine_carree_de_la_surface_seuillee_du_cadre
,racine_carree_de_la_surface_minimale_du_cadre,racine_carree_de_la_surface_maximale_du_cadre
,epaisseur_minimale_du_cadre,epaisseur_maximale_du_cadre
)
)
);
Test(IL_FAUT(editer_les_informations_utiles_a_l_optimisation_de_l_epaisseur_du_cadre))
/* Test introduit le 20210919174003... */
Bblock
CAL3(Prme1("LargeurCadre....................=%.^^^\n",largeur_du_cadre));
CAL3(Prme1("HauteurCadre....................=%.^^^\n",hauteur_du_cadre));
CALS(Fsauts_de_lignes(UN));
CAL3(Prme1("RacineCarreeSurfaceMinimaleCadre=%.^^^\n",racine_carree_de_la_surface_minimale_du_cadre));
CAL3(Prme1("RacineCarreeSurfaceCadre........=%.^^^\n",racine_carree_de_la_surface_du_cadre));
CAL3(Prme1("SurfaceMaximaleCadre............=%.^^^\n",racine_carree_de_la_surface_maximale_du_cadre));
CALS(Fsauts_de_lignes(UN));
CAL3(Prme1("RacineCarreeSurfaceSeuilleeCadre=%.^^^\n",racine_carree_de_la_surface_seuillee_du_cadre));
CALS(Fsauts_de_lignes(UN));
CAL3(Prme1("EpaisseurMinimaleCadre..........=%d\n",epaisseur_minimale_du_cadre));
CAL3(Prme1("EpaisseurCadre..................=%d\n",epaisseur_effective_du_cadre));
CAL3(Prme1("EpaisseurMaximaleCadre..........=%d\n",epaisseur_maximale_du_cadre));
Eblock
ATes
Bblock
Eblock
ETes
Eblock
ATes
Bblock
Eblock
ETes
Repe(epaisseur_effective_du_cadre)
Bblock
RCG_AVEC_CHANGEMENT_EVENTUEL_DE_NIVEAU(BAS_GAUCHE);gA;
RCG_AVEC_CHANGEMENT_EVENTUEL_DE_NIVEAU(BAS_DROITE);gB;
RCG_AVEC_CHANGEMENT_EVENTUEL_DE_NIVEAU(HAUT_DROITE);gB;
RCG_AVEC_CHANGEMENT_EVENTUEL_DE_NIVEAU(HAUT_GAUCHE);gB;
RCG_AVEC_CHANGEMENT_EVENTUEL_DE_NIVEAU(BAS_GAUCHE);gB;
/* Trace du cadre courant d'epaisseur unite. */
RCG(BAS_GAUCHE);
g1;g2;
WCG(BAS_GAUCHE);
/* Modification du coin en bas a gauche du cadre courant, */
RCG(BAS_DROITE);
g3;g2;
WCG(BAS_DROITE);
/* Modification du coin en bas a droite du cadre courant, */
RCG(HAUT_DROITE);
g3;g4;
WCG(HAUT_DROITE);
/* Modification du coin en haut a droite du cadre courant, */
RCG(HAUT_GAUCHE);
g1;g4;
WCG(HAUT_GAUCHE);
/* Modification du coin en haut a gauche du cadre courant. */
Eblock
ERep
Eblock
end_nouveau_block
CALi(Iupdate_image(nom_imageR,ImageG));
Eblock
ATes
Bblock
Test__CODE_ERREUR__ERREUR07;
Eblock
ETes
RETU_Commande;
Eblock
ECommande