14.04.2013 Views

Introdução ao VTK

Introdução ao VTK

Introdução ao VTK

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

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!