Introdução ao VTK

Introdução ao VTK Introdução ao VTK

paginas.fe.up.pt
from paginas.fe.up.pt More from this publisher
14.04.2013 Views

Visualização Científica – Introdução ao VTK João Manuel R. S. Tavares Jorge Gomes Barbosa url: http://www.fe.up.pt/~tavares/ensino/VISCI/visci.html

Visualização Científica –<br />

<strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong><br />

João Manuel R. S. Tavares<br />

Jorge Gomes Barbosa<br />

url: http://www.fe.up.pt/~tavares/ensino/VISCI/visci.html


Sumário<br />

1. Bibliografia<br />

2. O que é o <strong>VTK</strong><br />

3. Recursos sobre o <strong>VTK</strong><br />

4. Obter o <strong>VTK</strong><br />

5. Características técnicas do <strong>VTK</strong><br />

6. Exemplos de aplicação do <strong>VTK</strong><br />

7. Arquitectura do sistema <strong>VTK</strong><br />

8. Modelo de visualização do <strong>VTK</strong><br />

9. Modelo de imagem do <strong>VTK</strong><br />

10. Pipeline de execução do <strong>VTK</strong><br />

11. Modelo gráfico do <strong>VTK</strong><br />

12. Pipeline de visualização do<br />

<strong>VTK</strong><br />

13. Dados suportados no <strong>VTK</strong>:<br />

Células<br />

14. Dados suportados no <strong>VTK</strong>:<br />

Conjuntos de dados<br />

15. Dados suportados no <strong>VTK</strong>:<br />

Tipos de atributos associados<br />

<strong>ao</strong>s pontos e às células<br />

16. Formato de ficheiros do <strong>VTK</strong><br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 2


Bibliografia<br />

The Visualization Toolkit (3rd Edition)<br />

Will Schroeder, Ken Martin, Bill Lorensen<br />

ISBN 1-930934-07-6<br />

Kitware, Inc. publishers<br />

<strong>VTK</strong> User’s Guide (<strong>VTK</strong> 4.2)<br />

Will Schroeder, Ken Martin<br />

ISBN 1-930934-08-4<br />

Kitware, Inc publishers<br />

Mastering CMake (CMake 1.8)<br />

Ken Martin, Bill Hoffman<br />

ISBN 1-930934-09-2<br />

Kitware, Inc publishers<br />

Disponíveis para compra on-line em: http://www.vtk.org/buy-books.php<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 3


O que é o <strong>VTK</strong>?<br />

O <strong>VTK</strong> – The Visualization ToolKit é um sistema de<br />

software aberto para computação gráfica 3D,<br />

processamento de imagem e visualização.<br />

O <strong>VTK</strong> inclui uma biblioteca de classes C ++ e várias<br />

interfaces de interpretação, incluindo para as<br />

linguagens Tcl/Tk, Java, e Python.<br />

O <strong>VTK</strong> tem vindo a ser implementado em plataformas<br />

Unix, MS Windows (95/98/NT/2000/XP) e Mac (OSX<br />

Jaguar).<br />

A arquitectura e o desenvolvimento da<br />

biblioteca têm sido fortemente influenciados<br />

pelos princípios do desenvolvimento /<br />

programação orientado para objectos.<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 4


O que é o <strong>VTK</strong>?<br />

O modelo gráfico do <strong>VTK</strong> está num nível de<br />

abstracção mais elevado quando comparado<br />

com os modelos das bibliotecas de<br />

renderização como a OpenGL ou a PEX. Tal<br />

significa que é muito mais fácil desenvolver<br />

aplicações gráficas e de visualização.<br />

Com o <strong>VTK</strong> as aplicações podem ser<br />

implementadas indiferentemente em<br />

C ++ , Tcl, Java, ou Python.<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 5


O que é o <strong>VTK</strong>?<br />

Nível de aplicação (C ++ ,Tcl/Tk, ...)<br />

<strong>VTK</strong><br />

Biblioteca Gráfica (openGL)<br />

Interface para as linguagens<br />

interpretadas: Tcl/Tk, Java,<br />

Python<br />

Biblioteca de<br />

classes C ++<br />

(compilada)<br />

Sistema Orientado<br />

para Objectos<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 6


O que é o <strong>VTK</strong>?<br />

A biblioteca <strong>VTK</strong> é um verdadeiro sistema de<br />

visualização, pois não permite apenas a representação<br />

da geometria dos objectos.<br />

O <strong>VTK</strong> suporta uma ampla variedade de algoritmos de<br />

visualização, incluindo: métodos escalares, vectoriais,<br />

tensoriais, de textura e volumétricos; e técnicas de<br />

modelamento avançado como o modelamento implícito,<br />

a redução poligonal, a suavização de malhas, o corte, a<br />

definição de contornos e a triangulação de Delaunay.<br />

Estão também integrados dezenas de algoritmos de<br />

processamento de imagem, de tal forma que é possível<br />

“combinar” algoritmos de imagem e algoritmos gráficos.<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 7


O que é o <strong>VTK</strong>?<br />

A biblioteca <strong>VTK</strong> é utilizada por estudantes,<br />

académicos, programadores, analistas de dados,<br />

utilizadores e investigadores de computação gráfica e<br />

visualização, engenheiros, cientistas, investigadores,<br />

etc.<br />

Apesar do <strong>VTK</strong> ser disponibilizado livremente, o suporte<br />

comercial é assegurado pela empresa Kitware.<br />

Dezenas de empresas utilizam o <strong>VTK</strong> no<br />

desenvolvimento dos seus programas comerciais.<br />

O <strong>VTK</strong> também é muito utilizado em ambiente<br />

académico, em investigação e em cursos de<br />

computação gráfica e de visualização.<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 8


Recursos sobre o <strong>VTK</strong><br />

Livros<br />

The Visualization Toolkit, An Object-Oriented<br />

Approach to 3D Graphics (Third Edition)<br />

Will Schroeder, Ken Martin and Bill Lorensen<br />

Kitware, Inc., ISBN 1-930934-07-6<br />

http://www.kitware.com/products/vtktextbook.html<br />

The <strong>VTK</strong> User's Guide (<strong>VTK</strong> 4.2 Edition)<br />

Kitware, Inc.<br />

ISBN 1-930934-08-4<br />

http://www.kitware.com/products/vtkguide.html<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 9


Recursos sobre o <strong>VTK</strong><br />

Página web oficial<br />

http://www.vtk.org<br />

