text: #!/usr/bin/env python
  
  
  def DoPlot3DReaderTests(reader):
      # Ensure disable function works.
      reader.RemoveAllFunctions()
      reader.AddFunction(211) # vorticity magnitude.
      reader.Update()
      if reader.GetOutput().GetBlock(0).GetPointData().GetArray("VorticityMagnitude") is None:
          print("Failed to read `VorticityMagnitude`")
          sys.exit(1)
      if reader.GetOutput().GetBlock(0).GetPointData().GetArray("Velocity") is None:
          print("Failed to read `Velocity` to compute `VorticityMagnitude`")
          sys.exit(1)
      reader.RemoveAllFunctions()
      reader.Update()
      if reader.GetOutput().GetBlock(0).GetPointData().GetArray("VorticityMagnitude") is not None:
          print("Failed to not-read `VorticityMagnitude`")
          sys.exit(1)
  
      # Let's ensure intermediate results can be dropped.
      reader.PreserveIntermediateFunctionsOff()
      reader.AddFunction(211) # vorticity magnitude.
      reader.Update()
      if reader.GetOutput().GetBlock(0).GetPointData().GetArray("Velocity") is not None:
          print("PreserveIntermediateFunctionsOff is not working as expected.")
          sys.exit(1)
  
  # Create the RenderWindow, Renderer and both Actors
  #
  ren1 = vtk.vtkRenderer()
  renWin = vtk.vtkRenderWindow()
  renWin.AddRenderer(ren1)
  iren = vtk.vtkRenderWindowInteractor()
  iren.SetRenderWindow(renWin)
  #
  # If the current directory is writable, then test the witers
  #
  if (catch.catch(globals(),"""channel = open("test.tmp", "w")""") == 0):
      channel.close()
      file.delete("-force", "test.tmp")
      # ====== Structured Grid ======
      # First save out a grid in parallel form.
      reader = vtk.vtkMultiBlockPLOT3DReader()
      reader.SetXYZFileName("" + str(VTK_DATA_ROOT) + "/Data/combxyz.bin")
      reader.SetQFileName("" + str(VTK_DATA_ROOT) + "/Data/combq.bin")
      reader.Update()
  
      # before we continue on with the test, let's quickly do some
      # vtkMultiBlockPLOT3DReader option tests.
      DoPlot3DReaderTests(reader)
  
      contr = vtk.vtkDummyController()
      extract = vtk.vtkTransmitStructuredDataPiece()
      extract.SetController(contr)
      extract.SetInputData(reader.GetOutput().GetBlock(0))
      writer = vtk.vtkPDataSetWriter()
      writer.SetFileName("comb.pvtk")
      writer.SetInputConnection(extract.GetOutputPort())
      writer.SetNumberOfPieces(4)
      writer.Write()
      pReader = vtk.vtkPDataSetReader()
      pReader.SetFileName("comb.pvtk")
      surface = vtk.vtkDataSetSurfaceFilter()
      surface.SetInputConnection(pReader.GetOutputPort())
      mapper = vtk.vtkPolyDataMapper()
      mapper.SetInputConnection(surface.GetOutputPort())
      mapper.SetNumberOfPieces(2)
      mapper.SetPiece(0)
      mapper.SetGhostLevel(1)
      mapper.Update()
      w = vtk.vtkDataSetWriter()
  #    w.SetInputData(mapper.GetInput())
      w.SetInputData(surface.GetInput())
      w.SetFileName("foo.vtk")
      w.SetFileTypeToASCII()
      w.Write()
      file.delete("-force", "comb.pvtk")
      file.delete("-force", "comb.0.vtk")
      file.delete("-force", "comb.1.vtk")
      file.delete("-force", "comb.2.vtk")
      file.delete("-force", "comb.3.vtk")
      actor = vtk.vtkActor()
      actor.SetMapper(mapper)
      actor.SetPosition(-5,0,-29)
      # Add the actors to the renderer, set the background and size
      #
      ren1.AddActor(actor)
      # ====== ImageData ======
      # First save out a grid in parallel form.
      fractal = vtk.vtkImageMandelbrotSource()
      fractal.SetWholeExtent(0,9,0,9,0,9)
      fractal.SetSampleCX(0.1,0.1,0.1,0.1)
      fractal.SetMaximumNumberOfIterations(10)
      extract2 = vtk.vtkTransmitStructuredDataPiece()
      extract2.SetController(contr)
      extract2.SetInputConnection(fractal.GetOutputPort())
      writer2 = vtk.vtkPDataSetWriter()
      writer.SetFileName("fractal.pvtk")
      writer.SetInputConnection(extract2.GetOutputPort())
      writer.SetNumberOfPieces(4)
      writer.Write()
      pReader2 = vtk.vtkPDataSetReader()
      pReader2.SetFileName("fractal.pvtk")
      iso = vtk.vtkContourFilter()
      iso.SetInputConnection(pReader2.GetOutputPort())
      iso.SetValue(0,4)
      mapper2 = vtk.vtkPolyDataMapper()
      mapper2.SetInputConnection(iso.GetOutputPort())
      mapper2.SetNumberOfPieces(3)
      mapper2.SetPiece(0)
      mapper2.SetGhostLevel(0)
      mapper2.Update()
      # Strip the ghost cells requested by the contour filter
      mapper2.GetInput().RemoveGhostCells()
      file.delete("-force", "fractal.pvtk")
      file.delete("-force", "fractal.0.vtk")
      file.delete("-force", "fractal.1.vtk")
      file.delete("-force", "fractal.2.vtk")
      file.delete("-force", "fractal.3.vtk")
      actor2 = vtk.vtkActor()
      actor2.SetMapper(mapper2)
      actor2.SetScale(5,5,5)
      actor2.SetPosition(6,6,6)
      # Add the actors to the renderer, set the background and size
      #
      ren1.AddActor(actor2)
      # ====== PolyData ======
      # First save out a grid in parallel form.
      sphere = vtk.vtkSphereSource()
      sphere.SetRadius(2)
      writer3 = vtk.vtkPDataSetWriter()
      writer3.SetFileName("sphere.pvtk")
      writer3.SetInputConnection(sphere.GetOutputPort())
      writer3.SetNumberOfPieces(4)
      writer3.Write()
      pReader3 = vtk.vtkPDataSetReader()
      pReader3.SetFileName("sphere.pvtk")
      mapper3 = vtk.vtkPolyDataMapper()
      mapper3.SetInputConnection(pReader3.GetOutputPort())
      mapper3.SetNumberOfPieces(2)
      mapper3.SetPiece(0)
      mapper3.SetGhostLevel(1)
      mapper3.Update()
      file.delete("-force", "sphere.pvtk")
      file.delete("-force", "sphere.0.vtk")
      file.delete("-force", "sphere.1.vtk")
      file.delete("-force", "sphere.2.vtk")
      file.delete("-force", "sphere.3.vtk")
      actor3 = vtk.vtkActor()
      actor3.SetMapper(mapper3)
      actor3.SetPosition(6,6,6)
      # Add the actors to the renderer, set the background and size
      #
      ren1.AddActor(actor3)
  
      # do some extra checking to make sure we have the proper number of cells
      if surface.GetOutput().GetNumberOfCells() != 4016:
          print("surface output should have 4016 cells but has %d" % surface.GetOutput().GetNumberOfCells())
          sys.exit(1)
      if iso.GetOutput().GetNumberOfCells() != 89:
          print("iso output should have 89 cells but has %d" % iso.GetOutput().GetNumberOfCells())
          sys.exit(1)
      if pReader3.GetOutput().GetNumberOfCells() != 48:
          print("pReader3 output should have 48 cells but has %d" % pReader3.GetOutput().GetNumberOfCells())
          sys.exit(1)
      pass
  ren1.SetBackground(0.1,0.2,0.4)
  renWin.SetSize(300,300)
  # render the image
  #
  cam1 = ren1.GetActiveCamera()
  cam1.Azimuth(20)
  cam1.Elevation(40)
  ren1.ResetCamera()
  cam1.Zoom(1.2)
  iren.Initialize()
  # prevent the tk window from showing up then start the event loop
  # --- end of script --
  