UnstructuredTransientVolumeRendering
VTKExamples/Python/Untested/HasBugs/Visualization/UnstructuredTransientVolumeRendering
Description¶
Volume render unstructured transient data.
Code¶
UnstructuredTransientVolumeRendering.py
#!/usr/bin/env python from __future__ import print_function import vtk tse = vtk.vtkTimeSourceExample() ex = tse.GetExecutive() tse.UpdateInformation() # inspect available time range and time steps print(ex.GetOutputInformation()) # make it grow because bounds are easy to inspect # tse.SetGrowing(1) ex.SetUpdateTimeStep(0, 0.0) tse.Update() print(tse.GetOutput().GetBounds()) # pick some other time inside the time range ex.SetUpdateTimeStep(0, 0.5) tse.Update() print(tse.GetOutput().GetBounds()) grid = tse.GetOutput() print(grid) tri = vtk.vtkDataSetTriangleFilter() tri.SetInputData(grid) tri.SetTetrahedraOnly(1) tri.Update() output = tri.GetOutput() iss = output.GetPointData().SetActiveScalars("Point Label") # iss = gridMapper.GetInput().GetCellData().SetActiveScalars(options.scalarName) assert(iss > -1) drange = [0, 1] # Create transfer mapping scalar value to opacity. opacityFunction = vtk.vtkPiecewiseFunction() opacityFunction.AddPoint(drange[0], 0.0) opacityFunction.AddPoint(drange[1], 1.0) # Create transfer mapping scalar value to color. colorFunction = vtk.vtkColorTransferFunction() colorFunction.SetColorSpaceToHSV() colorFunction.HSVWrapOff() colorFunction.AddRGBPoint(drange[0], 0.0, 0.0, 1.0) colorFunction.AddRGBPoint(drange[1], 1.0, 0.0, 0.0) volumeProperty = vtk.vtkVolumeProperty() volumeProperty.SetScalarOpacity(opacityFunction) volumeProperty.SetColor(colorFunction) volumeProperty.ShadeOff() volumeProperty.SetInterpolationTypeToLinear() # volumeProperty.SetScalarOpacityUnitDistance(options.unit) volumeMapper = vtk.vtkUnstructuredGridVolumeRayCastMapper() # volumeMapper = vtk.vtkUnstructuredGridVolumeZSweepMapper() # volumeMapper = vtk.vtkProjectedTetrahedraMapper() # volumeMapper.SetBlendModeToMaximumIntensity() volumeMapper.SetInputData(output) volume = vtk.vtkVolume() volume.SetMapper(volumeMapper) volume.SetProperty(volumeProperty) # create a rendering window and renderer renderer = vtk.vtkRenderer() renderer.SetBackground(0, 0, 0) window = vtk.vtkRenderWindow() window.SetSize(512, 512) window.AddRenderer(renderer) interactor = vtk.vtkRenderWindowInteractor() interactor.SetRenderWindow(window) style = vtk.vtkInteractorStyleTrackballCamera() interactor.SetInteractorStyle(style) renderer.AddVolume(volume) scalarBar = vtk.vtkScalarBarActor() scalarBar.SetLookupTable(colorFunction) scalarBar.SetOrientationToVertical() scalarBar.SetPosition(0.85, 0.7) scalarBar.SetPosition2(0.1, 0.3) propT = vtk.vtkTextProperty() propL = vtk.vtkTextProperty() propT.SetFontFamilyToArial() propT.ItalicOff() propT.BoldOn() propL.BoldOff() scalarBar.SetTitleTextProperty(propT) scalarBar.SetLabelTextProperty(propL) scalarBar.SetLabelFormat("%5.2f") renderer.AddActor(scalarBar) # setup the text and add it to the window textActor = vtk.vtkTextActor() textActor.GetTextProperty().SetFontSize(12) textActor.SetPosition2(10, 40) renderer.AddActor2D(textActor) textActor.SetInput("time = ") textActor.GetTextProperty().SetColor(1.0, 1.0, 1.0) renderer.ResetCameraClippingRange() renderer.ResetCamera() counter = 1 time = 0 while time <= 1: print("time = ", time) textActor.SetInput("time = %g" % time) window.Render() # TODO FIXME if this block is not here than the volume renders wrongly # renderer.RemoveVolume(volume) # del volume volume = vtk.vtkVolume() volume.SetMapper(volumeMapper) volume.SetProperty(volumeProperty) renderer.AddVolume(volume) counter = counter + 1 time = time + 1. / 10 ex.SetUpdateTimeStep(0, time) tse.Modified() if output.GetPointData().GetScalars(): print(output.GetPointData().GetScalars().GetRange()) # if grid.GetPointData().GetScalars(): # print(grid.GetPointData().GetScalars().GetRange()) # print(grid.GetPointData().GetScalars()) # while True: # window.Render()