/*************************************************************************************************************************************/ /* */ /* V I S U A L I S A T I O N D Y N A M I Q U E D E T O U T E S */ /* L E S C O U P E S D ' U N E I M A G E : */ /* */ /* */ /* Definition : */ /* */ /* Cette commande affiche dynamiquement */ /* toutes les coupes d'une image. */ /* */ /* */ /* Author of '$xci/coupes$K' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 1997??????????). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 #ifdef __VERSION__COMPILER_LE_GRAPHIQUE_SPIX #Aifdef __VERSION__COMPILER_LE_GRAPHIQUE_SPIX #Eifdef __VERSION__COMPILER_LE_GRAPHIQUE_SPIX #ifdef __VERSION__COMPILER_LE_GRAPHIQUE_X_WINDOW # include image_image_QUAD_IMAGE_EXT /* ATTENTION, avant le 20021230111157, les includes 'image_image_TRI_IMAGE_EXT' et */ /* 'image_image_QUAD_IMAGE_EXT' n'etaient faits que pour */ /* '__VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL'. */ /* Mais avec les modifications faites dans 'v $xiidX/fonct$vv$FON 20021230102551' il a */ /* fallu les rendre systematiques... */ # include image_drive_XWind_FONCTION_EXT # ifdef __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL # include image_drive_SiliG_FONCTION_1_EXT # Aifdef __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL # Eifdef __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL #Aifdef __VERSION__COMPILER_LE_GRAPHIQUE_X_WINDOW #Eifdef __VERSION__COMPILER_LE_GRAPHIQUE_X_WINDOW /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P A R A M E T R E S : */ /* */ /*************************************************************************************************************************************/ #include xci/display.01.I" #define DUREE_D_ATTENTE \ ZERO \ /* Attente implicite avant de passer a l'image suivante... */ #define MARQUER_L_EMPLACEMENT_DES_COUPES \ VRAI \ /* Faut-il marquer l'emplacement de la coupe effectuee dans l'image ? */ #define NIVEAU_DE_LA_COUPE_HORIZONTALE \ GRIS_8 \ /* Niveau de la coupe horizontale dans l'image. */ #define NIVEAU_DU_PROFIL_HORIZONTAL \ GRIS_8 \ /* Niveau du profil horizontal dans l'image. */ #include xci/coupe.01.I" #ifdef __VERSION__COMPILER_LE_GRAPHIQUE_SPIX #Aifdef __VERSION__COMPILER_LE_GRAPHIQUE_SPIX #Eifdef __VERSION__COMPILER_LE_GRAPHIQUE_SPIX #define METTRE_L_IMAGE_EN_FOND \ FAUX \ /* Indique s'il faut ('VRAI') ou pas ('FAUX') mettre l'image Argument en fond, sinon c'est */ \ /* un 'NOIR' qui est mis... */ #define EDITER_L_EMPLACEMENT_DES_COUPES \ FAUX \ /* Indique s'il faut ('VRAI') ou pas ('FAUX') editer l'emplacement normalise des coupes. */ #define PAS_DE_BALAYAGE_DES_COUPES_VERTICALES \ UN #define PAS_DE_BALAYAGE_DES_COUPES_HORIZONTALES \ UN /* Pour definir la "vitesse" de balayage... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M A C R O S U T I L E S : */ /* */ /*************************************************************************************************************************************/ #include xci/display.02.I" #include xci/coupe.02.I" /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* V I S U A L I S A T I O N D Y N A M I Q U E D E T O U T E S */ /* L E S C O U P E S D ' U N E I M A G E : */ /* */ /*************************************************************************************************************************************/ BCommande(nombre_d_arguments,arguments) /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(CHAR,INIC(POINTERc(nom_imageA),NOM_PIPE)); /* Nom de l'image a displayer. */ DEFV(CHAR,INIC(POINTERc(nom_paletteA),NOM_PIPE)); /* Nom de la palette a utiliser. */ DEFV(Logical,INIT(mettre_l_image_en_fond,METTRE_L_IMAGE_EN_FOND)); /* Indique s'il faut ('VRAI') ou pas ('FAUX') mettre l'image Argument en fond, sinon c'est */ /* un 'NOIR' qui est mis... */ DEFV(Int,INIT(duree_d_attente,DUREE_D_ATTENTE)); /* Duree d'attente apres l'affichage d'une image et avant son effacement. */ DEFV(deltaF_2D,dimension_de_la_fenetre); /* Dimension de la fenetre de visualisation. */ #include xci/display.03.I" #ifdef __VERSION__COMPILER_LE_GRAPHIQUE_SPIX #Aifdef __VERSION__COMPILER_LE_GRAPHIQUE_SPIX #Eifdef __VERSION__COMPILER_LE_GRAPHIQUE_SPIX #ifdef __VERSION__COMPILER_LE_GRAPHIQUE_X_WINDOW #Aifdef __VERSION__COMPILER_LE_GRAPHIQUE_X_WINDOW #Eifdef __VERSION__COMPILER_LE_GRAPHIQUE_X_WINDOW DEFV(Logical,INIT(coupe_horizontale,COUPE_HORIZONTALE)); DEFV(Logical,INIT(coupe_verticale,COUPE_VERTICALE)); /* Nature des coupes a realiser. */ DEFV(Logical,INIT(marquer_l_emplacement_des_coupes,MARQUER_L_EMPLACEMENT_DES_COUPES)); /* Faut-il marquer l'emplacement de la coupe effectuee dans l'image ? */ DEFV(Logical,INIT(marquer_l_emplacement_des_coupes_avant_les_coupes,MARQUER_L_EMPLACEMENT_DES_COUPES_AVANT_LES_COUPES)); /* Faut-il marquer l'emplacement de la coupe effectuee dans l'image avant la coupe elle-meme */ /* ('VRAI') ou apres ('FAUX') ? */ DEFV(Logical,INIT(marquer_les_coupes_par_un_segment,MARQUER_LES_COUPES_PAR_UN_SEGMENT)); /* Faut-il marquer les coupes par un segment ('VRAI') ou par un point isole ('FAUX') ? */ DEFV(genere_p,INIT(niveau_de_la_coupe_horizontale,NIVEAU_DE_LA_COUPE_HORIZONTALE)); DEFV(genere_p,INIT(niveau_de_la_coupe_verticale,NIVEAU_DE_LA_COUPE_VERTICALE)); /* Niveau de marquage des coupes a realiser. */ DEFV(genere_p,INIT(niveau_du_profil_horizontal,NIVEAU_DU_PROFIL_HORIZONTAL)); DEFV(genere_p,INIT(niveau_du_profil_vertical,NIVEAU_DU_PROFIL_VERTICAL)); /* Niveau de marquage des profils a realiser. */ DEFV(Logical,INIT(editer_l_emplacement_des_coupes,EDITER_L_EMPLACEMENT_DES_COUPES)); /* Indique s'il faut ('VRAI') ou pas ('FAUX') editer l'emplacement normalise des coupes. */ DEFV(Int,INIT(pas_de_balayage_des_coupes_verticales,PAS_DE_BALAYAGE_DES_COUPES_VERTICALES)); DEFV(Int,INIT(pas_de_balayage_des_coupes_horizontales,PAS_DE_BALAYAGE_DES_COUPES_HORIZONTALES)); /* Pour definir la "vitesse" de balayage... */ /*..............................................................................................................................*/ #ifdef __VERSION__COMPILER_LE_GRAPHIQUE_SPIX GET_ARGUMENTSi(nombre_d_arguments ,BLOC(VIDE; ) ); PRINT_ATTENTION("cette commande est ineffective sur ce SYSTEME"); PRINT_ATTENTION("les fonctions graphiques ne sont pas implementees"); #Aifdef __VERSION__COMPILER_LE_GRAPHIQUE_SPIX #Eifdef __VERSION__COMPILER_LE_GRAPHIQUE_SPIX #ifdef __VERSION__COMPILER_LE_GRAPHIQUE_X_WINDOW INITIALISATION_POINT_2D(coin_bas_gauche,_____cNORMALISE_OX11(X_COIN_BAS_GAUCHE),_____cNORMALISE_OY11(Y_COIN_BAS_GAUCHE)); /* Definition de la position implicite de la fenetre. */ EGAL(X11_____signaler_les_evenements_inattendus,SIGNALER_LES_EVENEMENTS_INATTENDUS); /* Initialisation du signalisateur d'evenement inattendu... */ GET_ARGUMENTSg(nombre_d_arguments ,BLOC(GET_ARGUMENT_L("SX_SY_SZ_____compatibilite_20070416=""compatibilite_20070416=" ,SX_SY_SZ_____compatibilite_20070416 ); /* Parametre introduit le 20070416155801... */ GET_ARGUMENT_C("serveur=",serveur_standard); GET_ARGUMENT_L("ne_pas_verifier_le_serveur=""npvs=" ,IXopen_____X_Window_accepter_le_serveur_sans_verification ); GET_ARGUMENT_N("verifier_le_serveur=""vs=" ,IXopen_____X_Window_accepter_le_serveur_sans_verification ); /* Arguments introduits le 20100109113124 pour acceder au serveur 'Xming' (Windows Vista). */ GET_ARGUMENT_L("attention=",editer_les_PRINT_ATTENTION_initiaux); GET_ARGUMENT_L("signaler=",X11_____signaler_les_evenements_inattendus); GET_ARGUMENT_L("trop_grandes=""trop_grande=" ,X11_____tenter_l_ouverture_des_fenetres_trop_grandes_par_rapport_a_l_ecran ); GET_ARGUMENT_C("imageA=""A=",nom_imageA); GET_ARGUMENT_C("paletteA=""palette=""pA=""p=",nom_paletteA); GET_ARGUMENT_L("fond=",mettre_l_image_en_fond); GET_ARGUMENT_I("nombre=""couleurs=",nombre_de_couleurs_necessaires); GET_ARGUMENT_I("duree=""d=",duree_d_attente); GET_ARGUMENT_L("centrer=""Fcentrer=""Fc=",centrer_la_fenetre); /* Parametre introduit le 20060427162459... */ GET_ARGUMENT_F("xc=""x=""X=",ASD1(coin_bas_gauche,x)); GET_ARGUMENT_F("yc=""y=""Y=",ASD1(coin_bas_gauche,y)); GET_ARGUMENT_C("substitution=""s=",nom_substitution); GET_ARGUMENT_L("horizontale=""horizontal=""h=",coupe_horizontale); GET_ARGUMENT_L("verticale=""vertical=""v=",coupe_verticale); GET_ARGUMENT_L("marquage=",marquer_l_emplacement_des_coupes); GET_ARGUMENT_L("avant=",marquer_l_emplacement_des_coupes_avant_les_coupes); GET_ARGUMENT_L("segments=""segment=",marquer_les_coupes_par_un_segment); GET_ARGUMENT_P("nch=",niveau_de_la_coupe_horizontale); GET_ARGUMENT_P("ncv=",niveau_de_la_coupe_verticale); GET_ARGUMENT_P("nph=",niveau_du_profil_horizontal); GET_ARGUMENT_P("npv=",niveau_du_profil_vertical); GET_ARGUMENT_L("editer=",editer_l_emplacement_des_coupes); GET_ARGUMENT_I("ph=",pas_de_balayage_des_coupes_horizontales); GET_ARGUMENT_I("pv=",pas_de_balayage_des_coupes_verticales); ) ); RECHERCHE_D_UNE_LISTE_DE_SUBSTITUTION(nom_substitution,substitution_courante,substitution_courante); /* Tentative de recherche de la substitution demandee... */ Test(PAS_D_ERREUR(CODE_ERROR(Iload_image(ImageA,nom_imageA)))) Bblock DEFV(Int,INIT(X,Xmin)); DEFV(Int,INIT(Y,Ymin)); DEFV(Float,INIT(position_coupe_verticale,FLOT__UNDEF)); DEFV(Float,INIT(position_coupe_horizontale,FLOT__UNDEF)); /* Coordonnees des coupes a realiser. */ CHARGEMENT_DE_LA_PALETTE_DE_COULEURS; /* Chargement des trois listes de substitution constitutive d'une palette. */ Test(IFEQ(substitution_courante,L_SUBSTITUTION_VARIABLE)) Bblock CALS(Icompactage_d_une_palette(nombre_de_couleurs_necessaires)); /* Pour la substitution 'VARIABLE', on procede a un compactage de la palette Argument. */ Eblock ATes Bblock Eblock ETes Test(IFNE(substitution_courante,L_SUBSTITUTION_NEUTRE)) Bblock SUBSTITUTION(substitution_courante); /* Positionnement de la substitution courante quelqu'elle soit (mais non 'NEUTRE'...). */ SET_FILTRAGE(ACTIF); /* Et on active le filtrage... */ Eblock ATes Bblock Eblock ETes INITIALISATION_ACCROISSEMENT_2D(dimension_de_la_fenetre,_____lNORMALISE_OX11(dimX11),_____lNORMALISE_OY11(dimY11)); /* Definition des dimensions de la fenetre. */ CALS(IXinitialisation()); /* Initialisation fondamentale introduite le 20160815122026... */ CALS(IXopen(serveur_standard ,nom_imageA ,ADRESSE(dimension_de_la_fenetre) ,centrer_la_fenetre ,ADRESSE(coin_bas_gauche) ,editer_les_PRINT_ATTENTION_initiaux ) ); Loop Bblock EGAL(position_coupe_verticale,_____cNORMALISE_OX(X)); EGAL(position_coupe_horizontale,_____cNORMALISE_OY(Y)); /* Normalisation des coordonnees... */ Test(IL_FAUT(mettre_l_image_en_fond)) Bblock CALi(Imove(ImageG,ImageA)); /* Initialisation de l'image Resultat. */ Eblock ATes Bblock CALi(Inoir(ImageG)); /* Mise du fond a 'NOIR'. */ Eblock ETes PUSH_FILTRAGE; /* Sauvegarde de l'etat courant du filtrage des niveaux. */ SET_FILTRAGE(INACTIF); Test(IL_FAUT(marquer_l_emplacement_des_coupes_avant_les_coupes)) Bblock MARQUAGE_DE_L_EMPLACEMENT_DES_COUPES; Eblock ATes Bblock Eblock ETes Test(IL_FAUT(coupe_horizontale)) Bblock CALS(Iprofil_horizontal(ImageG ,ImageA ,position_coupe_horizontale ,niveau_du_profil_horizontal ,marquer_les_coupes_par_un_segment ) ); /* Calcul du profil horizontal. */ Test(IL_FAUT(editer_l_emplacement_des_coupes)) Bblock CAL3(Prme1("Y=%+f\n",position_coupe_horizontale)); Eblock ATes Bblock Eblock ETes Eblock ATes Bblock Eblock ETes Test(IL_FAUT(coupe_verticale)) Bblock CALS(Iprofil_vertical(ImageG ,ImageA ,position_coupe_verticale ,niveau_du_profil_vertical ,marquer_les_coupes_par_un_segment ) ); /* Calcul du profil vertical. */ Test(IL_FAUT(editer_l_emplacement_des_coupes)) Bblock CAL3(Prme1("X=%+f\n",position_coupe_verticale)); Eblock ATes Bblock Eblock ETes Eblock ATes Bblock Eblock ETes Test(IL_NE_FAUT_PAS(marquer_l_emplacement_des_coupes_avant_les_coupes)) Bblock MARQUAGE_DE_L_EMPLACEMENT_DES_COUPES; Eblock ATes Bblock Eblock ETes CALS(IXdisplay(ImageG ,Image_ROUGE ,Image_VERTE ,Image_BLEUE ,INCREMENT_DES_NIVEAUX_PAR_DEFAUT_DE_IXdisplay ,TRANSLATER_LE_NOIR_PAR_DEFAUT_DE_IXdisplay ) ); /* On notera que {Image_ROUGE,Image_VERTE,Image_BLEUE} ne sont pas utiles ici, mais mises */ /* en place uniquement pour des raisons syntanxiques (introduit le 20030101171936). */ EGAL(X,COND(IFGE(X,Xmax),Xmin,nSUCX_TRON(X,pas_de_balayage_des_coupes_verticales))); EGAL(Y,COND(IFGE(Y,Ymax),Ymin,nSUCY_TRON(Y,pas_de_balayage_des_coupes_horizontales))); /* Deplacement des coupes... */ PULL_FILTRAGE; /* Et restauration des conditions initiales... */ Test(IZLT(duree_d_attente)) Bblock CALS(IXattente_de_l_evenement_ButtonPress()); /* Et on attend de nouveau un petit peu, jusqu'a ce que l'on appuie sur l'un des trois */ /* boutons de la souris... */ Eblock ATes Bblock DODO(duree_d_attente); /* Et on attend de nouveau un petit peu, pour un temps pre-determine... */ Eblock ETes Eblock ELoo CALS(IXclose()); Test(IFNE(substitution_courante,L_SUBSTITUTION_NEUTRE)) Bblock SET_FILTRAGE(INACTIF); SUBSTITUTION(L_SUBSTITUTION_NEUTRE); Eblock ATes Bblock Eblock ETes Eblock ATes Bblock Test__CODE_ERREUR__ERREUR07; Eblock ETes #Aifdef __VERSION__COMPILER_LE_GRAPHIQUE_X_WINDOW #Eifdef __VERSION__COMPILER_LE_GRAPHIQUE_X_WINDOW #ifdef __VERSION__COMPILER_LE_GRAPHIQUE_ROS GET_ARGUMENTSi(nombre_d_arguments ,BLOC(VIDE; ) ); PRINT_ATTENTION("cette commande est ineffective sur ce SYSTEME"); PRINT_ATTENTION("les fonctions graphiques ne sont pas implementees"); #Aifdef __VERSION__COMPILER_LE_GRAPHIQUE_ROS #Eifdef __VERSION__COMPILER_LE_GRAPHIQUE_ROS RETU_Commande; Eblock ECommande