L'XMLDa quando è “nato” l’XML sono rimasto subito affascinato dalla sua semplicità e versatilità, infatti, grazie all’XML è possibile sia gestire flussi di dati che strutturare veri e propri linguaggi di programmazione. Nella sua prima incarnazione in Now3D, ho voluto cominciare con lo standard di salvataggio dei file.
File in formato XMLHo sempre voluto implementare lo standard XML per il salvataggio e il caricamento delle scene di Now3D, infatti il vecchio formato di salvataggio ci assomigliava molto, ma peccava nell'essere un formato poco standard. Accoppiando file XML a dei file XML Schema (linguaggio descrittivo di file XML) ho potuto gestire in maniera automatica il controllo di validità del file XML stesso. Questo, senza dover scrivere una riga di codice, infatti all'interno del file di schema (anch'esso scritto in XML) sono descritte in maniera dettagliata tutte le strutture del rispettivo file XML.
L'implementazione è fatta tramite una classe standard (N3DXML), ereditando la quale è possibile facilmente applicare le operazioni base di salvataggio (write) e di caricamento (read) di frammenti XML.
Lo standard di gestione di questi file XML è strutturato in modo tale da rendere facile la gestione della compatibilità nella costruzione delle varie versioni di uno stesso schema, e nell'associazione di una classe ad un file XML e ai suoi rispettivi schemi.
File ShaderCome prima implementazione dello standard di gestione dei file XML ho scelto lo Shader. Ho pensato ad una struttura dinamica che faccia fronte a tutti i tipi di shader/nodi futuri che potrei implementare, quindi ho implementato un elemento base (nodebase) che abbia le caratteristiche basi di un nodo e che possa essere facilmente esteso tramite nuove connessioni (di input o di output) o nuovi attributi.
| |
Esempio di file Shader in formato XML | Esempio di Schema per uno Shader |
Prossima applicazione: L’UndoUna delle tante altre funzionalità con utilizzo intenso dello standard XML è la gestione dell'Annullamento dell'ultima operazione o anche chiamata Undo. L'uso dell'XML riguarderebbe il salvataggio strutturato delle operazioni annullabili. La classe standard che sto finendo di implementare potrà gestire qualsiasi tipologia di operazione annullabile, ad esempio il valore di una proprietà oppure la chiamata ad una routine di elaborazione.
Un esempio delle operazioni annullabili sono:
spostamento di un Oggetto |
modifica di uno Shader |
eliminazione di una Telecamera |
e altro ancora... |
E' ancora in fase di studio poichè vorrei prima inserire anche il Redo e cioè il ripristino di un operazione annullata, spero di completarlo prossimamente.
|
Esempio di funzionalità Undo/Redo |