Software (http://public.kitware.com/<strong>VTK</strong>/files/);<br />

FAQ’s (http://public.kitware.com/cgi-bin/vtkfaq);<br />

Lista de discussão<br />

(http://public.kitware.com/mailman/listinfo/vtkusers);<br />

Motor de procura (http://www.kitware.com/search.html);<br />

Documentação on-line (http://www.vtk.org/doc/nightly/html/);<br />

Exemplos de programas<br />

(http://www.vtk.org/example-code.php);<br />

Exemplos de utilização<br />

(http://www.kitware.com/case/vtkinuse.html);<br />

Ficheiros de dados (http://public.kitware.com/<strong>VTK</strong>/files/);<br />

Links (http://www.vtk.org/links.php);<br />

etc.<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 10


Recursos sobre o <strong>VTK</strong><br />

Exemplos distribuídos em conjunto com o código fonte<br />

(...<strong>VTK</strong>\Examples).<br />

Vários testes distribuídos em conjunto com o código<br />

fonte (por exemplo, ...<strong>VTK</strong>\Graphics\Testing\Tcl,<br />

...<strong>VTK</strong>\Graphics\Testing\Cxx).<br />

Sistemas de ajuda distribuídos em conjunto com o<br />

código fonte: em html (...vtkhtml\html\index.html) e em<br />

documentação compilada (MS Windows)<br />

(...vtkhtml\<strong>VTK</strong>4.2Documentation.chm).<br />

Páginas de utilizadores com vários recursos<br />

disponíveis, por exemplo, http://www.barre.nom.fr/vtk).<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 11


Recursos sobre o <strong>VTK</strong><br />

Sistema de ajuda, distribuído em conjunto com o código<br />

fonte, em html.<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 12


Recursos sobre o <strong>VTK</strong><br />

Sistema de ajuda, distribuído em conjunto com o código<br />

fonte, compilado (MS Windows).<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 13


Obter o <strong>VTK</strong><br />

A partir dos CD’s que acompanham os livros da<br />

Kitware sobre o <strong>VTK</strong>;<br />

Fazendo o download:<br />

http://public.kitware.com/<strong>VTK</strong>/get-software.php<br />

ftp://public.kitware.com/pub/vtk<br />

http://public.kitware.com/<strong>VTK</strong>/files/<br />

Existem diferentes versões disponíveis:<br />

<strong>VTK</strong> 4.X (versão oficial);<br />

<strong>VTK</strong> Nightly Release (versão diária – não oficial)<br />

<strong>VTK</strong> CVS (últimas modificações – não oficial)<br />

Verificar a estado da versão CVS (estável ou não)<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 14


Obter o <strong>VTK</strong><br />

Ficheiros a obter (sistemas Windows):<br />

Instalação dos executáveis (Binary)<br />

Descarregar as versões executáveis:<br />

Núcleo: vtkXXCore.exe (ou vtkXX-LatestRelease.exe)<br />

Suporte para linguagens interpretadas: vtkXXTcl.exe,<br />

vtkXXJava.exe, vtkXXPython.exe<br />

Executar vtkXXXCore.exe, vtkXXTcl.exe, ...<br />

Instalação do código fonte<br />

Descarregar as fontes do <strong>VTK</strong>: vtkXXSrc.zip (ou <strong>VTK</strong>-<br />

XX-LatestRelease.zip)<br />

Descarregar o CMake: CMSetupXXX.exe<br />

Executar o CMake e configurar o projecto <strong>VTK</strong><br />

Extrair, e compilar o projecto (compilador necessário, por<br />

exemplo o Microsoft VC ++ 6.0)<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 15


Características técnicas do <strong>VTK</strong><br />

Software:<br />

Mais de 700 classes C ++ .<br />

Mais de 350,000 linhas de código C ++ (110,000<br />

linhas executáveis).<br />

Arquitectura orientada para objectos (baseada na<br />

proposta no livro Object-Oriented Modelling and<br />

Design de Rumbaugh et al da Prentice-Hall).<br />

Mais de 215,000 linhas geradas automaticamente<br />

para a interface Tcl (e também para Python e<br />

Java).<br />

...<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 16


Características técnicas do <strong>VTK</strong><br />

Software:<br />

...<br />

Documentação in-line (no código e em páginas do<br />

manual em html ou compiladas - MS Windows).<br />

Código C ++ fácil de entender.<br />

Desenhado para ser expandido.<br />

Inclusão de vários exemplos: aplicações, casos de<br />

teste e vários conjuntos de dados.<br />

Suporta multithreading e memória distribuída para<br />

algoritmos paralelos.<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 17


Características técnicas do <strong>VTK</strong><br />

Interacção e GUI<br />

Integração pacifica com uma vasta variedade de<br />

sistemas windows incluindo: Qt, FLTK,<br />

wxWindows, Tcl/Tk, Python/Tk, Java, X11, Motif,<br />

Windows, Cocoa e CARBON.<br />

Suporta uma grande variedade de estilos de<br />

interacção, incluindo os modos trackball e joystick<br />

para as câmaras e para os actores. Os estilos de<br />

interacção podem ser configurados e novos estilos<br />

podem ser facilmente adicionados.<br />

...<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 18


Características técnicas do <strong>VTK</strong><br />

Interacção e GUI<br />

...<br />

Implementa um mecanismo de gestão de eventos<br />

de comando/observação. Os objectos podem<br />

interrogar outros objectos por um evento particular<br />

e evocar rechamadas quando apropriadas. Os<br />

eventos podem ter prioridades associadas e ser<br />

abortados. As classes do <strong>VTK</strong> definem uma vasta<br />

gama de eventos evocados através do sistema.<br />

Inclui um conjunto extenso de objectos 3D<br />

predefinidos, incluindo: ponto, linha, plano, plano<br />

implícito, caixa, esfera, cone, barra escalar, plano<br />

de imagem, e spline.<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 19


Características técnicas do <strong>VTK</strong><br />

Computação Gráfica 3D<br />

Renderização de superfícies.<br />

Renderização de volumes (suporta textura e<br />

combinação de superfícies opacas com volumes).<br />

Primitivas de renderização: pontos, linhas,<br />

polígonos, faixas de triângulos, volumes.<br />

Renderização interactiva.<br />

...<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 20


Características técnicas do <strong>VTK</strong><br />

Computação Gráfica 3D<br />

...<br />

Propriedades: cor ambiente, cor difusa, cor<br />

especular, cor das luzes e dos objectos,<br />

transparência, mapeamento de textura, sombreado<br />

- flat/Gouraud, luz anterior.<br />

Luzes: infinitas, pontuais.<br />

Câmaras: projecção paralela e perspectiva,<br />

controlo do azimute, do zoom e da elevação, reset.<br />

Criação automática de câmaras e de luzes.<br />

...<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 21


Características técnicas do <strong>VTK</strong><br />

Computação Gráfica 3D<br />

...<br />

A programação é independente do tipo do<br />

renderizador (definido automaticamente em função<br />

da plataforma computacional).<br />

Modelo Gráfico: luzes iluminam a cena, câmaras<br />

definem o ponto de vista e o nível de zoom, actores<br />

definem a geometria e as propriedades –<br />

“semelhante a Hollywood”.<br />

...<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 22


Características técnicas do <strong>VTK</strong><br />

Computação Gráfica 3D<br />

...<br />

Modelo Gráfico: ... possibilidade de geração automática<br />

ou manual do nível de detalhe dos actores, de forma a<br />

suportar renderização interactiva mesmo com grandes<br />

modelos; possibilidade de criação de grupos de<br />

actores; os mapeadores (Mappers), fazem a ligação da<br />

geometria com o pipeline de visualização; os<br />

renderizadores, coordenam as luzes, as câmaras e os<br />

actores de forma a criar imagens; volumes, são um tipo<br />

particular de actores, com propriedades especiais.<br />

Outras características: janelas e pontos de vista<br />

múltiplos; gravação de imagens em vários formatos<br />

(incluindo png, jpeg, tiff, bmp e ppm).<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 23


Características técnicas do <strong>VTK</strong><br />

Visualização<br />

Tipos de dados: poligonais (pontos, linhas,<br />

polígonos, faixas de triângulos), imagens e<br />

volumes (conjuntos de pontos estruturados),<br />

grelhas estruturadas, grelhas não estruturadas,<br />

pontos não estruturados, grelhas rectangulares.<br />

Tipos de células (2D/3D): vértice, polivértice,<br />

triângulo, faixa de triângulos, pixel, quadrilátero,<br />

polígono, tetraedro, voxel, hexaedro, cunha,<br />

pirâmide.<br />

...<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 24


Características técnicas do <strong>VTK</strong><br />

Visualização<br />

...<br />

Tipos de atributos: escalares, vectores, tensores<br />

(3x3), normais, coordenadas de textura.<br />

Algoritmos escalares: mapeamento colorido,<br />

isocontorno, binarização, geração de escalares a<br />

partir de outros dados.<br />

...<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 25


Características técnicas do <strong>VTK</strong><br />

Visualização<br />

...<br />

Alguns algoritmos vectoriais incluídos: hedgehogs,<br />

streamlines, dashed streamlines, stream points,<br />

stream surfaces, streampolygon, displacement<br />

plots/warping.<br />

Alguns algoritmos tensoriais incluídos: tensor<br />

ellipsoids, tensor glyphs, hyper-streamlines.<br />

...<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 26


Características técnicas do <strong>VTK</strong><br />

Visualização<br />

...<br />

Visualização de informação (coordenadas paralelas,<br />

redução dimensional, etiquetas programáveis).<br />

Algoritmos de modelamento incluídos: esferas,<br />

cones, cilindros, cubos, linhas, planos, ..., eixos,<br />

cursores, texto, modelamento implícito, decimização,<br />

binarização, operações booleanas, etiquetas, corte,<br />

geração das normais, conectividade, geração de<br />

faixas de triângulos, extrusão linear e de rotação,<br />

varrimento de superfícies e de volumes, ...<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 27


Características técnicas do <strong>VTK</strong><br />

Visualização<br />

... visualização de pontos não estruturados,<br />

acrescentar, fundir e filtrar dados, triangulação<br />

2D/3D de Delaunay, suavização de malhas,<br />

reconstrução de superfícies.<br />

Importação e exportação de dados em vários<br />

formatos: stereo-lithography, MOVIE.BYU,<br />

Cyberware, Inventor, 3D Studio, PLOT3D, PNM,<br />

RIB, SLC, TIFF , VRML, Wavefront.<br />

Visualização de anotações: texto 2D/3D, barras<br />

escalares, gráficos x-y.<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 28


Características técnicas do <strong>VTK</strong><br />

Imagem<br />

Pode ser utilizado com grandes volumes de dados.<br />

A maior parte dos filtros são de implementação<br />

paralela (transparente <strong>ao</strong> utilizador).<br />

Integração total com o pipeline gráfico.<br />

Tipos de filtros de imagem incluídos: difusão,<br />

Butterworth, dilatação, erosão, esquelitização,<br />

convolução, diferença, aritmético, magnitude,<br />

divergência, gradiente, média, distância, FFT,<br />

Fourier, Gaussian, Sobel, histograma, binarização,<br />

permutação, conversão.<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 29


Características técnicas do <strong>VTK</strong><br />

Vantagens<br />

Gratuito;<br />

Facilmente criam-se aplicações gráficas, de<br />

processamento de imagem ou de visualização;<br />

Código fonte C ++ disponibilizado;<br />

Facilmente derivam-se novas classes;<br />

Possibilidade de prototipagem ou<br />

desenvolvimento de aplicações utilizando<br />

linguagens interpretativas (Tcl, Python, e Java);<br />

...<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 30


Características técnicas do <strong>VTK</strong><br />

Vantagens<br />

...<br />

Interfaces podem ser criadas rapidamente com<br />

bibliotecas adequadas para o desenvolvimento<br />

de interfaces, por exemplo, Tk ou Java;<br />

Biblioteca de renderização independente da<br />

plataforma (MS Windows, Unix, Mac);<br />

Vários algoritmos úteis e avançados incluídos;<br />

Sistema integrado de software;<br />

Permite a conversão de dados em imagens;<br />

...<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 31


Características técnicas do <strong>VTK</strong><br />

Vantagens<br />

...<br />

Filosofia orientada para objectos;<br />

Fortemente testado em aplicações reais;<br />

Elevado suporte disponível;<br />

Suporte comercial existente.<br />

Desvantagens<br />

Um motor gráfico não “super rápido”;<br />

Código C ++ ;<br />

Pesado, é preciso um sistema “decente” para o utilizar<br />

com eficácia.<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 32


Exemplos de aplicação do <strong>VTK</strong><br />

Simulação<br />

Área Médica<br />

CT / MRI / Ultrasound<br />

Área Financeira<br />

Modelamento<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 33


Exemplos de aplicação do <strong>VTK</strong><br />

Visualização Médica<br />

Visualização de fluxo<br />

C.F.D<br />

G.I.S<br />

Visualização Tensorial Renderização de volumes<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 34


Exemplos de aplicação do <strong>VTK</strong><br />

Imagem Médica<br />

Modelamento<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 35


Exemplos de aplicação do <strong>VTK</strong><br />

Mapeamento<br />

Geofísico<br />

Visualização do fluxo de componentes<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 36


Exemplos de aplicação do <strong>VTK</strong><br />

Renderização de volumes<br />

Dados<br />

Software<br />

Hardware<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 37


Exemplos de aplicação do <strong>VTK</strong><br />

Extracção de Iso-superfícies<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 38


Exemplos de aplicação do <strong>VTK</strong><br />

Visualização de campos<br />

vectoriais<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 39


Exemplos de aplicação do <strong>VTK</strong> (algoritmos)<br />

Sample F(x,y,z) Point Array<br />

Surface<br />

countour<br />

Renderer<br />

Extract Plane<br />

Line Contour<br />

Superfícies de contorno Planos extraídos Linhas de contorno<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 40


Exemplos de aplicação do <strong>VTK</strong> (algoritmos)<br />

CT Scan de uma cabeça humana<br />

Filtros/classes vtk: vtkContourFilter e vtkCutter<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 41


Exemplos de aplicação do <strong>VTK</strong> (algoritmos)<br />

Energia e densidade de fluxo numa câmara de combustão<br />

Filtros/classes vtk:<br />

vtkProbeFilter e vtkContourFilter<br />

Filtros/classes vtk:<br />

vtkCutter e vtkWarpVectors<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 42


Exemplos de aplicação do <strong>VTK</strong> (algoritmos)<br />

Filtros/classe vtk: vtkHedgeHog<br />

Fluxo do sangue numa artéria<br />

Filtros/classes vtk: vtkContourFilter,<br />

vtkStreamLines e vtkTubeFilter<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 43


Exemplos de aplicação do <strong>VTK</strong> (algoritmos)<br />

Escoamento em torno de um elemento<br />

Filtros/classes vtk: vtkStreamLines,<br />

vtkTubeFilter, vtkDataSetMapper<br />

e vtkCutter<br />

Modelo CAD de um motor<br />

Filtros/classes vtk:<br />

vtkPolyDataMapper<br />

e vtkTextureThreshold<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 44


Arquitectura do sistema <strong>VTK</strong><br />

O <strong>VTK</strong> é composto por um núcleo (core) compilado (escrito em<br />

linguagem C ++ ) com as devidas interfaces para várias linguagens<br />

interpretadas.<br />

Interpreter<br />

C ++<br />

core<br />

Interpreted Wrapper (Tcl, Java, Python)<br />

•Tcl/Tk shell<br />

•Interpretador Java<br />

•Interpretador Python<br />

Bibliotecas e includes<br />

(ficheiros dll, bin e .h)<br />

ou<br />

(ficheiros .a e .h)<br />

Instalação Binária: para utilizar<br />

as classes no desenvolvimento<br />

de uma aplicação<br />

Núcleo C ++<br />

•Fonte Tcl/Tk<br />

•Java JDK<br />

•Fonte Python<br />

Código fonte de todas<br />

as classes (pode levar<br />

horas a compilar)<br />

Instalação do código<br />

fonte: para estender o<br />

<strong>VTK</strong><br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 45


Modelos do <strong>VTK</strong><br />

Modelo Gráfico - criação da cena;<br />

Modelo de Visualização - transformação da<br />

informação em dados gráficos.<br />

Objectos Gráficos: Renderização (rendering);<br />

Objectos de Visualização: Geração da<br />

Geometria.<br />

Sistema do fluxo de dados: pipeline de execução<br />

Dados (fonte) Visualização Gráficos<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 46


Modelos do <strong>VTK</strong><br />

Dados<br />

Leitura<br />

Source<br />

(Reader)<br />

Modelo de Visualização<br />

Source<br />

(Procedural)<br />

Processamento<br />

Filter<br />

Mapper<br />

(Writer)<br />

Escrita<br />

Criação de<br />

novos dados<br />

Mapper<br />

Transformação<br />

dos dados em<br />

primitivas<br />

gráficas<br />

Modelo Gráfico<br />

Representação<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 47


Modelos do <strong>VTK</strong><br />

Exemplo:<br />

f(x,y,z)<br />

amostragem<br />

Representação<br />

computacional<br />

Transformação<br />

(visualização)<br />

Representação<br />

gráfica<br />

(renderização)<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 48


Modelo de visualização do <strong>VTK</strong><br />

Objectivos:<br />

Transformar os dados em primitivas gráficas;<br />

Construir a representação geométrica dos objectos a<br />

representar.<br />

Baseado numa filosofia de pipeline<br />

A transformação dos dados é decomposta em módulos;<br />

Cada módulo realiza uma operação precisa sobre os<br />

dados (transformação);<br />

Os módulos são ligados entre si de forma a formarem<br />

uma saída do pipeline;<br />

Os dados fluem no interior do pipeline, passando de um<br />

módulo para outro.<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 49


Modelo de visualização do <strong>VTK</strong><br />

Dois tipos de objectos:<br />

Objectos data (dados)<br />

Dados que fluem no interior do pipeline;<br />

Designados por datasets (conjuntos de dados).<br />

Objectos process (processos)<br />

Módulos ou composições algorítmicas do pipeline.<br />

Process A<br />

saída<br />

entrada<br />

Process B Process C<br />

dataset A dataset B<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 50


Modelo de visualização do <strong>VTK</strong><br />

Objectos process<br />

Source<br />

Início do pipeline<br />

•Leitura de dados externos;<br />

•Geração de novos dados.<br />

Source<br />

nenhuma entrada<br />

≥ 1 saída<br />

Objecto<br />

Process<br />

Filter<br />

Processamento dos<br />

objectos dados<br />

•Recebe uma ou mais<br />

entradas;<br />

•Gera uma ou mais saídas.<br />

Filter<br />

≥ 1 entrada<br />

≥ 1 saída<br />

Mapper<br />

Fim do pipeline<br />

•Gerar primitivas gráficas;<br />

•Comunicação com o<br />

modulo gráfico.<br />

Mapper<br />

≥ 1 entrada<br />

nenhuma saída<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 51


Modelo de visualização do <strong>VTK</strong><br />

Fonte<br />

Objecto<br />

data<br />

Fonte<br />

Objecto<br />

data<br />

Filtro<br />

Objecto<br />

data<br />

Filtro<br />

Objecto<br />

data<br />

Filtro<br />

Objecto<br />

data<br />

Exemplo<br />

Mapeador<br />

Modelo<br />

gráfico<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 52


Modelo de visualização do <strong>VTK</strong><br />

Exemplo (Tcl)<br />

vtkSphereSource sphere<br />

sphere SetRadius 5<br />

sphere SetThetaResolution 36<br />

sphere SetPhiResolution 18<br />

vtkPolyDataMapper isoMapper<br />

isoMapper SetInput [sphere GetOutput]<br />

isoMapper ScalarVisibilityOn<br />

vtkActor isoActor<br />

isoActor SetMapper isoMapper<br />

eval [isoActor GetProperty] SetColor 0.2 0.63 0.79<br />

vtkRenderer ren1<br />

ren1 AddActor isoActor<br />

ren1 SetBackground 1 1 1<br />

vtkRenderWindow renWin<br />

renWin AddRenderer ren1<br />

renWin SetSize 500 500<br />

vtkRenderWindowInteractor iren<br />

iren SetRenderWindow renWin<br />

iren Initialize<br />

Source - Fonte<br />

Mapper - Mapeador<br />

Actor<br />

Renderer<br />

Render Window<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 53


Modelo de visualização do <strong>VTK</strong><br />

Objectos data ou dataset<br />

Um dataset (conjunto de dados) é constituído por:<br />

Estrutura topológica (lista de células)<br />

Determina a forma do objecto (triangular, esférica, de malha,<br />

etc.);<br />

Invariável a certas transformações geométricas (translação,<br />

rotação e escalamento);<br />

Um objecto é composto por uma ou mais células.<br />

Estrutura geométrica (lista de pontos)<br />

Instância da estrutura topológica;<br />

Coordenadas dos pontos que constituem as células (vértices).<br />

Atributos<br />

objecto data<br />

ou dataset<br />

Informação complementar associada <strong>ao</strong>s pontos e às células<br />

(ex. temperatura num ponto, massa de uma células, etc.)<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 54


Modelo de imagem do <strong>VTK</strong><br />

Pipeline de imagem – um caso especial do pipeline de<br />

visualização;<br />

Desenhado apenas para suportar dados do tipo<br />

vtkStructuredPoints (pontos estruturados);<br />

Um conjunto de pontos estruturados são dados distribuídos<br />

regularmente num array alinhado com o sistema de eixos;<br />

Conjunto de pontos 2D – imagens, mapas de pixéis (pixmaps) e<br />

mapas de bits (bitmaps);<br />

Conjunto de pontos 3D – volumes (uma pilha “stack” de<br />

imagens 2D - slices);<br />

Os filtros envolvidos têm sempre à entrada e à saída conjuntos<br />

de pontos estruturados;<br />

Devido à natureza regular dos dados:<br />

Os dados podem ser “divididos em parcelas rectangulares”;<br />

O pipeline de imagem pode ser multithreaded.<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 55


Pipeline de execução do <strong>VTK</strong><br />

Direcção do método Update()<br />

Modelo de Visualização Modelo Gráfico<br />

Source Filter Mapper Actor<br />

Direcção do fluxo de dados<br />

(geração dos dados através do método ExecuteData())<br />

Render<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 56


Modelo gráfico do <strong>VTK</strong><br />

Objectivo<br />

Transformar dados gráficos em imagens e representar no<br />

ecrã.<br />

Reagrupa as características de um sistema gráfico 3D.<br />

Principais classes do modelo gráfico do <strong>VTK</strong>:<br />

Render Window<br />

Renderer<br />

Light<br />

Camera<br />

Actor<br />

Property<br />

Transform<br />

Mapper<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 57


Modelo gráfico do <strong>VTK</strong><br />

Ecrã<br />

O objectivo é renderizar a geometria (volume) no ecrã.<br />

Câmara<br />

Actor<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 58<br />

Luz


Modelo gráfico do <strong>VTK</strong><br />

O objectivo é renderizar a geometria (volume) no ecrã.<br />

Classes <strong>VTK</strong><br />

vtkCamera<br />

vtkRenderWindow<br />

vtkRenderWindowInteractor<br />

vtkActor<br />

•vtkProperty<br />

•vtkMapper<br />

•vtkTransform<br />

vtkLight<br />

vtkRenderer<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 59


Modelo gráfico do <strong>VTK</strong><br />

Exemplo<br />

vtkCamera<br />

2 vtkRenderer vtkLight<br />

vtkActor<br />

1 vtkRenderWindow<br />

(property, geometry (mapper), transformation, etc.)<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 60


Modelo gráfico do <strong>VTK</strong><br />

Exemplo<br />

Viewport<br />

Actor : Property<br />

Transform<br />

Mapper<br />

Render Window<br />

Renderer :<br />

Camera<br />

Light<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 61


Modelo gráfico do <strong>VTK</strong><br />

Render Windows<br />

Renderer<br />

Gere a(s) janela(s) na qual serão<br />

representados as imagens ou os<br />

objectos gráficos;<br />

Assegura as funcionalidades por<br />

defeito de uma janela windows;<br />

Independente dos dispositivos gráficos (hardware);<br />

Gere o agrupamento dos renders contidos na janela:<br />

Vários renders podem ser agrupados numa mesma<br />

janela (render window) de forma a criar uma cena<br />

(imagem final).<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 62


Modelo gráfico do <strong>VTK</strong><br />

Classe vtkRenderWindow<br />

Métodos:<br />

Adicionar / remover um renderer:<br />

AddRenderer (vtkRenderer)<br />

RemoveRenderer (vtkRenderer)<br />

Configuração do ecrã:<br />

FullScreenOn () / FullScreenOff ()<br />

BordersOn () / BordersOff ()<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 63


Modelo gráfico do <strong>VTK</strong><br />

Renderer<br />

Coordena a(s) fonte(s) de luz, a câmara e os actores de forma a<br />

gerar a imagem de uma cena.<br />

Um cena é composta:<br />

Pelo menos por um actor, uma câmara e uma fonte de luz;<br />

Se os objectos câmara e luz não são definidos, então são<br />

criados automaticamente pelo renderer.<br />

Actor: o objecto visível<br />

Luz: representa e<br />

manipula a<br />

Câmara: determina a<br />

iluminação da cena<br />

projecção da geometria<br />

(em 3D)<br />

3D numa imagem 2D<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 64


Modelo gráfico do <strong>VTK</strong><br />

Classe vtkRenderer<br />

Métodos<br />

Adicionar / remover actores e luzes:<br />

AddActor (vtkActor) / RemoveActor (vtkActor)<br />

AddLight (vtkLight) / RemoveLight (vtkLight)<br />

Determinar a câmara a utilizar na renderização:<br />

SetActiveCamera (vtkCamera)<br />

Criar as imagens resultantes da renderização:<br />

Render<br />

Conversão de coordenadas:<br />

ViewToWorld (float, float, float) / WorldToView (float, float, float)<br />

y<br />

y<br />

Mundo Vista<br />

x<br />

x<br />

z<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 65


Modelo gráfico do <strong>VTK</strong><br />

Classe vtkLight<br />

Métodos<br />

Definir / obter a cor da iluminação:<br />

SetColor (float , float , float) / GetColor ()<br />

Definir / obter a posição da fonte de luz:<br />

SetPosition (float , float , float ) / GetPosition ()<br />

Definir / obter a intensidade (de 0 a 1):<br />

SetIntensity (float ) / GetIntensity ()<br />

Ligar / Desligar uma fonte de luz:<br />

SwitchOn () / SwitchOff ()<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 66


Modelo gráfico do <strong>VTK</strong><br />

Classe vtkCamera<br />

Métodos<br />

Definir / obter a posição da câmara em coordenadas mundo:<br />

SetPosition (float ,float ,float ) / GetPosition ()<br />

Definir / obter a posição do ponto focal da câmara:<br />

SetFocalPoint (float ,float ,float ) / GetFocalPoint ()<br />

Calcular a distância entre a posição da câmara e o seu ponto<br />

focal:<br />

ComputeDistance ()<br />

Posição<br />

Plano anterior<br />

de clipping<br />

Plano posterior<br />

de clipping<br />

Ponto focal<br />

Direcção de<br />

projecção<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 67


Modelo gráfico do <strong>VTK</strong><br />

Actor<br />

O objecto representado por um<br />

renderer numa cena.<br />

Um actor não representa<br />

directamente a sua geometria<br />

nem a sua aparência.<br />

Tais características são definidas<br />

utilizando os objectos:<br />

Property<br />

Mapper<br />

Transform<br />

Actor<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 68


Modelo gráfico do <strong>VTK</strong><br />

Classe vtkActor<br />

Métodos<br />

Associar / obter o objecto property que determina as<br />

propriedades de aparência do actor:<br />

SetProperty (vtkProperty) / GetProperty ()<br />

Por defeito um objecto property é criado;<br />

Vários actores podem partilhar o mesmo objecto property.<br />

Associar / obter o objecto mapper que determina a geometria<br />

do actor:<br />

SetMapper (vtkMapper) / GetMapper ()<br />

Definir a matriz de transformação que determina a escala,<br />

a posição e a orientação do actor:<br />

SetUserMatrix (vtkMatrix4x4 *)<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 69


Modelo gráfico do <strong>VTK</strong><br />

Classe vtkActor<br />

Geralmente, as propriedades e as transformações não são<br />

definidas explicitamente. Os seus valores são determinados<br />

durante a criação do actor.<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 70


Modelo gráfico do <strong>VTK</strong><br />

Property<br />

Determina a aparência da superfície do actor.<br />

Classe <strong>VTK</strong> : vtkProperty.<br />

Métodos<br />

Tipo de representação da geometria da superfície:<br />

SetRepresentationToPoints ()<br />

SetRepresentationToWireframe ()<br />

SetRepresentationToSurface ()<br />

Definição da cor da superfície:<br />

SetColor (float , float , float )<br />

Definir a transparência da superfície (0 - transparente,<br />

1.0 - opaca):<br />

SetOpacity (float )<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 71


Modelo gráfico do <strong>VTK</strong><br />

Mapper<br />

Liga o modelo de visualização e o modelo gráfico.<br />

Determina a geometria do actor.<br />

Combinação de pontos (nodos), linhas, polígonos,<br />

etc.<br />

Definição da cor dos nodos (vértices).<br />

Faz referência a uma palete de cores.<br />

Todos os actores devem ter um objecto mapper<br />

associado de forma a serem representados no ecrã.<br />

Classes <strong>VTK</strong> : vtkMapper, vtkPolyDataMapper,<br />

vtkDataSetMapper.<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 72


Modelo gráfico do <strong>VTK</strong><br />

Classe vtkPolyDataMapper<br />

Métodos<br />

Especificar os dados de entrada para o mapper (nodos):<br />

SetInput (vtkPolyData)<br />

Associar uma palete de cores:<br />

SetLookupTable (vtkLookupTable)<br />

Criar uma palete de cores por defeito:<br />

CreateDefaultLookupTable ()<br />

Determinar se a renderização é de maneira imediata ou<br />

não:<br />

ImmediateModeRenderingOn ()<br />

ImmediateModeRenderingOff ()<br />

(Usada para estruturas poligonais.)<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 73


Modelo gráfico do <strong>VTK</strong><br />

Classe Transform<br />

Guarda uma pilha de matrizes de transformação;<br />

Apenas uma matriz de transformação activa<br />

(corrente);<br />

Disponibiliza métodos para efectuar as operações de<br />

translação, escalamento e rotação.<br />

Translação Escalamento Rotação<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 74


Modelo gráfico do <strong>VTK</strong><br />

Classe Transform<br />

Translação<br />

⎡x'⎤<br />

⎡1<br />

0 0 tx⎤<br />

⎡x⎤<br />

⎢<br />

y'<br />

⎥ ⎢<br />

0 1 0 ty<br />

⎥ ⎢<br />

y<br />

⎥<br />

⎢ ⎥ = ⎢ ⎥•<br />

⎢ ⎥<br />

⎢z'<br />

⎥ ⎢0<br />

0 1 tz⎥<br />

⎢z⎥<br />

⎢ ⎥ ⎢ ⎥ ⎢ ⎥<br />

⎣w'⎦<br />

⎣0<br />

0 0 1⎦⎣1⎦ Translação (tx,ty,tz)<br />

Escalamento<br />

⎡sx<br />

0 0 0⎤<br />

⎢<br />

0 sy 0 0<br />

⎥<br />

Ts = ⎢<br />

⎥<br />

⎢ 0 0 sz 0⎥<br />

⎢<br />

⎥<br />

⎣ 0 0 0 1⎦<br />

Escalamento (sx,sy,sz)<br />

Rotação<br />

⎡1<br />

0 0 0⎤<br />

⎢<br />

−<br />

⎥<br />

TR<br />

⎢<br />

0 cosθ sinθ<br />

0<br />

⎥<br />

x= ⎢0<br />

sinθ cosθ<br />

0⎥<br />

⎢<br />

⎥<br />

⎣0 0 0 1⎦<br />

Rotação θ em torno<br />

de x<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 75


Modelo gráfico do <strong>VTK</strong><br />

Classe vtkTransform<br />

Métodos<br />

Criar uma matriz identidade:<br />

Identity ()<br />

Criar uma matriz rotação e combina-la com a matriz de<br />

transformação corrente:<br />

RotateX (float), RotateY (float ), RotateZ (float )<br />

Escalar a matriz de transformação corrente:<br />

Scale (float , float , float )<br />

Transladar a matriz de transformação corrente:<br />

Translate (float , float , float )<br />

Transpor matriz de transformação corrente:<br />

Transpose ()<br />

Inverter a matriz de transformação corrente:<br />

Inverse ()<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 76


Pipeline de visualização do <strong>VTK</strong><br />

O <strong>VTK</strong> utiliza o modelo funcional de um pipeline de visualização para<br />

transformar dados em imagens ou em geometria (ecrã/ficheiros).<br />

Source Objects Filter Objects Mapper Objects<br />

O pipeline é composto por:<br />

•Source Objects: interface para dados externos, ou dados devidamente<br />

gerados (ex. vtkPLOT3DReader)<br />

•Filter Objects: operam nos dados dos Source objects e geram a<br />

geometria e/ou as imagens (ex. vtkContourFilter)<br />

•Mapper Objects: transformam e processam os dados resultantes de um<br />

Filter Object de forma a serem representados no ecrã ou escritos num<br />

ficheiro (ex. vtkPolyDataMapper)<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 77


Pipeline de visualização do <strong>VTK</strong><br />

Conexões<br />

Os elementos do pipeline de<br />

visualização são conectados<br />

em C ++ com os comandos:<br />

Filter->SetInput(Source->GetOutput());<br />

Define a saída de uma fonte<br />

como entrada de um filtro.<br />

Em tcl:<br />

Filter SetInput [Source GetOutput]<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 78


Pipeline de visualização do <strong>VTK</strong><br />

PseudoPrograma Exemplo<br />

Main() {<br />

create a window;<br />

create a renderer; give the renderer<br />

to the window;<br />

create procedural geometry;<br />

create a mapper; give the geometry<br />

to the mapper;<br />

create an actor; give the mapper to<br />

the actor;<br />

}<br />

give the actor to the renderer;<br />

window->render();<br />

Window<br />

Renderer<br />

Actor<br />

Mapper<br />

Geometry<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 79


Pipeline de visualização do <strong>VTK</strong><br />

Exemplo de pipeline<br />

vtkSphereSource<br />

vtkPolyDataMapper<br />

vtkConeSource<br />

vtkGlyph3D<br />

vtkPolyDataMapper<br />

(2 actores)<br />

Mace.tcl<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 80


Pipeline de visualização do <strong>VTK</strong><br />

Sources Filters Mappers<br />

vtkDataSet vtkDataSet<br />

File Output<br />

Props<br />

(continua...)<br />

Uma source/filter pode ser ligada a mais do que um filter/mapper.<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 81


Pipeline de visualização do <strong>VTK</strong><br />

(...continuação)<br />

Props<br />

Props<br />

Props<br />

(ex. Actor/Volume)<br />

vtkProperty<br />

Renderer<br />

vtkCamera,<br />

vtkLight<br />

(São criados<br />

por defeito)<br />

Render<br />

Window<br />

vtkRenderWindowInteractor<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 82


Pipeline de visualização do <strong>VTK</strong><br />

Exemplo: Criação de uma isosuperfície de uma proteína<br />

//Create the RenderWindow and Renderer<br />

vtkRenderer *ren = vtkRenderer::New();<br />

vtkRenderWindow *renWin =<br />

vtkRenderWindow::New();<br />

renWin->AddRenderer(ren);<br />

//Read in the Data<br />

vtkStructuredPointsReader *reader =<br />

vtkStructuredPointsReader::New();<br />

reader->SetFileName(“ironProt.vtk”);<br />

C ++ Tcl<br />

#Create the RenderWindow, Renderer<br />

vtkRenderer ren<br />

vtkRenderWindow renWin<br />

renWin AddRenderer ren<br />

# Read in the Data<br />

vtkStructuredPointsReader reader<br />

reader SetFileName “ironProt.vtk”<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 83


Pipeline de visualização do <strong>VTK</strong><br />

...Exemplo: Criação de uma isosuperfície de uma proteína<br />

//Setup the pipeline<br />

vtkContourFilter *iso =<br />

vtkContourFilter::New();<br />

iso->SetInput(reader->GetOutput());<br />

iso->SetValue(0, 128.0f);<br />

C ++ Tcl<br />

vtkPolyDataMapper *isoMapper =<br />

vtkPolyDataMapper::New();<br />

isoMapper->SetInput(iso->GetOutput());<br />

isoMapper->ScalarVisibilityOff();<br />

# Setup the pipeline<br />

vtkContourFilter iso<br />

iso SetInput [reader GetOutput]<br />

iso SetValue 0 128<br />

vtkPolyDataMapper isoMapper<br />

isoMapper SetInput [iso GetOutput]<br />

isoMapper ScalarVisibilityOff<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 84


Pipeline de visualização do <strong>VTK</strong><br />

C ++ ...Exemplo: Criação de uma isosuperfície de uma proteína<br />

Tcl<br />

//Terminate the pipeline<br />

vtkActor *isoActor = vtkActor::New();<br />

isoActor->SetMapper(isoMapper);<br />

//Set the color of the Actor<br />

vtkProperty *prop =<br />

isoActor->GetProperty();<br />

prop->SetColor(1, 0, 0);<br />

//Add the Actor to the renderer<br />

ren->AddActor(isoActor);<br />

//Render the image<br />

renWin->Render();<br />

# Terminate the pipeline<br />

vtkActor isoActor<br />

isoActor SetMapper isoMapper<br />

# Set the color of the Actor<br />

vtkProperty prop<br />

set prop [isoActor GetProperty]<br />

prop SetColor 1 0 0<br />

# Add the Actor the the renderer<br />

ren AddActor isoActor<br />

# Render the image<br />

renWin Render<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 85


Pipeline de visualização do <strong>VTK</strong><br />

... Exemplo: Criação de uma isosuperfície de uma proteína<br />

Imagem resultante<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 86


Pipeline de visualização do <strong>VTK</strong><br />

Exemplo (C ++ )<br />

// creating a rendering environment…<br />

vtkRenderer * renderer = vtkRenderer::New();<br />

vtkRenderWindow * renderWindow = vtkRenderWindow::New();<br />

renderWindow->AddRenderer(renderer);<br />

// creating an object ( source, mapper, actor )…<br />

vtkConeSource * cone = vtkConeSource::New();<br />

vtkPolyDataMapper * coneMapper = vtkPolyDataMapper::New();<br />

coneMapper->SetInput(cone->GetOutput());<br />

vtkActor * coneActor = vtkActor::New();<br />

coneActor->SetMapper(coneMapper);<br />

// assign the object to the rendering environment,<br />

// and render the scene…<br />

renderer->AddActor(coneActor);<br />

renderWindow->Render();<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 87


Pipeline de visualização do <strong>VTK</strong><br />

Exemplo (aplicação de um filtro - C ++ )<br />

// creating a sphere object…<br />

vtkSphereSource * sphere = vtkSphereSource::New();<br />

// and a filter to apply to the sphere…<br />

vtkElevationFilter * elevationFilter = vtkElevationFilter::New();<br />

elevationFilter->SetInput((vtkDataSet *) sphere->GetOutput());<br />

elevationFilter->SetLowPoint(0,0,-1);<br />

elevationFilter->SetHighPoint(0,0,1);<br />

// assign the filter to a mapper…<br />

vtkDataSetMapper * mapper = vtkDataSetMapper::New();<br />

mapper->SetInput(elevationFilter->GetOutput());<br />

// create an actor…<br />

vtkActor * actor = vtkActor::New();<br />

Actor->SetMapper(mapper);<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 88


Pipeline de visualização do <strong>VTK</strong><br />

Interacção com o utilizador<br />

A classe vtkRenderWindowInteractor permite que o utilizador<br />

interaja com os objectos gráficos; por exemplo:<br />

Teclas pressionadas:<br />

w: modo wireframe;<br />

s: modo surface;<br />

r: reset da transformação;<br />

3: comutar para modo stereo;<br />

c/o: modo câmera ou modo objecto;<br />

j/t: modo joystick ou modo trackball;<br />

e: sair da aplicação.<br />

Botões do rato:<br />

botão 3 (dir.): zoom; botão 2: pan; botão 1 (esq.): rotate.<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 89


Pipeline de visualização do <strong>VTK</strong><br />

Interacção com o utilizador exemplo (C ++ ):<br />

vtkRenderWindowInteractor * interactor = vtkRenderWindowInteractor::New();<br />

vtkRenderWindow * renderWindow = vtkRenderWindow::New();<br />

vtkRenderer * renderer = vtkRenderer::New();<br />

// creating an actor, and add it to the renderer…<br />

renderer->AddActor(actor);<br />

renderWindow->Render();<br />

interactor->SetRenderWindow(renderWindow);<br />

interactor->Start();<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 90


Pipeline de visualização do <strong>VTK</strong><br />

Exemplo (Tcl):<br />

vtkSphereSource sphere<br />

sphere SetRadius 5<br />

sphere SetThetaResolution 36<br />

sphere SetPhiResolution 18<br />

vtkPolyDataMapper isoMapper<br />

isoMapper SetInput [sphere GetOutput]<br />

isoMapper ScalarVisibilityOn<br />

vtkActor isoActor<br />

isoActor SetMapper isoMapper<br />

eval [isoActor GetProperty] SetColor 0 0 0.8<br />

vtkRenderer ren1<br />

ren1 AddActor isoActor<br />

ren1 SetBackground 1 1 1<br />

vtkRenderWindow renWin<br />

renWin AddRenderer ren1<br />

renWin SetSize 500 500<br />

vtkRenderWindowInteractor iren<br />

iren SetRenderWindow renWin<br />

iren Initialize<br />

Source<br />

Mapper<br />

Actor<br />

Renderer<br />

Render Window<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 91


Dados suportados no <strong>VTK</strong>: Células<br />

Átomos que constituem um conjunto de dados;<br />

Uma célula é uma organização topológica de<br />

pontos (coordenadas x, y, z);<br />

Definidas por:<br />

Tipo;<br />

Lista ordenada<br />

de pontos.<br />

Objecto<br />

Célula<br />

Tetraedro<br />

Malha = lista de triângulos<br />

Triângulo = lista de pontos<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 92<br />

2<br />

3<br />

0<br />

1<br />

4<br />

7<br />

0<br />

3<br />

1<br />

5<br />

2<br />

6<br />

Hexaedro


Dados suportados no <strong>VTK</strong>: Tipos de células<br />

Vertex<br />

Polyvertex<br />

Line<br />

Polyline<br />

Triangle<br />

Triangle Strip<br />

Quadrilateral<br />

Pixel<br />

Polygon<br />

Tetrahedron<br />

Hexahedron<br />

Voxel<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 93


Dados suportados no <strong>VTK</strong>: Tipos de células<br />

Classe vtkCell definida<br />

no <strong>VTK</strong> 4.2<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 94


Dados suportados no <strong>VTK</strong>: Conjuntos de dados<br />

Pontos estruturados<br />

(Structured Points)<br />

Grelha estruturada<br />

(Structured Grid)<br />

Grelha rectangular<br />

(Rectilinear Grid)<br />

Dados poligonais<br />

(Polygonal Data)<br />

Pontos não estruturados<br />

(Unstructured Points)<br />

Grelha não estruturada<br />

(Unstructured Grid)<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 95


Dados suportados no <strong>VTK</strong>: Conjuntos de dados<br />

Pontos estruturados Grelha rectangular<br />

vtkStructuredPoints<br />

Imagens 2D e 3D<br />

vtkRectilinearGrid<br />

Malha rectangular<br />

Grelha estruturada Dados poligonais<br />

vtkStructuredGrid<br />

Malha 2D<br />

vtkPolyData<br />

Pontos, linhas,<br />

Grelha não estruturada<br />

polígonos<br />

vtkUnstructuredGrid<br />

Malhas 2D/3D não estruturadas<br />

(classes vtk para conjuntos de<br />

dados e exemplos de utilização)<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 96


Dados suportados no <strong>VTK</strong>: Conjuntos de dados<br />

Classe vtkDataSet definida no <strong>VTK</strong> 4.2<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 97


Dados suportados no <strong>VTK</strong>: Conjuntos de dados<br />

Structured Points (pontos estruturados)<br />

O formato mais regular para grelhas;<br />

O tipo de dado mais compacto – a<br />

geometria do conjunto de dados é<br />

definida com um reduzido número de<br />

linhas de pequeno comprimento;<br />

Ideal para imagens 1D, 2D e 3D<br />

envolvendo pixels e voxels (por<br />

exemplo de CTscans e outros dados<br />

amostrados de forma regular).<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 98


Dados suportados no <strong>VTK</strong>: Conjuntos de dados<br />

Rectilinear Grid (grelha rectangular)<br />

Topologia regular, geometria<br />

semiregular alinhada com os eixos<br />

de coordenadas x-y-z;<br />

Geometria especificada por 3 listas<br />

(x, y, z) de coordenadas com valor<br />

crescente.<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 99


Dados suportados no <strong>VTK</strong>: Conjuntos de dados<br />

Structured Grid (grelha estruturada)<br />

Topologia regular, geometria irregular<br />

(por exemplo, uma “grelha<br />

curvilínea”);<br />

A lista dos pontos que definem o<br />

domínio dos dados é ordenada por<br />

coluna.<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 100


Dados suportados no <strong>VTK</strong>: Conjuntos de dados<br />

Polygonal Data (dados poligonais)<br />

Combinações arbitrárias de<br />

primitivas gráficas de superfície;<br />

Uma lista de pontos seguida por<br />

uma ou mais listas descrevendo a<br />

geometria: colecções de vértices,<br />

linhas, polígonos ou faixas de<br />

triângulos;<br />

Este tipo de dados é derivado<br />

frequentemente das várias<br />

operações do visualização (como<br />

por exemplo, determinação de<br />

contornos).<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 101


Dados suportados no <strong>VTK</strong>: Conjuntos de dados<br />

Unstructured Grid (grelha não estruturada)<br />

Topologia irregular e geometria irregular;<br />

É necessária a lista dos vértices no domínio<br />

dos dados, assim como a lista das células<br />

devidamente indexadas na lista dos vértices<br />

de cada célula. Uma lista do tipo das células<br />

também é necessária.<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 102


Dados suportados no <strong>VTK</strong>: Exemplos de<br />

malhas<br />

As células podem ter diferentes formas e tamanhos:<br />

2D : triângulos, quadriláteros, ...<br />

3D : tetraedros, hexaedros, pirâmides, …<br />

As malhas podem conter um ou mais tipo de células.<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 103


Dados suportados no <strong>VTK</strong>: Tipos de atributos<br />

associados <strong>ao</strong>s pontos e às células<br />

Escalar<br />

s<br />

Valor simples<br />

Coordenadas de textura<br />

2D: (u,v)<br />

3D: (u,v,w)<br />

t<br />

s<br />

Vector<br />

(u,v,w)<br />

Correspondência<br />

entre um índice e<br />

uma tabela de<br />

texturas<br />

Tabela de dados<br />

Norma e<br />

direcção (3D)<br />

Array 0 Array 1 . . .<br />

Array n-1<br />

Tensor<br />

Normal<br />

(n x,n y,n z)<br />

|n| = 1<br />

a 11 a 12 a 13<br />

a 21 a 22 a 23<br />

a 31 a 32 a 33<br />

Direcção (3D)<br />

Matriz (n x n)<br />

Tabela de arrays<br />

Cada array pode ser<br />

de tipo diferente<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 104


Dados suportados no <strong>VTK</strong>: Tipos de atributos<br />

associados <strong>ao</strong>s pontos e às células<br />

Informação associada a cada vértice de uma<br />

célula:<br />

Escalares (scalars): por exemplo, temperatura,<br />

pressão, ...;<br />

Vectores (vector): por exemplo, velocidades,<br />

acelerações, ...;<br />

Normais (normals): vectores normais à<br />

superfície;<br />

Coordenadas de textura (texture coordinates):<br />

gráficos específicos;<br />

Tensores (tensors): matrizes.<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 105


Dados suportados no <strong>VTK</strong>: Tipos de atributos<br />

associados <strong>ao</strong>s pontos e às células<br />

Classes vtkFieldDataSet e vtkDataSetAtributes definidas no<br />

<strong>VTK</strong> 4.2<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 106


Dados suportados no <strong>VTK</strong>: Tipos de atributos<br />

associados <strong>ao</strong>s pontos e às células<br />

Classe vtkDataArray<br />

definida no <strong>VTK</strong> 4.2<br />

Utilizada para<br />

arrays de dados de<br />

determinado tipo.<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 107


Formato de ficheiros do <strong>VTK</strong><br />

# vtk DataFile Version X.0 Header<br />

Cool data Title<br />

ASCI I BINARY Data Type<br />

DATASET type Geometry<br />

type is one of:<br />

STRUCTURED_POINTS<br />

STRUCTURED_GRID<br />

RECTILINEAR_GRID<br />

UNSTRUCTURED_GRID<br />

POLYDATA<br />

FIELD<br />

POINT_DATA n Dataset attributes<br />

…<br />

CELL_DATA n<br />

… (Ver o documento <strong>VTK</strong> File Format em<br />

http://www.vtk.org/pdf/file-formats.pdf)<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 108


Exemplo<br />

Formato de ficheiros do <strong>VTK</strong><br />

# vtk DataFile Version 3.0<br />

vtk output<br />

ASCII<br />

DATASET POLYDATA<br />

POINTS 119 float<br />

197 192 53 196 186 53 201 188 51<br />

161 192 55 168 192 45 165 197 39<br />

...<br />

POLYGONS 219 876<br />

3 0 1 2<br />

3 3 4 5<br />

3 6 7 8<br />

...<br />

POINT_DATA 119<br />

SCALARS scalars float<br />

LOOKUP_TABLE default<br />

53 53 51 55 45 39 71 69 76<br />

61 68 58 40 62 37 40 65 36<br />

...<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 109


Exemplo<br />

Formato de ficheiros do <strong>VTK</strong><br />

# vtk DataFile Version 3.0<br />

vtk output<br />

ASCII<br />

DATASET POLYDATA<br />

POINTS 16 float<br />

0.367063 0 0.333333 0.350198 0.040716 0.333333 0.259553 0.259553 0.333333 0.218837 0.276418 0.333333 -1.60449e-008 0.367063<br />

0.333333 -0.040716 0.350198 0.333333 -0.259553 0.259553 0.333333 -0.276418 0.218837 0.333333 -0.367063 -3.20897e-008 0.333333 -<br />

0.350198 -0.040716 0.333333 -0.259553 -0.259553 0.333333 -0.218837 -0.276418 0.333333 4.37719e-009 -0.367063 0.333333 0.040716 -<br />

0.350198 0.333333 0.259553 -0.259553 0.333333 0.276418 -0.218837 0.333333<br />

LINES 16 48<br />

2 0 1<br />

2 1 2<br />

2 2 3<br />

2 3 4<br />

2 4 5<br />

2 5 6<br />

2 6 7<br />

2 7 8<br />

2 8 9<br />

2 9 10<br />

2 10 11<br />

2 11 12<br />

2 12 13<br />

2 13 14<br />

2 14 15<br />

2 15 0<br />

POINT_DATA 16<br />

SCALARS scalars float<br />

LOOKUP_TABLE default<br />

0.333333 0.333333 0.333333 0.333333 0.333333 0.333333 0.333333 0.333333 0.333333 0.333333 0.333333 0.333333 0.333333 0.333333<br />

0.333333 0.333333<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 110


Exemplo<br />

Formato de ficheiros do <strong>VTK</strong><br />

# vtk DataFile Version 2.0<br />

A Simple Matrix of values<br />

ASCII<br />

DATASET STRUCTURED_POINTS<br />

DIMENSIONS 10 5 1<br />

ORIGIN 0 0 0<br />

SPACING 1 1 1<br />

POINT_DATA 50<br />

SCALARS values float<br />

LOOKUP_TABLE default<br />

0 0 0 0 0 0 0 0 0 0<br />

0 1 1 0 0 0 0 0 0 0<br />

0 1 1 1 0 0 0 0 0 0<br />

0 0 1 1 1 1 1 0 0 0<br />

0 0 0 0 0 0 0 0 0 0<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 111


Exemplo<br />

Formato de ficheiros do <strong>VTK</strong><br />

# vtk DataFile Version 1.0<br />

Line representation of vtk<br />

ASCII<br />

DATASET POLYDATA<br />

POINTS 12 float<br />

0.0 2.0 0.0<br />

1.0 0.0 0.0<br />

2.0 2.0 0.0<br />

3.0 0.0 0.0<br />

3.0 3.0 0.0<br />

2.5 2.0 0.0<br />

3.5 2.0 0.0<br />

4.0 0.0 0.0<br />

4.0 3.0 0.0<br />

5.0 2.0 0.0<br />

4.0 1.0 0.0<br />

5.0 0.0 0.0<br />

LINES 5 17<br />

3 0 1 2<br />

2 3 4<br />

2 5 6<br />

2 7 8<br />

3 9 10 11<br />

J. Tavares / J. Barbosa Visualização Cientifíca - <strong>Introdução</strong> <strong>ao</strong> <strong>VTK</strong> 112

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!