Esempio di scritto di IG - parte pratica

Esercizio su OpenGL

Testo

Supponendo di avere a disposizione la display list "cubo", che disegna un cubo con facce parallele ai piani coordinati e diagonale (0,0,0) - (1,1,1), si consideri il seguente frammento di codice:
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glPushMatrix();
  glTranslate(2.0, 2.0, 0.0);
  glScalef(1.0, 1.0, 10.0);
  glCallList(cubo);
glPopMatrix();
glPushMatrix();
  glTranslate(0.0, 0.0, 10.0);
  glScalef(5.0, 5.0, 1.0);
  glCallList(cubo);
glPopMatrix();

Domande

Soluzione

Esercizio su interfacce

Testo

Consideriamo un'interfaccia per la scelta del colore da usare in una applicazione grafica.

L'applicazione e' una scatola nera con la quale l'interfaccia comunica attraverso due funzioni:

In entrambi i casi i tre valori (r,g,b) sono float compresi nell'intervallo [0,1].

Un'interfaccia testuale si comporterebbe come segue (scritto in pseudo-codice):

 1  float r, g, b;
 2  (r,g,b) = getColorFromApplication();
 3  output "Colore corrente:"
 4  output " rosso = ";
 5  output r;
 7  output " verde = ";
 8  output g;
 9  output " blu = ";
10  output b;
11  output "Nuovo colore:"
12  output "immetti il valore di rosso (in [0,1]):
13  input r;
14  if r not in [0,1] { output "errore"; goto 12; }
15  output "immetti il valore di verde (in [0,1]):
16  input g; 
17  if r not in [0,1] { output "errore"; goto 15; }
18  output "immetti il valore di blu (in [0,1]):
19  input b; 
20  if r not in [0,1] { output "errore"; goto 18; }
21  sendColotToApplication (r,g,b);
Supponiamo di organizzare un'interfaccia grafica nel seguente modo:

Domande

  1. Determinare quali abilitazioni e disabilitazioni sono opportune (es. se gli slider non sono stati spostati non ha senso fare apply).
  2. Scrivere in pseudocodice il contenuto delle callback (o event handler) dei tre slider e dei due bottoni, ricordando anche di gestire l'abilitazione e disabilitazione.
Supporre che il toolkit utilizzato per creare l'interfaccia ammetta le funzioni usuali per manipolare i vari tipi di dispositivi (es: assegnare e leggere il valore di uno slider, assegnare e leggere il colore di disegno per l'area grafica ecc.) e che preveda funzioni per abilitare e disabilitare un dispositivo.
Nello pseudocodice scrivere queste funzioni in linguaggio naturale oppure con nomi significativi, indicando chiaramente i loro parametri di ingresso e uscita.

Soluzione

  1. Inizialmente nessuna modifica e' stata ancora apportata al colore, il colore mostrato nell'interfaccia e' uguale a quello usato nell'applicazione. In questo stato sono abilitati solo gli slider, i due bottoni sono disabilitati.
    Non appena uno degli slider viene mosso, i due bottoni sono abilitati.
    La pressione di uno qualsiasi dei bottoni riporta ad uno stato in cui il colore mostrato nell'interfaccia e' uguale a quello dell'applicazione, dunque i due bottoni vengono nuovamente disabilitati.

  2. Pseudocodice della callback dello slider r_slider per il rosso (le altre due sono analoghe):
    r := valore segnato dallo slider r_slider;
    assegna colore di foreground di preview_area con (r,g,b);
    abilita reset_but;
    abilita apply_but;
    
    Pseudocodice della callback del bottone reset_but:
    (r,g,b) = getColorFromApplication();
    assegna valore di r_slider con r;
    assegna valore di g_slider con g;
    assegna valore di b_slider con b;
    assegna colore di foreground di preview_area con (r,g,b);
    disabilita reset_but;
    disabilita apply_but;
    
    Pseudocodice della callback del bottone reset_but:
    sendColotToApplication (r,g,b);
    disabilita reset_but;
    disabilita apply_but;