Render Cell Scalars from vtkXMLPolyData?

That was the missing clue, I think. There was a note in there that mentioned SetScalars … I guess I had naively assumed that storing arrays would make them available to use for the mapper. I guess in ParaView, it figures it out, but in raw VTK, there is a difference between an array in the cell data, and a scalar in the cell data.

The change that needed to be made was to set the temperature array as the scalars for the cell data.

Here’s the script that works now:

#!/usr/bin/env python3
import vtkmodules.vtkRenderingOpenGL2

from glob import glob
from vtkmodules.vtkCommonCore import vtkLookupTable
from vtkmodules.vtkIOImage import vtkPNGWriter
from vtkmodules.vtkRenderingCore import (
    vtkActor,
    vtkColorTransferFunction,
    vtkPolyDataMapper,
    vtkRenderWindow,
    vtkRenderWindowInteractor,
    vtkRenderer)
from vtkmodules.vtkIOXML import vtkXMLPolyDataReader

MAX_TEMP = 300
TABLE_SIZE = 256

def debug_view(fname):
    import sys
    from vtkmodules.vtkInteractionStyle import vtkInteractorStyleTrackballCamera

    r = vtkXMLPolyDataReader()
    r.SetFileName(fname)
    r.Update()

    pd = r.GetOutput()
    t = pd.GetCellData().GetArray("Temperature")
    pd.GetCellData().SetScalars(t)

    ctf = vtkColorTransferFunction()
    ctf.SetColorSpaceToRGB()
    ctf.AddRGBPoint(0, 1.0, 0.0, 0.0)
    ctf.AddRGBPoint(MAX_TEMP, 0.0, 0.0, 1.0)

    lut = vtkLookupTable()
    lut.SetNumberOfTableValues(TABLE_SIZE)
    lut.SetTableRange(0, MAX_TEMP)
    lut.SetRampToLinear()
    lut.Build()

    m = vtkPolyDataMapper()
    m.SetInputData(pd)
    m.SetLookupTable(lut)
    m.SetScalarModeToUseCellData()
    m.SetColorModeToMapScalars()
    m.SelectColorArray("Temperature")
    m.SetScalarRange(0, MAX_TEMP)

    a = vtkActor()
    a.SetMapper(m)
    a.RotateX(-20)
    a.RotateY(50)

    ren = vtkRenderer()
    ren.AddActor(a)
    renWin = vtkRenderWindow()
    renWin.AddRenderer(ren)

    iren = vtkRenderWindowInteractor()
    iren.SetRenderWindow(renWin)
    style = vtkInteractorStyleTrackballCamera()
    iren.SetInteractorStyle(style)

    renWin.SetSize(300, 300)
    renWin.SetWindowName("Tetra")
    iren.Initialize()
    ren.ResetCamera()
    renWin.Render()
    iren.Start()

if __name__ == "__main__":
    debug_view("hot_tetra.vtp")

1 Like