Detalhes

A seguir são descritos trechos de código referentes a algumas das funcionalidades implementadas no DEMVis.

- Ler arquivo USGS DEM

O leitor vtkDEMReader lê um arquivo USGS DEM e cria um vtkImageData que contém uma matriz de dados escalares que correspondem as elevações em metros. O espaçamento entre as amostras também é expresso em metros.

demReader = vtk.vtkDEMReader()
demReader.SetFileName(fileName)
demReader.Update()

- Visualizar efeito banda

O vtkBandedPolyDataContourFilter é um filtro que recebe como entrada um vtkPolyData e produz como saída contornos preenchidos.

bandedPolyDataContour = vtk.vtkBandedPolyDataContourFilter()
bandedPolyDataContour.SetInput(warpScalar.GetPolyDataOutput())
bandedPolyDataContour.GenerateValues(
    numberOfContours, demReader.GetOutput().GetScalarRange())
bandedPolyDataContour.SetScalarModeToIndex()
bandedPolyDataContour.GenerateContourEdgesOn()

- Visualizar contorno

A vtkPolyDataMapper é uma classe que mapeia dados poligonais em primitivas gráficas. É possível classificar intervalos de valores igualmente espaçados.

polyDataMapper = vtk.vtkPolyDataMapper()
polyDataMapper.SetInput(bandedPolyDataContourFilter.GetContourEdgesOutput())
polyDataMapper.SetResolveCoincidentTopologyToPolygonOffset()

- Visualizar mapeamento em altura

O vtkWarpScalar é um filtro que modifica as coordenadas de um conjunto de pontos, movendo-os no sentido da normal a uma distância calculada pela multiplicação do valor do escalar pelo fator de escala.

warpScalar = vtk.vtkWarpScalar()
warpScalar.SetInputConnection(imageDataGeometryFilter.GetOutputPort())
warpScalar.SetNormal(0, 0, 1)
warpScalar.UseNormalOn()
warpScalar.SetScaleFactor(scaleFactor)

- Reamostragem

A classe vtkImageShrink3D permite reduzir o tamanho de uma matriz através de subamostragem dos dados contidos em uma grade uniforme. O fator de redução pode ser diferente em cada um dos eixos principais da grade uniforme.

imageShrink3D = vtk.vtkImageShrink3D()
imageShrink3D.SetShrinkFactors(shrinkFactor, shrinkFactor, 1)
imageShrink3D.SetInputConnection(demReader.GetOutputPort())
imageShrink3D.AveragingOn()

- Alterar tabela de cores

Um vtkLookupTable pode ser usado por objetos de mapeamento para mapear valores escalares em RGBA ou vice-versa. A tabela de cores pode ser criada por inserção direta de valores de cor ou pela especificação da variação de matiz, saturação e brilho.

lookupTable = vtk.vtkLookupTable()
lookupTable.SetNumberOfColors(numberOfColors)
lookupTable.SetHueRange(hueRange[0], hueRange[1])
lookupTable.SetSaturationRange(saturationRange[0], saturationRange[1])
lookupTable.SetValueRange(valueRange[0], valueRange[1])
lookupTable.Build()

- Aplicar textura

O vtkTextureMapToPlane é um filtro que mapeaia as coordenadas de uma textura 2D em coordenadas espaciais.

jpegReader = vtk.vtkJPEGReader()
jpegReader.SetFileName(fileName)

texture = vtk.vtkTexture()
texture.SetInput(jpegReader.GetOutput())

textureMapToPlane = vtk.vtkTextureMapToPlane()
textureMapToPlane.SetInput(polyDataNormals.GetOutput())

polyDataMapper = vtk.vtkPolyDataMapper()
polyDataMapper.SetInputConnection(textureMapToPlane.GetOutputPort())
polyDataMapper.ScalarVisibilityOff()

actor = vtkActor()
actor.SetTexture(texture)
actor.SetMapper(polyDataMapper)

- Visualizar legenda

O vtkScalarBarActor cria uma barra de escalar com anotações textuais. Uma barra de escalar é uma legenda que indica a correspondência entre os valores de cor e os dados. O vtkScalarBarActor é uma subclasse de vtkActor2D, portanto é representada no plano de projeção das figuras geométricas 3D. Para usar um vtkScalarBarActor, basta associar um vtkScalarsToColors a ele.

scalarBarActor = vtk.vtkScalarBarActor()
scalarBarActor.SetLookupTable(lookupTable)
scalarBarActor.SetTextPositionToPrecedeScalarBar()

- Aplicar recorte em intervalo de elevação

O vtkBandedPolyDataContourFilter também permite aplicar recorte em um intervalo de valores escalares, ou seja, eliminação de valores não contidos em um dado intervalo.

bandedPolyDataContourFilter = vtk.vtkBandedPolyDataContourFilter()
bandedPolyDataContourFilter.ClippingOn()
bandedPolyDataContourFilter.GenerateValues(numContours, rangeStart, rangeEnd)

- Visão estereoscópica por anaglifo

O vtkRenderWindow é um objeto abstrato responsável pelo gerenciamento do comportamento da janela de renderização, que é uma interface através do qual os modelos geométricos processados são exibidos na tela. Este também permite a renderização estereoscópica por anaglifo.

renderWindow = vtk.vtkRenderWindow()
renderWindow.SetStereoTypeToAnaglyph()
renderWindow.StereoRenderOn()
renderWindow.StereoUpdate()
renderWindow.Render()

- Salvar captura de tela

Com o vtkWindowToImageFilter é possível obter os dados de um vtkWindow para usá-los como entrada no fluxo de imageamento. Isto pode ser útil quando se deseja converter um vtkRenderWindow em um formato de imagem.

windowToImageFilter = vtk.vtkWindowToImageFilter()
windowToImageFilter.SetInput(renderWindow)
windowToImageFilter.ReadFrontBufferOff()
windowToImageFilter.Update()

pngWriter = vtk.vtkPNGWriter()
pngWriter.SetInput(windowToImageFilter.GetOutput())
pngWriter.SetFileName(fileName)
pngWriter.Write()