本文在“用VTK绘制DEM之一”一文的基础上,按高程设色,增强了可视化效果。
下面代码中的红色部分是为添加颜色新加的,主要有两部分:
1. 为polydata的每个cell指定scalar,不同的scalar对应于不同的颜色
# set scalar cell data
colors = vtk.vtkFloatArray()
polyData.GetCellData().SetScalars(colors)
在指定每个cell的同时,指定该cell的颜色scalar
......
cell = polyData.InsertNextCell(VTK_POLYGON, ids)
colorScalar = 8*(array[yPixel][xPixel]-min)/heightRange
colors.InsertTuple1(cell, colorScalar)
2. 为vtkPolyDataMapper设置查找表
# define colors
lut = vtk.vtkLookupTable()
lut.SetNumberOfTableValues(9)
lut.SetTableRange(0, 8)
lut.SetTableValue(0, 0.517, 0.710, 0.694, 1.0)
lut.SetTableValue(1, 0.765, 0.808, 0.572, 1.0)
lut.SetTableValue(2, 0.086, 0.521, 0.149, 1.0)
lut.SetTableValue(3, 0.580, 0.580, 0.141, 1.0)
lut.SetTableValue(4, 0.721, 0.266, 0.027, 1.0)
lut.SetTableValue(5, 0.396, 0.098, 0.003, 1.0)
lut.SetTableValue(6, 0.474, 0.278, 0.149, 1.0)
lut.SetTableValue(7, 0.694, 0.686, 0.698, 1.0)
lut.SetTableValue(8, 1.0, 1.0, 1.0, 1.0)
lut.Build()
polyDataMapper = vtk.vtkPolyDataMapper()
polyDataMapper.SetInput(polyData)
polyDataMapper.SetScalarModeToUseCellData()
polyDataMapper.UseLookupTableScalarRangeOn()
polyDataMapper.SetLookupTable(lut)
代码如下:
# coding=utf-8
# app.py
# author:liujunzhi
# date:20071210
import vtk
from vtk.wx.wxVTKRenderWindow import wxVTKRenderWindow
import sys, time
from gdal import gdal
from wxPython.wx import *
VTK_POLYGON = 7
def display_dem(renWin, demName):
# open dem file with gdal
dataset = gdal.Open(demName)
if dataset is None:
print ' open DEM file failed! '
sys.exit(0)