vtkMapper颜色映射

在工作中常常会遇到需要将流体计算的结果用颜色映射表示的时候。

一般在计算时会将结果存成vtkPointData,于是我们要做的就是取出vtkPointData的数组将其映射出来。

我们需要用到vtkMapper里的这个函数:

SelectColorArray() 

当 ScalarMode 设置为 UsePointFieldData 或 UseCellFieldData 时,您可以使用这些方法指定要用于着色的数组。查找表将决定如何将矢量转换为颜色。

完整代码如下:

import vtkmodules.all as vtk


def ReadUnstructuredGrid():
    colors = vtk.vtkNamedColors()
    filename = "Calculate.vtk"
    # 创建自定义lut。lut用于映射器和标量条
    lut = vtk.vtkLookupTable()
    lut.Build()

    reader = vtk.vtkUnstructuredGridReader()
    reader.SetFileName(filename)
    reader.Update()
    output = reader.GetOutput()
    scalar_range = output.GetScalarRange()

    polydata = reader.GetOutput()
    # print(polydata.GetNumberOfPoints())
    # for i in range(polydata.GetPointData().GetNumberOfArrays()):
    #    print(polydata.GetPointData().GetArrayName(i))
    #   print(polydata.GetPointData().GetArray(i))
    newAarry = polydata.GetPointData().GetArray(2)
    dataRange = newAarry.GetRange()
    # lut.SetHueRange(dataRange)
    print(dataRange)

    mapper = vtk.vtkDataSetMapper()
    mapper.SetInputData(output)
    mapper.SetScalarRange(dataRange)
    mapper.SetLookupTable(lut)
    mapper.SetScalarModeToUsePointFieldData()
    mapper.SelectColorArray(2)
    # mapper.ScalarVisibilityOff()

    actor = vtk.vtkActor()
    actor.SetMapper(mapper)

    renderer = vtk.vtkRenderer()
    renderer.AddActor(actor)
    # 根据可见演员自动设置相机。
    # 摄像机将重新定位自己以查看演员的中心点,并沿其初始视图平面法线(即,从摄像机位置到焦点定义的矢量)移动,以便可以看到所有演员。
    renderer.GetActiveCamera().Pitch(60)
    renderer.GetActiveCamera().SetViewUp(0, 0, 1)
    renderer.ResetCamera()
    renderer.SetBackground(colors.GetColor3d('White'))

    renWin = vtk.vtkRenderWindow()
    renWin.AddRenderer(renderer)
    renWin.SetSize(640, 480)
    renWin.SetWindowName('ReadUnstructuredGrid')

    interactor = vtk.vtkRenderWindowInteractor()
    interactor.SetRenderWindow(renWin)

    # create the scalar_bar
    scalar_bar = vtk.vtkScalarBarActor()
    scalar_bar.SetOrientationToHorizontal()
    scalar_bar.SetLookupTable(mapper.GetLookupTable())
    # scalar_bar.SetHeight()

    # create the scalar_bar_widget
    scalar_bar_widget = vtk.vtkScalarBarWidget()
    scalar_bar_widget.SetInteractor(interactor)
    scalar_bar_widget.SetScalarBarActor(scalar_bar)
    scalar_bar_widget.On()
    renWin.Render()

    imagefilter = vtk.vtkWindowToImageFilter()
    imagefilter.SetInput(renWin)
    writer = vtk.vtkPNGWriter()
    writer.SetInputConnection(imagefilter.GetOutputPort())
    writer.SetFileName("b.png")
    writer.Write()

    interactor.Initialize()
    interactor.Start()


if __name__ == '__main__':
    ReadUnstructuredGrid()

这里我选择了下标为2的数组。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值