quinta-feira, 10 de janeiro de 2013

Introdução ao Visualization Toolkit (VTK)


Figura 1: Exemplo de pipeline
Visualization Toolkit (VTK) é uma biblioteca para visualização, processamento de imagens e computação gráfica. Multiplataforma (Linux, Mac OS X e Windows) de código fonte aberto, ela dispõe de fácil integração com bibliotecas de interface gráfica como Qt, GTK, wxPython, MFC, entre outras. Além de C++, por meio de wrapper ela suporta outras linguagens de programação como Python, Java e TCL.

Para processar imagens, superfícies ou outros dados suportados pelo VTK, é possível utilizar uma das centenas de filtros disponíveis nele, a documentação é dividida por classes e a grande maioria é repleta de exemplos.

Como ilustra a figura 1, o VTK trabalha com o conceito de pipeline, aonde a entrada (input) de uma determinada funcionalidade recebe a saída de uma funcionalidade anterior (output).

No exemplo abaixo será mostrada a criação e visualização de um cubo, lembrando que nesse caso a linguagem de programação utilizada será Python. Podemos observar o resultado na figura 2.

# -*- coding: utf-8 -*- 

#Importar o módulo vtk
import vtk

#Criar a representação poligonal de um cubo de 10x10x10
cube = vtk.vtkCubeSource()
cube.SetXLength(10)
cube.SetYLength(10)
cube.SetZLength(10)

#Mapear o dado poligonal para primitivas gráficas
cube_mapper = vtk.vtkPolyDataMapper()
cube_mapper.SetInputConnection(cube.GetOutputPort())

#Representar o objeto em uma cena
cube_actor = vtk.vtkActor()
cube_actor.SetMapper(cube_mapper)
cube_actor.SetPosition(0.0,0,0)
cube_actor.GetProperty().SetColor(0,0,1)

#Adicionar objetos e definir a cor
#de fundo da cena no renderizador.
ren = vtk.vtkRenderer()
ren.AddActor(cube_actor)
ren.SetBackground(.8, .8, .8)

#Adicionar o renderizador na interface gráfica 
#do utilizador (GUI)
ren_win = vtk.vtkRenderWindow()
ren_win.AddRenderer(ren)
ren_win.SetSize(600,600)

#Adicionar recursos de interação na GUI
interactor = vtk.vtkRenderWindowInteractor()
interactor.SetRenderWindow(ren_win)

#Atualizar toda a cena
interactor.Render()

#Manter a janela (GUI) em um loop
interactor.Start()

Figura 2: Cubo renderizado com VTK


3 comentários:

  1. Show de bola man! Eu estava justamenter atrás disso. Obrigado!

    ResponderExcluir
  2. Estou tendo problemas ao inserir a biblioteca do VTK no meu projeto, voce poderia detalhar?

    ResponderExcluir
    Respostas
    1. Você está utilizando Python? O problema é na hora de gerar executável ou programar mesmo? Qual é o erro?

      Excluir