/*************************************************************************************************************************************/
/* */
/* 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
Copyright © Jean-François COLONNA, 2019-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2019-2024.