O que é um arquivo E57?
Um arquivo com extensão .e57 é um formato de arquivo compacto e independente de fornecedor usado para armazenar e trocar dados de imagem tridimensionais (3D), como nuvens de pontos, imagens e metadados. Esses dados geralmente são criados com sistemas como scanners a laser. Ele foi desenvolvido pelo subcomitê de Interoperabilidade de Dados do Comitê ATSM E57 em Sistemas de Imagem 3D. O E57 é de código aberto e armazena dados de pontos 3D, seus atributos (como cor e intensidade) e imagens 2D capturadas pelo sistema de imagens 3D.
Formato de arquivo E57
As especificações de formato de arquivo E57 estão disponíveis no site da ATSM e podem ser consultadas para referência do desenvolvedor. O documento conceitual e os detalhes técnicos do formato de arquivo E57 estão disponíveis como material de referência por Daniel Huber. Os dados em um arquivo E57 são salvos em uma estrutura de árvore hierárquica baseada em XML, conforme mostrado na imagem a seguir. Em nível baixo, os arquivos E57 são salvos como arquivos binários compactados para tornar o tamanho do arquivo compacto.
Estrutura do arquivo E57
A estrutura de um arquivo E57 é mostrada na tabela a seguir.
Estrutura do arquivo |
---|
Cabeçalho |
Seção binária (pontos) |
Seção binária (pontos) |
… |
… |
Seção binária (imagem) |
Seção XML |
Cabeçalho E57
O cabeçalho E57 é uma pequena estrutura binária de 48 bytes que contém informações críticas em nível de arquivo, como o número da versão e o local da seção XML. Pode ser representado programaticamente como segue.
struct E57FileHeader {
char fileSignature[8];
uint32_t majorVersion;
uint32_t minorVersion;
uint64_t filePhysicalLength;
uint64_t xmlPhysicalOffset;
uint64_t xmlLogicalLength;
uint64_t pageSize;
}
Hierarquia XML
A seção XML de um arquivo E57 descreve a hierarquia da árvore usando um subconjunto de XML padrão. Isso é baseado em oito tipos de elementos E57, onde cada elemento é construído usando um conjunto de blocos de construção principais. Cinco desses elementos E57 são do tipo terminal e três deles são não terminais.
Tipos de terminais
Integer
- inteiro assinado de até 63 bits de tamanho
Float
- armazena um número de ponto flutuante de precisão simples ou dupla no formato IEEE 754-1985
ScaledInteger
- Armazena um número com uma parte fracionária como um inteiro junto com uma escala e deslocamento
String
- Armazena dados de texto como codificados em UTF-8 e suporta caracteres internacionais
Blob
- Armazena um bloco opaco de dados binários que é interpretado pelo leitor dependendo do contexto.
Tipos não terminais
Estrutura
- Contém um conjunto não ordenado de elementos E57 de qualquer tipo. Uma estrutura E57 é análoga a uma estrutura na linguagem de programação C.
Vetor
- Contém uma lista ordenada de itens digitados substancialmente de forma idêntica. Um sinalizador no elemento permite que os itens sejam restritos a serem digitados exatamente de forma idêntica, se desejado.
CompressedVector
- Contém uma lista ordenada de itens de tipo idêntico, que são compactados em formato binário. Assim como no tipo de dados Blob, a representação de um CompressedVector é dividida em uma parte XML e uma parte binária.