Interface homme-machine

Document Sample
Interface homme-machine Powered By Docstoc
					                                                              Interface homme-machine

                                   IUP Technologies avancées des Sciences de Vivant
                                                2ème année option Bio-Informatique

                                                                               5 juin 2002
                                                                              durée : 1h30


                                                             Cours et notes de TP autorisés.


I. La boîte à outils GLUI

  Pour faciliter la création d’interfaces homme-machine, des boîtes à outils proposent
  des contrôles ou widgets prédéfinis. La fenêtre d’interface ci-dessous a été définie sous
  GLUI :




         1. Classer les différents widgets utilisés dans cette fenêtre d’interface selon la
         tâche interactive auxquels ils sont dédiés.
         2. Ecrire l’instruction GLUI de création de cette fenêtre d’interface.
         3. Ecrire la partie du code GLUI décrivant la création des widgets composant
         cette fenêtre d’interface en veillant à ce que, à l’initialisation, les valeurs par
         défaut soient celles de la fenêtre visualisée ci-dessus.


II. Le système de fenêtrage X Window System

  A quoi sert la commande glflush() de la librairie graphique OpenGL relativement au
  système de fenêtrage X Window System.
                                     Correction
I.      La boîte à outils GLUI
        1. Taches interactives :
               - saisie de texte : editable text (Name),
               - saisie d’une valeur réelle : spinner (Radius),
               - sélection binaire de propriétés : case à cocher ou checkbox
                   (Wireframe et Lit),
               - sélection exclusive du type d’objets : bouton radio ou radio buttons
                   (Object Type),
               - déclenchement de commande : bouton ou button (Quit)
               - spécification d’arguments et de propriétés : menu ou panel
                   (Properties)

        2. Création de la fenêtre d’interface :
          glui = GLUI_Master.create_glui( "GLUI", 0, 400, 50 );
                     /* name, flags, x and y initial position */
        3. Création des widgets :
          /***** Static Text *****/
          glui->add_statictext( "GLUI Sample" );

          /***** Panel *****/
          obj_panel = glui->add_panel( "Properties" );

          checkbox1 =  glui->add_checkbox_to_panel( obj_panel, "Wireframe",
                                                  &wireframe );
          checkbox2 = glui->add_checkbox_to_panel( obj_panel, "Lit", &lit );
          checkbox2->disable();

          glui->add_separator_to_panel( obj_panel );

          spinner  = glui->add_spinner_to_panel( obj_panel, "Radius",
                                                 GLUI_SPINNER_FLOAT, &radius);
          spinner->set_float_limits( 0.0, 250.0 );
          spinner->set_alignment( GLUI_ALIGN_RIGHT );

          edittext = glui->add_edittext_to_panel( obj_panel, "Name:",
                                                  GLUI_EDITTEXT_TEXT, name );

          /***** Control for the object type *****/
          GLUI_Panel *type_panel = glui->add_panel_to_panel(obj_panel,
                                                            "Object Type");
          radio = glui->add_radiogroup_to_panel (type_panel, &obj_type);
          glui->add_radiobutton_to_group( radio, "Sphere" );
          glui->add_radiobutton_to_group( radio, "Torus" );


          /****** A 'quit' button *****/
          glui->add_button( "Quit", 0,(GLUI_Update_CB)exit );


avec initialisation des variables actives ainsi :
          /** These are the live variables passed into GLUI ***/
          int   wireframe = 1; /* the checkbox is initially selected */
          int lit = 0;
          float radius = 125.475; /* initial value of the radius */
          char name[sizeof(GLUI_String)] = {"Object_1"};
          int   obj_type = 1; /* the radio button is initially selected */
                                                      Interface homme-machine
                                IUP Technologies avancées des Sciences de Vivant
                                             2ème année option Bio-Informatique

                                                                      septembre 2002
                                                                         durée : 1h30


                                                          Cours et notes de TP autorisés.


I.    Caractéristiques de GLUT

      1. Diriez-vous que GLUT est un système de fenêtrage, une librairie
         graphique, une boîte à outils ou un générateur d’interface ?
      2. Quel(s) type(s) d’interface utilise GLUT : fonction de rappel, variable
         active ou événement ?
      3. Sous quel mode focus les périphériques souris et clavier sont-ils gérés ?

II.   La boîte à outils GLUI

      1. Ecrire la partie du code GLUI décrivant la création des widgets composant
         cette fenêtre d’interface en veillant à ce que, à l’initialisation, les valeurs
         par défaut soient celles de la fenêtre visualisée ci-dessus.




      2. Modifier le code GLUI précédent pour que la valeur Taille 3 donnée par le
         widget contrôlant la translation par rapport à 0x soit affichée
         simultanément dans le widget de saisie de valeur Taille 2 ?
                                     Correction

