Nessun nuovo file, si continua da quelli dell'esercitazione precedente.
Dividete l'area di lavoro in quattro parti, tutte visualizzano lo stesso solido sotto l'influsso di diverse trasformazioni di proiezione:
Per adesso lasciate perdere la parte con proiezione prospettica e concentratevi sulle altre.
Mostrate un titoletto su ciascuna delle quattro parti che dica di che vista si tratta.
Mettete il disegno del solido in una display list che sara'
chiamata per disegnare tutte le viste usando in ciascuna vista
le trasformazioni opportune.
La funzione di disegno nella classe Solid ora
non disegna piu' il solido ma genera la display list per quel solido,
e va chiamata una sola volta all'inizio.
Le funzioni di disegno delle quattro viste (per ora tre)
chiameranno la display list gia' creata.
Aggiungete l'interazione con l'utente nelle tre viste ortografiche.
L'utente puo' traslare il solido nelle due direzioni
parallele al piano di proiezione, muovendo il mouse verso
alto/basso sinistra/destra con il bottone premuto.
Le traslazioni effettuate in una vista si devono ripercuotere sulle
altre viste.
Realizzate ora la vista prospettica. In questa vista l'utente puo' ruotare il punto di vista attorno alla scena e il solido su se stesso.
La rotazione del solido su se stesso, effettuata nella vista prospettica, si deve ripercuotere sulle tre viste ortogonali. Viceversa le traslazioni effettuate nelle tre viste ortogonali devono ripercuotersi sulla vista prospettica.
Permettete all'utente di specificare a run-time il nome del file da cui caricare il solido. Rimpiazzate il vecchio menu' "primitiva" (che avevamo nel caso 2D), con un menu' "file" a due voci:
Quando l'utente seleziona il caricamento di un solido, sulla input/output
area si attiva una keyboard callback che accetta un carattere alla volta,
formando man mano il nome del file (che viene mostrato all'utente),
fino alla pressione del ritorno a capo.
Quando l'utente preme il ritorno a capo, il programma prova a caricare
un solido dal file. In caso di successo, mostra il solido.
In ogni caso, mostra nella input/output area un messaggio con
l'esito dell'operazione (successo o fallimento).
Permettete il caricamento e la presenza contemporanea di piu' solidi
che l'utente puo' ruotare/traslare e a cui puo' cambiare gli attributi
indipendentemente.
Per ora il solido corrente e' selezionato da
menu' in base a sua etichetta numerica, come si faceva in 2D per le
primitive.
La voce di "scaricamento" del menu' "file" ora elimina il solido corrente. Il caricamento di un nuovo solido non provoca piu' lo scaricamento dei solidi gia' presenti.
Assumete un numero massimo di solidi (es. 20) che possono essere presenti contemporaneamente. Potete usare:
Quando l'utente sceglie "scaricamento" dal menu' "file",
cancella il solido corrente,
che puo' occupare una posizione qualsiasi nell'array di solidi.
La posizione corrispondente viene marcata vuota nell'array di 0/1.
Quando l'utente sceglie "caricamento" dal menu' file, si cerca
nell'array di 0/1 la prima posizione marcata vuota, e si mette il nuovo
solido nella posizione corrispondente dell'array di solidi.