Che cos’è un file E57?
Un file con estensione .e57 è un formato di file compatto, indipendente dal fornitore, utilizzato per l’archiviazione e lo scambio di dati di imaging tridimensionali (3D) come nuvole di punti, immagini e metadati. Tali dati vengono spesso creati con sistemi come scanner laser. È stato sviluppato dal sottocomitato per l’interoperabilità dei dati dell’ATSM E57 Committee on 3D Imaging Systems. E57 è open source e memorizza i dati dei punti 3D, i suoi attributi (come colore e intensità) e le immagini 2D acquisite dal sistema di imaging 3D.
E57 Formato file
Le specifiche del formato file E57 sono disponibili sul sito Web di ATSM e possono essere consultate come riferimento per gli sviluppatori. Il documento concettuale e i dettagli tecnici del formato di file E57 sono disponibili come materiale di riferimento da Daniel Huber. I dati in un file E57 vengono salvati in una struttura ad albero gerarchica basata su XML, come mostrato nell’immagine seguente. A basso livello, i file E57 vengono salvati come file binari compressi per rendere compatte le dimensioni del file.
E57 Struttura del file
La struttura di un file E57 è quella mostrata nella tabella seguente.
Struttura del file |
---|
Intestazione |
Sezione binaria (punti) |
Sezione binaria (punti) |
… |
… |
Sezione binaria (immagine) |
Sezione XML |
E57 Intestazione
L’intestazione E57 è una piccola struttura binaria di 48 byte che contiene informazioni critiche a livello di file, come il numero di versione e la posizione della sezione XML. Può essere rappresentato in modo programmatico come segue.
struct E57FileHeader {
char fileSignature[8];
uint32_t majorVersion;
uint32_t minorVersion;
uint64_t filePhysicalLength;
uint64_t xmlPhysicalOffset;
uint64_t xmlLogicalLength;
uint64_t pageSize;
}
Gerarchia XML
La sezione XML di un file E57 descrive la gerarchia ad albero utilizzando un sottoinsieme di XML standard. Questo si basa su otto tipi di elementi E57 in cui ogni elemento viene costruito utilizzando una serie di blocchi di base. Cinque di questi elementi E57 sono di tipo terminale e tre di questi non sono terminali.
Tipi di terminali
Integer
- intero con segno di dimensioni fino a 63 bit
Float
- memorizza un numero in virgola mobile a precisione singola o doppia nel formato IEEE 754-1985
ScaledInteger
- Memorizza un numero con una parte frazionaria come intero insieme a una scala e un offset
Stringa
- Memorizza i dati di testo come codificati UTF-8 e supporta i caratteri internazionali
Blob
- Memorizza un blocco opaco di dati binari che viene interpretato dal lettore a seconda del contesto.
Tipi non terminali
Struttura
- Contiene un insieme non ordinato di elementi E57 di qualsiasi tipo. Una struttura E57 è analoga a una struttura nel linguaggio di programmazione C.
Vettore
- Contiene un elenco ordinato di elementi tipizzati sostanzialmente identici. Un flag nell’elemento consente di limitare gli elementi per essere digitati esattamente in modo identico, se lo si desidera.
`CompressedVector’ - Contiene un elenco ordinato di elementi tipizzati in modo identico, che sono compressi in formato binario. Come per il tipo di dati Blob, la rappresentazione di un CompressedVector è divisa in una parte XML e una parte binaria.