I.       Caractéristiques de GLUT
         1. GLUT est une boîte à outils
         2. utilisant les fonctions de rappel
         3. la souris est en mode implicite et la clavier en mode esclave sur la souris.

II.      La boîte à outils GLUI
#include <string.h>
#include <GL/glut.h>
#include "glui.h"
/** These are the live variables passed into GLUI ***/
int   obj_type = 2; /* the third radio button is initially selected */
int   show_object1 = 0; /* the checkbox is not initially selected */
int   show_object2 = 1; /* the checkbox is initially selected */
int   show_object3 = 0; /* the checkbox is not initially selected */
float taille = 0.75; /* initial value of the height */
float obj_pos[] = { 0.0, 0.0, 0.0 };

/** Pointers to     the windows and some of the controls we'll create **/
GLUI *glui;
GLUI_Rollout        *roll;
GLUI_Panel          *obj_panel;
GLUI_Panel          *panel0;
GLUI_Panel          *panel1;
GLUI_Panel          *panel2;
GLUI_Checkbox       *checkbox1;
GLUI_Checkbox       *checkbox2;
GLUI_Checkbox       *checkbox3;
GLUI_Checkbox       *checkbox4;
GLUI_RadioGroup     *radio;
GLUI_Listbox        *listbox;
GLUI_Spinner        *spinner;
GLUI_EditText       *edittext;

/**************************************** control_cb() *******************/
/* GLUI control callback                                                 */
void control_cb( int control )
{
 if (control == 1) /* translation */
 {/*printf(" x = %f, y = %f, z = %f \n",obj_pos[0],obj_pos[1],obj_pos[2]); */
    glui->sync_live();
 }
}
/**************************************** main() ********************/
void main(int argc, char* argv[])
{
   /****************************************/
   /*         Here's the GLUI code         */
   /****************************************/

     printf( "GLUI version: %3.2f\n", GLUI_Master.get_version() );

     /***** Window creation *****/
     /* name, flags, x, and y initial position */
     glui = GLUI_Master.create_glui( "GLUI", 0, 400, 50 );

     /***** Rollouts *****/
     roll = glui->add_rollout( "Menu pliant", true );
    /***** Menu de boutons radio *****/
    panel0 = glui->add_panel_to_panel( roll, "Les filles 1");

    radio = glui->add_radiogroup_to_panel(panel0,&obj_type,1);
    glui->add_radiobutton_to_group( radio, "Camille" );
    glui->add_radiobutton_to_group( radio, "Marie" );
    glui->add_radiobutton_to_group( radio, "Juliette" );

    glui->add_column_to_panel( roll, true );

    /***** Menu de liste de noms *****/
    panel1 = glui->add_panel_to_panel( roll, "Les filles 2" );

    listbox = glui->add_listbox_to_panel ( panel1, "Liste");
    listbox->add_item( 1, "Camille" );
    listbox->add_item( 2, "Marie" );
    listbox->add_item( 3, "Juliette" );

/***** Menu de case à cocher *****/
 panel2 = glui->add_panel_to_panel( roll, "Les filles 3" );

    glui->add_column_to_panel( panel2 );
    checkbox2 = glui->add_checkbox_to_panel( panel2,"Camille",&show_object1 );

    glui->add_column_to_panel( panel2 );
    checkbox2 = glui->add_checkbox_to_panel( panel2,"Marie",&show_object2 );

    glui->add_column_to_panel( panel2 );
    checkbox2 = glui->add_checkbox_to_panel( panel2,"Juliette",&show_object3 );

    /***** Panel *****/
    obj_panel = glui->add_panel( "Leur taille" );

    /***** Ascenceur *****/
    spinner = glui->add_spinner_to_panel( obj_panel, "Taille 1",
                                           GLUI_SPINNER_FLOAT, &taille);
    spinner->set_float_limits( 0.0, 2.0 );
    spinner->set_alignment( GLUI_ALIGN_LEFT );

    /***** Saisie text *****/
    edittext = glui->add_edittext_to_panel( obj_panel, "Taille 2",
                                            GLUI_EDITTEXT_FLOAT, &obj_pos );

    glui->add_column_to_panel( obj_panel, false );

    /***** Fleche *****/
    GLUI_Translation *trans_x = glui->add_translation_to_panel
          ( obj_panel, "Taille 3", GLUI_TRANSLATION_X,obj_pos, 1, control_cb );
    trans_x->set_speed( .005 );

    /****** A 'quit' button *****/
    glui->add_button( "Quit", 0,(GLUI_Update_CB)exit );

    /* We register the idle callback with GLUI, not with GLUT */
    GLUI_Master.set_glutIdleFunc( NULL );

    /**** Regular GLUT main loop ****/
    glutMainLoop();
}

				
DOCUMENT INFO