The objective of this project is to implement an application that can define and display the rescue mission path and the areas of interest visible from the different points of view (car, plane, ship) of the rescue team.
1 of 26
Download to read offline
More Related Content
Rescue Mission
1. Rescue Mission Antonio Dallap竪 115401 Gabriele Baronti 113188 Principles of Computer Graphics 2008 - 2009 Relazione esplicativa del codice
3. Package Buttons Le classi in RescueMission.Buttons sono dei layers che per la maggior parte hanno funzione di bottoni Estendono quasi tutti da ButtonBaseLayer tranne ButtonsBgLayer ButtonNewLayer ButtonPathLayer ButtonLOSLayer e ButtonAnimateLayer sono bottoni molto simili che fondamentalmente hanno uno stato premuto e uno non premuto ButtonVisualLayer ha 4 stati possibili che vengono ciclati cliccandoci sopra (dallo stato 0 si passa all1, dall1 al 2, ecc...) ButtonsBgLayer scrive i suggerimenti e il Flare selezionato
4. ButtonBaseLayer Disegna un bottone e la parte di barra di sfondo sottostante alla posizione desiderata position determina la posizione sullasse delle y: ALIGN_TOP - lo disegna in alto ALIGN_CENTER - lo disegna in centro ALIGN_BOTTOM - lo disegna in basso btnNumber determina la posizione sullasse delle x: 0, 1, 2, - moltiplicato per la larghezza totale di un bottone (considerando bordi, la scala, ecc) mi da loffset sulle x per poter disegnare un bottone al posto prestabilito Per disegnare correttamente il bottone in base alla scala desiderata e alla finestra vengono usate le funzioni: computeScale(...) getScaledButtonWidth(...) getScaledButtonHeight(...) computeLocation(...)
5. ButtonBaseLayer Viene disegnato nella funzione drawIcon(...) Nella fase di picking viene controllata la posizione del mouse e viene stabilito se si trova o meno sopra il bottone. Quindi viene settata la texture corretta a seconda se il mouse 竪 sopra al bottone o meno, se il bottone 竪 premuto o meno, o se il bottone 竪 disattivato mouseExited(...) (Il mouse sicuramente non 竪 sul bottone) Viene aggiornata la texture a seconda se il bottone 竪 disattivato o meno
6. ButtonBaseLayer Per mantenere lo stato di un bottone si usano le variabili: isBtnPressed se il bottone 竪 premuto o meno isBtnOver se il mouse 竪 sopra il bottone isBtnEnabled se il bottone 竪 abilitato o meno mousePressed(...) si setta isBtnPressed nel caso il mouse sia sopra il bottone, e si chiama buttonClicked(...) setEnabled(...) si setta isBtnEnabled true o false setOnOff(...) si setta isBtnPressed true o false e isBtnEnabled a true
7. ButtonNewLayer Estende ButtonBaseLayer Nel creatore vengono settate le variabili per posizionare il bottone e per trovare le textures buttonClicked(...) Set RescueMissionApplication.isNewPressed a true se era false e viceversa (sostanzialmente se non era premuto diventa premuto e se era premuto non lo 竪 pi湛)
8. ButtonPathLayer Estende ButtonBaseLayer Nel creatore vengono settate le variabili per posizionare il bottone e per trovare le textures buttonClicked(...) Setta, nel Flare selezionato, isArmed a true se era false e viceversa isArmed viene usata per sapere quando si sta disegnando i percorso (sostanzialmente se non era premuto diventa premuto e se era premuto non lo 竪 pi湛)
9. ButtonLOSLayer Estende ButtonBaseLayer Nel creatore vengono settate le variabili per posizionare il bottone e per trovare le textures buttonClicked(...) Setta, nel Flare selezionato, isOn a true se era false e viceversa isOn viene usata per sapere se 竪 abilitato il Line Of Sight del Flare (sostanzialmente se non era premuto diventa premuto e se era premuto non lo 竪 pi湛)
10. ButtonLOSLayer Estende ButtonBaseLayer Nel creatore vengono settate le variabili per posizionare il bottone e per trovare le textures buttonClicked(...) Setta, nel Flare selezionato, isOn a true se era false e viceversa isOn viene usata per sapere se 竪 abilitato il Line Of Sight del Flare Se viene abilitato lo si disegna (si setta isTimeToDo a true) altrimenti lo si cancella (deleteLineOfSight()) (sostanzialmente se non era premuto diventa premuto e se era premuto non lo 竪 pi湛)
11. ButtonAnimateLayer Estende ButtonBaseLayer Nel creatore vengono settate le variabili per posizionare il bottone e per trovare le textures buttonClicked(...) Chiama, nel Flare selezionato, setAnimate che fa partire o interrompe lanimazione a seconda se isAnimating era true o false (sostanzialmente se non era premuto diventa premuto e se era premuto non lo 竪 pi湛)
12. ButtonVisualLayer Estende ButtonBaseLayer Nel creatore vengono settate le variabili per posizionare il bottone e per trovare le textures In drawIcon(...) e mousePressed(...) viene implementata la logica per far funzionare il bottone come una sorta di lista che seleziona la voce seguente quando viene cliccata whatVisual rappresenta la visuale selezionata 0 la visuale libera 1 la visuale dalla macchina della polizia (car) 2 la visuale dallF-117 (plane) 3 la visuale dallastronave (spaceshio)
13. ButtonVisualLayer buttonClicked(...) Setta, nel Flare selezionato, whatVisual al valore di visualSelected setEnabled(...) Abilita/disabilita il bottone e resetta visualSelected e whatVisual del Flare selezionato (vengono settate a 0)
14. ButtonsBgLayer Disegna la parte di barra sotto i suggerimenti, un cerchietto col colore del Flare selezionato e il nome di tale Flare Simile a ButtonBaseLayer ma non implementa MouseListener ed 竪 pi湛 semplice Viene disegnato nella funzione drawIcon(...) Scrive suggerimenti diversi nel caso sia selezionato il bottone New, Path, o altro Disegna un cerchietto con il colore del flare selezionato con drawCircle(...) o una cerchietto vuoto se non 竪 selezionato nulla con drawCirconference(...) Scrive il nome del file selezionato o none selected
15. Package WorldWind Le classi in RescueMission.WorldWind sono dei layers e altre classi di JWW che non sono state molto modificate CompassLayer 竪 il compass layer ma visualizzato in basso WorldMapLayer 竪 lomonimo layer visualizzato in basso e ora importa MouseListener per far selezionare il luogo desiderato, dove ci si vuol spostare, direttamente da l狸 ScalebarLayer 竪 lomonimo layer visualizzato in basso, in centro Configuration 竪 lomonima classe che per嘆 legge i layer da caricare dal Configorldwind.properties locale, il quale far caricare i layer stabiliti Polyline 竪 lomonima classe che non implementa movable RayCastingSupport 竪 la classe che viene usata per calcolare e disegnare il Line Of Sight di un Flare
16. Colors Questa classe offre delle funzioni per ottenere dei colori univoci dispatchColor() per ottenere un colore univoco isUsed(...) per sapere se il colore 竪 stato gi usato La classe ha un array di 1024 elementi per memorizzare i colori gi utilizzati, supponendo che nellapplicazione non saranno mai posizionati cos狸 tanti Flares
17. FlareGFXLoader Questa classe viene usata per caricare in RescueMissionApplication i modelli e le textures che saranno poi utilizzati dai flare Viene creata in RescueMissionApplication Estende Renderable e GLEventListener Inizialmente il caricamento dei modelli veniva eseguito allinizializzazione di ogni Flare ma con alcune schede video dava errori al caricamento delle textures, inoltre essendo eseguito una volta sola rende il codice pi湛 ottimizzato
18. FlareDragger Questa classe estende SelectListener e permette di draggare i Flare Permette di selezionare un Flare cliccandoci sopra col tasto sinistro e di eliminarlo cliccandolo col destro Nel caso si stia disegnando il percorso di un Flare (se isArmed del Flare selezionato 竪 true), le funzioni di selezione, cancellazione e dragging sono inibite
19. Flare Viene disegnato nella doRender(...), che viene chiamata allinterno della render(...) dopo linizializzazione avvenuta chiamando la initialize(...) Initialize(...) viene chiamata una sola volta e crea delle glCallList contenenti le informazioni per disegnare i modelli 3d e le sfere che compongono un Flare doRender(...) viene chiamata dalla render(...) disegnando il contenuto delle glCallList nella posizione attuale del Flare, pos, settando lorientamento dei modelli 3d in base alla direzione del Flare (quando viene draggato o durante le animazioni) e linclinazione in base alla curva terrestre Langolo della direzione viene salvato nella variabile globale angle Se isTimeToDo 竪 true chiama la update() che aggiorner il LOS La direzione viene calcolata usando pos e oldPos
20. Flare moveTo() aggiorna la posizione pos e oldPos e, se isAnimating 竪 false, modifica il primo punto del percorso facendolo combaciare con la posizione attuale update(), se isOn 竪 true, chiama la computeLineOfSight() computeLineOfSight(), se isComputing 竪 false, lo setta a true, calcola nuovamente il LOS e lo disegna, una volta finito setta nuovamente isComputing a false deleteLineOfSight() cancella il LOS disegnato mouseReleased(...) e mouseWheelMoved(...) settano isTimeToDo a true, dato che corrispondono ad azioni del mouse che, cambiando posizione o vicinanza alla terra e conseguente aggiornamento delle altitudini, devono far ricalcolare il LOS
21. Flare addPosition() aggiunge un nodo al percorso e aggiorna la linea replacePosition() modifica lultimo nodo inserito e aggiorna la linea removePosition() cancella lultimo nodo inserito e aggiorna la linea setAnimate() utilizzando un thread anima il Flare, che segue il percorso stabilito, se isAnimating 竪 true, altrimenti interrompe lanimazione Vengono calcolate lunghezza e posizioni intermedie per rendere la velocit del Flare uniforme Vengono utilizzate le varie visuali (car, plane, spaceship) a seconda della variabile whatVisual I modelli 3d vengono orientati in base alla variabile globale angle che 竪 aggiornata alla direzione attuale Alla creazione del flare viene impostato un numero univoco che viene salvato in number
22. RescueMissionApplication La classe che contiene il main Contiene la classe AppFrame che estende JFrame, che alla creazione inizializza tutto lambiente sul quale si basa lapplicazione In variabili globali statiche, sono memorizzati I modelli 3d (model_spaceship, ...) Le textures (texture_plane, texture_car) I layer dei bottoni (bottonNewLayer, ...) Il numero del Flare selezionato (selectedFlare) Il layer su cui si disegnano i Flare (layer) Unarraylist contenente i Flare (flares) Lo stato del bottone NEW (isNewPressed) getFlareFromNumber(...) restituisce, dato il number di un Flare, lindice del Flare allinterno di flares
23. RescueMissionApplication selectFlare(...) seleziona il Flare, settando in selectedFlare il number del Flare, e settando lo stato dei vari bottoni a seconda dello stato delle variabili nel Flare selectNone(...) deseleziona il Flare, settando selectedFlare a -1 e disabilitando tutti i bottoni tranne il NEW initialize(...) Inizializza gran parte delle variabili globali statiche Aggiunge a layer la renderizzazione di unistanza di FlareGFXLoader Abilita layer e lo aggiunge ai layers di wwd Aggiunge il SelectListener FlareDragger a wwd Aggiunge MouseListener MouseMotionListener PositionListener KeyListener
24. RescueMissionApplication mousePressed Se la posizione 竪 off globe esce Se era premuto NEW crea un Flare alla posizione specificata Se era premuto anche il tasto SHIFT permette linserimento del nome Se era premuto anche il tasto CTRL mantiene il bottone NEW premuto e permette di creare, di seguito, altri Flare Se isArmed del Flare selezionato 竪 true (cio竪 si sta definendo il percorso) Aggiunge un nodo chiamando la addPosition() Modifica lultimo nodo con la replacePosition() premendo SHIFT Cancella lultimo nodo con la removePosition() premendo CTRL Se si aggiunge o modifica viene settato isArmed del Flare selezionato a true
25. RescueMissionApplication mouseReleased Se isArmed del Flare selezionato 竪 true (cio竪 si sta definendo il percorso) Viene settato isArmed del Flare selezionato a false keyPressed S saveToFile(...) salva i Flare L loadFromFile(...) carica i Flare 1 visualizza solo la car Flare selezionato 2 visualizza solo il plane del Flare selezionato 3 visualizza solo la spaceship del Flare selezionato 0 visualizza tutti i modelli del Flare selezionato
26. FlareSerializable Questa classe viene utilizzata per salvare in un file delle variabili dalle quali 竪 possibile ricostruire un Flare Le variabili di tipo Position sono salvate sotto forma di tre double (latitudine, longitudine, altezza) Nella classe Flare 竪 possibile creare un nuovo Flare passando come parametro un FlareSerializable, in questo modo le variabili standard vengono inizializzate come di consueto mentre quelle specifiche che caratterizzano il Flare vengono inizializzate utilizzando le variabili del FlareSerializable