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