Per saperne di più su AVS/Express e su progetti che lo utilizzano è disponibile una lista di puntatori. |
Il Data Viewer è diviso in quattro parti:
Nell'esempio viene visualizzato il risultato del modulo LEA (Lagrangian-Eulerian-Advection) per la visualizzazione di campi vettoriali 2D dipendenti dal tempo. Questo modulo è disponibile nel repository dello IAC. |
Vengono chiamati editors le interfacce a varie funzioni di AVS/Express. Bisogna ricordarsi di selezionare l'oggetto grafico di interesse prima di utilizzare Editors -> Object. |
L'importazione dei dati è la parte più importante di un sistema di visualizzazione. In ordine decrescente di facilità le opzioni disponibili sono:
|
In AVS/Express esistono moduli per interagire con le visualizzazioni. Ricordarsi che la visualizzazione ha lo scopo di raggiungere una comprensione d'assieme dei dati, mentre questi strumenti permettono una lettura precisa e puntuale dei valori. |
Spesso il punto finale di una visualizzazione è la presentazione dei risultati ad un congresso o su una pubblicazione. Si possono esportare immagini o animazioni. Ecco alcuni esempi nel campo chimico. |
I moduli si trascinano dalla libreria all'area di lavoro (Network Editor: NE). Si uniscono disegnando il collegamento. Disegnando ancora il collegamento si disconnettono. Si aprono con un doppio click. Il bottone destro ha varie funzioni:
Sul NE il Pan si fa con Shift-M2 (sul PC con Shift-ButtonLeft); lo Zoom invece con Ctrl-M2 (sul PC con Ctrl-ButtonLeft). |
Se non avete troppa fantasia provate per esempio: Examples -> Visualization -> Orthoslice. Aprite il modulo e staccate un link rosso (si stacca ridisegnando il collegamento). Che cosa cambia? |
Il lettore si trova nella libreria Main. Il background digradante si trova sotto Main -> Geometries. |
|
L'Object Manager gestisce l'ordine di esecuzione dei moduli, il passaggio dei dati, etc. ed è il cuore di AVS/Express. L'Object Manager ha tre interfacce:
Un esempio di linguaggio V l'avete aprendo il file ex1.v salvato nell'esercizio precedente. In questo corso non approfondiremo questo linguaggio, ma è quello che rende speciale e potente AVS/Express. Statements di linguaggio V e comandi per l'Object Manager possono anche essere scritti dal prompt VCP, quello che appare come OM(Root) -> |
Per modificare le proprietà di rendering di un oggetto grafico:
Nell'elenco degli oggetti Top indica la radice dell'albero degli oggetti grafici. |
Interagendo col viewer si può ruotare l'oggetto, la camera oppure le luci (primi tre bottoni della Toolbar). Le luci hanno il loro editor. Per renderle bidirezionali si può usare il secondo bottone da sinistra della Toolbar. Per accelerare la manipolazione dell'oggetto si può abilitare l'Alternate Object (sesto da destra). La proiezione ortografica (quella di default) rende più precise le misure, ma non è molto naturale come la proiezione prospettica. Si cambia col terzo bottone da destra. |
Nell'editor delle luci il toggle "Show Lights" visualizza una freccia per indicare la direzione delle luci. |
Riprendiamo molto rapidamente i concetti già visti di formato geometrico dei dati. Quello che cambia è la quantità di informazioni necessarie per descrivere la geometria del dato.
|
Un esempio di formato scatter è il file che utilizzeremo conc.dat Un esempio di formato uniform è il file che utilizzeremo splash.fld oppure una qualsiasi immagine. |
Un esempio di strutturato è il file di esempio di AVS/Express bluntfin.fld Un esempio di mesh non strutturata è il file che utilizzeremo example2.inp o gli esempi di AVS/Express per il lettore UCD. |
In AVS/Express il tipo di dato che permette di descrivere tutte queste configurazioni geometriche si chiama Field. Attenzione! In AVS/Express il termine field si riferisce a due cose distinte:
|
Se volete vedere la struttura di un field istanziate il modulo Main -> Visualization -> Field Schema -> Field e apritelo. |
La grid è composta semplicemente dalle coordinate dei punti. I dati associati ai nodi sono sotto node_data. |
Tutto quanto riguarda la connettività si trova nella Mesh. Ci possono essere distinti gruppi di celle (per esempio un gruppo per ogni tipo di cella). Ognuno di questi si chiama Cell Set. |
Questa struttura può essere descritta come Structured con 2 colonne e 5 righe oppure come Unstructured con 1 cell set di tipo Quad. |
Alla cella può essere associato uno o più dati. |
Rispetto al trattamento di node data, ci sono meno moduli che trattano cell data. Spesso, quindi, è meglio convertire i cell data in node data col modulo cell_to_node. |
Il field Unstructured offre la massima flessibilità di descrizione dei dati al prezzo di una maggiore complessità. Per semplificarne la creazione si possono usare i moduli Main -> Field Mappers -> Mesh Mappers. |
Andando in ordine di semplificazione: Structured ha la connettività implicita, per cui non bisogna fornirla. |
Rectilinear non ha bisogno delle coordinate di ogni nodo, bastano quelle dei nodi lungo gli assi. |
Uniform calcola le coordinate da solo due punti. Di default non servono nemmeno queste coordinate perché la spaziatura è uno. |
Non trattiamo oggi i file dipendenti dal tempo. Un esempio è dato dal modulo Time Data (in Loop mettere Cycle Options a Bounce e premere Run). |
Il file da utilizzare conc.dat si trova qui oppure sul server del corso. |
Ora importeremo un file in formato field (.fld) che descrive un Field uniform. Attenzione! Il file .fld (splash.fld) non contiene i dati, ma descrive e punta al file di dati splash.asc . Tutti e due devono essere presenti sul disco per l'esercizio successivo. |
Vi siete procurati il file? FLD Wizard è una piccola utility che permette di scrivere il file .fld per descrivere i propri dati. Non è ingegnerizzata, ma funziona. |
Scaricate il file in formato AVS UCD (Unstructured Cell Data) example2.inp |
Un esempio "buffo" e semplice di texture. Un esempio più realistico è invece un'immagine aerea spalmata su una altimetria digitale (DEM). Attenzione a settare il toggle "Flip Image" nel Read Image oppure vi troverete il mare in montagna! Altri parametri per i più avventurosi:
Cosa cambia? |
Il modulo Image Capture crea un filmato catturando il contenuto del viewer ogni volta che questo cambia. In una seconda fase questi frames sono combinati in un filmato in formato MPEG o AVI (non provate ad usare AVI su Linux: usa un codec non molto comune). Per automatizzare la modifica della visualizzazione si può utilizzare il modulo animator. Si definiscono dei Key Frames e poi il modulo interpola fra loro. Prima di presentarsi ad un congresso con un filmato prodotto così verificare che sia visibile sul sistema di presentazione! Ricordatevi che gli standard sono belli perché ce ne sono così tanti fra cui scegliere… |
Il ciclo si chiude con il bottone chiamato Complete dopo + e -. |
Ci sono varie possibilità per customizzare AVS/Express. In ogni caso, prima di farlo, verificate che in AVS/Express non ci sia già un modo per ottenere quello che si vuole. Il contenitore chiamato Macro si trova sotto Standard Objects. Una volta creato un proprio modulo si può salvarlo nelle Library Workspaces: basta trascinarlo lì. A questo punto si può utilizzarlo come qualsiasi modulo di AVS/Express. Attenzione! Se a questo punto si esce dall'applicazione si perdono le customizzazioni (cioè questi moduli). Bisogna sempre salvare il progetto prima di uscire se sono state fatte customizzazioni. |
Il meccanismo di salvataggio delle customizzazioni si chiama project. Per creare un nuovo progetto Project → Save As… e dare il nome di una directory vuota o non esistente. Nella slide si vede cosa va a finire sotto la directory di progetto (qui chiamata prj). Le due cose più importanti sono il file avsenv che spiega ad AVS/Express dove cercare le cose e il file v/templ.v che contiene tutte le modifiche fatte alle librerie (e quindi anche il codice che descrive i miei moduli creati nei Library Workspaces). Per ricaricare un progetto salvato lanciare AVS/Express dalla directory del progetto. Se si sposta la directory di progetto oppure la directory di installazione di AVS/Express ricordarsi di aggiornare il file avsenv. Il nome del progetto corrente viene scritto a video quando si lancia AVS/Express e nella barra in alto della finestra del Network Editor. |
La struttura a progetti si può descrivere come una serie di piani trasparenti sovrapposti. Quello che viene trovato nella directory del progetto non viene cercato nella directory di installazione di AVS/Express. Quindi, attenzione al nome dei file che create nella directory di progetto (provate a creare un file che si chiama app.v nella directory di progetto e poi lanciate AVS/Express… Dopo l'esito fatale cancellate app.v e v/app.vo per tornare alla normalità). Questa struttura dei progetti permette di gestire gruppi di lavoro che devono sviluppare più moduli della stessa applicazione senza pestarsi i piedi ed utilizzando solo moduli finiti e certificati. |
Attenzione! Salvare l'applicazione non equivale a salvare le customizzazioni ad AVS/Express!
|
Ecco un esempio di customizzazione a partire da un modulo esistente di AVS/Express. |
La creazione di interfacce grafiche segue lo stesso paradigma di qualsiasi altra network di AVS/Express. L'unica differenza è che il collegamento verde (parent) non indica passaggio di dati, ma un rapporto contenitore/contenuto. UIapp crea una finestra indipendente. UImod_panel invece crea una finestra che si "attacca" nell'apposito spazio del Data Viewer. |
Il Layout Editor si abilita da menu (UI Builder -> Layout Editor). Un widget si muove selezionandolo con un doppio click destro e poi trascinandolo con il bottone sinistro (questo su PC; su Linux si seleziona e sposta con il bottone centrale). Ricordarsi alla fine di disabilitare il Layout Editor. |
Vediamo ora molto rapidamente come si aggiunge del codice utente. Un Wizard crea una serie di files a supporto ed uno scheletro di routine nel linguaggio di programmazione scelto. Qui va inserito il proprio codice che viene aggiunto a quello di AVS/Express creando un nuovo eseguibile sotto il progetto stesso. Questo sarà l'eseguibile da lanciare, non più quello sotto l'installazione. |
Il primo step del wizard (lanciato dal menu Object -> Add Module) definisce alcune caratteristiche generali del modulo. Poi si definiscono i vari metodi (routines). |
Poi per ogni parametro si definiscono le sue caratteristiche e il comportamento, cioè quale metodo deve essere fatto partire quando si modifica quel parametro. Questa è la base del funzionamento di una network che non ha scritto da nessuna parte la procedura di attivazione dei moduli. |
L'ultimo step del wizard definisce alcune caratteristiche necessarie per la compilazione. I vari makefiles o build files per il progetto vengono rigenerati ogni volta da AVS/Express, per cui tutte le caratteristiche necessarie per il build devono essere definite qui. |
L'interfaccia fra il proprio codice ed AVS/Express è composta da due strati: la definizione V del modulo e lo scheletro C (C++ o Fortran). Lo scheletro inizialmente contiene le routines dell'API dell'Object Manager per passare i valori dal codice ai parametri del modulo e viceversa. Il C++ è il linguaggio più naturale per scrivere i moduli: molta della complessità di interfacciamento è nascosta. Il fatto che l'interfaccia di un modulo abbia una parte scritta in V fa presumere che bisogna ricordarsi di salvare il progetto dopo aver definitio un modulo. |
Spero vi siate divertiti… Contattatemi se avete bisogno di un aiuto all'indirizzo: |