Rainbow
VTKExamples/Python/Rendering/Rainbow
Description¶
This example demonstrates the use and manipulation of vtkLookupTable's.
First create a simple pipeline that reads a vtkStructuredGrid and then extracts a plane using vtkStructuredGeometryFilter from the grid. The plane will be colored differently by using different vtkLookupTable's.
Note
The Update method is manually invoked because it causes the reader to read; later on we use the output of the reader to set a range for the scalar values.
Note
This original tcl source code for this example is here.
Other Languages
See (Cxx)
Code¶
Rainbow.py
#!/usr/bin/env python import vtk def main(): xyzFn, qFn = get_program_parameters() colors = vtk.vtkNamedColors() pl3d = vtk.vtkMultiBlockPLOT3DReader() pl3d.SetXYZFileName(xyzFn) pl3d.SetQFileName(qFn) pl3d.SetScalarFunctionNumber(100) pl3d.SetVectorFunctionNumber(202) pl3d.Update() pl3dOutput = pl3d.GetOutput().GetBlock(0) plane = vtk.vtkStructuredGridGeometryFilter() plane.SetInputData(pl3dOutput) plane.SetExtent(1, 100, 1, 100, 7, 7) lut = vtk.vtkLookupTable() planeMapper = vtk.vtkPolyDataMapper() planeMapper.SetLookupTable(lut) planeMapper.SetInputConnection(plane.GetOutputPort()) planeMapper.SetScalarRange(pl3dOutput.GetScalarRange()) planeActor = vtk.vtkActor() planeActor.SetMapper(planeMapper) # This creates an outline around the data. outline = vtk.vtkStructuredGridOutlineFilter() outline.SetInputData(pl3dOutput) outlineMapper = vtk.vtkPolyDataMapper() outlineMapper.SetInputConnection(outline.GetOutputPort()) outlineActor = vtk.vtkActor() outlineActor.SetMapper(outlineMapper) # Much of the following is commented out. To try different lookup tables, # uncomment the appropriate portions. # # This creates a black to white lut. # lut.SetHueRange(0, 0) # lut.SetSaturationRange(0, 0) # lut.SetValueRange(0.2, 1.0) # This creates a red to blue lut. # lut.SetHueRange(0.0, 0.667) # This creates a blue to red lut. # lut.SetHueRange(0.667, 0.0) # This creates a weird effect. The Build() method causes the lookup table # to allocate memory and create a table based on the correct hue, saturation, # value, and alpha (transparency) range. Here we then manually overwrite the # values generated by the Build() method. lut.SetNumberOfColors(256) lut.SetHueRange(0.0, 0.667) lut.Build() # Create the RenderWindow, Renderer and both Actors. # ren1 = vtk.vtkRenderer() renWin = vtk.vtkRenderWindow() renWin.AddRenderer(ren1) iren = vtk.vtkRenderWindowInteractor() iren.SetRenderWindow(renWin) # Add the actors to the renderer, set the background and size. # ren1.AddActor(outlineActor) ren1.AddActor(planeActor) ren1.SetBackground(colors.GetColor3d("SlateGray")) ren1.TwoSidedLightingOff() renWin.SetSize(512, 512) iren.Initialize() cam1 = ren1.GetActiveCamera() cam1.SetClippingRange(3.95297, 50) cam1.SetFocalPoint(8.88908, 0.595038, 29.3342) cam1.SetPosition(-12.3332, 31.7479, 41.2387) cam1.SetViewUp(0.060772, -0.319905, 0.945498) iren.Start() def get_program_parameters(): import argparse description = 'Demonstrates the use and manipulation of lookup tables.' epilogue = ''' First create a simple pipeline that reads a structured grid and then extracts a plane from the grid. The plane will be colored differently by using different lookup tables. Note: The Update method is manually invoked because it causes the reader to read; later on we use the output of the reader to set a range for the scalar values. ''' parser = argparse.ArgumentParser(description=description, epilog=epilogue, formatter_class=argparse.RawDescriptionHelpFormatter) parser.add_argument('xyzFilename', help='combxyz.bin.') parser.add_argument('qFilename', help='combq.bin.') args = parser.parse_args() return args.xyzFilename, args.qFilename if __name__ == '__main__': main()