O sistema VTK possui numerosos filtros destinados à leitura / importação de arquivos de dados de acordo com os principais formatos usados em computação científica. Destaca-se o formato MOVIE.BYU (MOVIE.BYU FILE FORMAT, 2005), amplamente utilizado no Laboratório de GeoModelagem 3D do DPM / IGCE / UNESP para o intercambio de informações entre programas de modelagem / visualização distintos. Os arquivos neste formato possuem extensão *.g ou *.dis.
O sistema VTK possui também um formato de arquivos próprio, extremamente flexível, cuja estrutura será descrita a seguir. Tal formato foi extensivamente utilizado para
criar modelos digitais a serem lidos pelo programa Tensor3D e, por ser bem estruturado, pode ser usado como exemplo para a especificação de objetos 3D.
A Figura 3.8a mostra um exemplo de modelo geométrico visualizado com o VTK. Trata-se de uma pirâmide com base quadrada, um objeto constituído de cinco pontos e cinco polígonos ou faces. O arquivo *.vtk responsável por sua definição é mostrado na Figura 3.8b. As primeiras duas linhas contêm informações de cabeçalho necessárias para identificar arquivos de dados no formato do VTK. A terceira linha pode conter as palavras reservadas
ASCII ou BINARY, indicando que o arquivo poderá ser de texto legível (ASCII), ou que será
usada a formatação otimizada de dados (BINARY). A segunda opção é muito importante para o armazenamento de grande volume de dados, proporcionando uma considerável economia de espaço utilizado em disco. A quarta linha é introduzida pela palavra reservada DATASET e indica o tipo de objeto modelado no arquivo. Um modelo geométrico constituído de polígonos é definido através da palavra reservada POLYDATA, que corresponde à classe de armazenamento vtkPolyData.
A primeira seção do arquivo logo após as informações de cabeçalho contém a geometria do modelo, isto é, a lista de coordenadas dos pontos que o definem. A seção é introduzida pela palavra reservada POINTS, seguida do número de pontos que serão especificados e do formato numérico das coordenadas: int para valores inteiros (ocupando 4 bytes cada), float para valores decimais em precisão simples (4 bytes cada, 6 a 9 dígitos decimais) e double para valores decimais em precisão dupla (8 bytes cada, 15 a 17 dígitos decimais). O resto da seção contém as coordenadas (x, y, z) dos pontos do objeto. Na medida em que são lidos, os pontos recebem um número de identificação crescente não negativo (id),
0 3 4 2 1 # vtk DataFile Version 3.0 vtk output ASCII DATASET POLYDATA POINTS 5 float 0.5 0.5 0 -0.5 0.5 0 -0.5 -0.5 0 0.5 -0.5 0 0 0 1.5 POLYGONS 5 21 4 0 3 2 1 3 0 1 4 3 1 2 4 3 2 3 4 3 0 4 3 CELL_DATA 5 POINT_DATA 5 (b) ATRIBUTOS TOPOLOGIA GEOMETRIA (a)
começando pelo valor 0. Desta forma, no exemplo da figura haverá cinco pontos, tendo códigos de 0 a 4, sendo o ponto Nº 0 (0.5, 0.5, 0), o N
º 1
(-0.5, 0.5, 0) e assim por diante. A ordem de especificação dos pontos é importante e determina os códigos atribuídos aos mesmos.A seção seguinte do arquivo contém informações de topologia, isto é, conectividade dos pontos. Nesta seção especifica-se de que maneira os pontos são conectados para formar polígonos. A primeira linha consiste na palavra reservada POLYGONS, um dos primitivos de modelagem geométrica definidos na seção 3.4.2, seguida do número de polígonos e do número total de valores que serão fornecidos nas linhas seguintes da seção. Esta última informação serve para controlar a consistência das informações topológicas especificadas. É possível verificar que na seção de topologia do arquivo de exemplo, 21 valores seguem a primeira linha.
O resto da seção destina-se à enumeração dos códigos de pontos que definem cada polígono, precedidos pelo número de pontos do mesmo. Por exemplo, a linha 4 0 3 2 1 indica que será inserido um polígono de quatro pontos cujos códigos são 0, 3, 2 e 1, de acordo com os códigos implicitamente definidos na seção de geometria. Este polígono corresponde à base da pirâmide da Figura 3.8a. Os demais polígonos da seção de topologia são triângulos e correspondem às faces laterais da pirâmide. A ordem de enumeração dos pontos de um polígono segue a convenção da biblioteca gráfica OpenGL (2005), usada internamente pelo sistema VTK, e assume que uma seqüência de códigos em sentido anti-horário corresponde à definição do polígono visto de “fora para dentro” (em relação à superfície do modelo principal), ao passo que uma seqüência em sentido horário define o mesmo de “dentro para fora”. Esta distinção pode parecer irrelevante, mas em computação gráfica (e no sistema VTK) é possível atribuir informações diferentes às duas especificações de um mesmo polígono. Por exemplo, as faces da pirâmide da Figura 3.8a possuem cor verde quando observadas de “fora para dentro” (ordem anti-horária dos pontos especificada na seção de topologia), mas as mesmas faces vistas de um ponto interno ao modelo poderiam ser sombreadas usando uma cor distinta. Esta é uma importante propriedade que permite diferenciar partes internas e externas de um modelo geométrico. Os polígonos do exemplo da figura foram especificados levando em conta a ordem anti-horária dos pontos, de forma que as faces da pirâmide são consideradas externas em relação ao observador.
A última seção do arquivo de dados é opcional é destina-se à especificação de atributos associados aos pontos ou às faces do modelo. Tais atributos podem ser representados por valores escalares, vetores ou matrizes quadradas de tensores (vide seção 3.4.2). No
exemplo da figura, não foram definidos atributos, sendo que a seção limita-se a declarar cinco atributos para os pontos da pirâmide e cinco para suas faces. Neste caso, o sistema VTK preenche os campos de atributos de forma automática, de acordo com informações gráficas associadas ao modelo (cor das faces, vetores normais calculados para os pontos, etc.).
O objeto cuja estrutura foi mostrada nesta seção é extremamente simples. Contudo, as regras de definição de geometria e topologia expostas são as mesmas para modelos mais complexos, tanto em termos de morfologia como de volume de informações. A geometria, topologia e, eventualmente, atributos são armazenados de forma semelhante em formatos de arquivos de programas e bibliotecas gráficas diferentes do VTK. A descrição feita nesta seção visou também proporcionar os conceitos fundamentais para a escrita de programas de conversão de e para o formato de dados do sistema VTK, caso seja necessária uma interação do mesmo com outros formatos não suportados (um exemplo é o formato *.ts do programa GOCAD).