In case anyone in the future needs this sort of thing:
#!/usr/bin/env python3
from os import system
from os.path import splitext
import vtkmodules.vtkRenderingOpenGL2
from glob import glob
from t01_get_value_range import get_global_max_radiance
from vtkmodules.vtkCommonCore import vtkLookupTable
from vtkmodules.vtkIOImage import vtkPNGWriter
from vtkmodules.vtkRenderingCore import (
vtkActor,
vtkPolyDataMapper,
vtkRenderWindow,
vtkRenderer,
vtkWindowToImageFilter)
from vtkmodules.vtkIOXML import vtkXMLPolyDataReader
MAX_TEMPERATURE = 500
TABLE_SIZE = 256
DEBUG = False
def debug_view(fname):
r = vtkXMLPolyDataReader()
r.SetFileName(fname)
r.Update()
pd = r.GetOutput()
t = pd.GetCellData().GetArray("Temperature")
pd.GetCellData().SetScalars(t)
lut = vtkLookupTable()
lut.SetNumberOfTableValues(TABLE_SIZE)
lut.SetTableRange(0, MAX_TEMPERATURE)
if not DEBUG:
# Grayscale
lut.SetHueRange(0.5, 0.5)
lut.SetSaturationRange(0.0, 0.0)
lut.SetValueRange(0.25, 1.0)
m = vtkPolyDataMapper()
m.SetInputData(pd)
m.SetLookupTable(lut)
m.SetScalarModeToUseCellData()
m.SetColorModeToMapScalars()
m.SelectColorArray("Temperature")
m.SetScalarRange(0, MAX_TEMPERATURE)
a = vtkActor()
a.SetMapper(m)
a.RotateX(-20)
a.RotateY(50)
ren.AddActor(a)
ren.ResetCamera()
renWin.Render()
basename = splitext(fname)[0]
save_screenshot(basename + ".png")
def save_screenshot(fname):
w2if = vtkWindowToImageFilter()
w2if.SetInput(renWin)
w2if.SetInputBufferTypeToRGB()
w2if.ReadFrontBufferOff()
w2if.Update()
writer = vtkPNGWriter()
writer.SetFileName(fname)
writer.SetInputConnection(w2if.GetOutputPort())
writer.Write()
if __name__ == "__main__":
# Set up basic visualization objects.
ren = vtkRenderer()
renWin = vtkRenderWindow()
renWin.AddRenderer(ren)
renWin.SetSize(300, 300)
renWin.SetWindowName("HTV2")
for fname in sorted(glob("surface_*.vtp")):
logger.info(f"processing {fname}")
debug_view(fname)
logger.info("generating movie")
system("ffmpeg -framerate 100 -i surface_%04d.png -pix_fmt yuv420p output.mp4")
logger.info("cleaning up temporaries")
system("rm *png")```