1#!/usr/bin/env python 2import os 3import vtk 4from vtk.util.misc import vtkGetDataRoot 5VTK_DATA_ROOT = vtkGetDataRoot() 6 7def GetRGBColor(colorName): 8 ''' 9 Return the red, green and blue components for a 10 color as doubles. 11 ''' 12 rgb = [0.0, 0.0, 0.0] # black 13 vtk.vtkNamedColors().GetColorRGB(colorName, rgb) 14 return rgb 15 16# Generate a rectilinear grid from a field. 17# 18 19# Create a reader and write out the field 20reader = vtk.vtkDataSetReader() 21reader.SetFileName(VTK_DATA_ROOT + "/Data/RectGrid2.vtk") 22 23ds2do = vtk.vtkDataSetToDataObjectFilter() 24ds2do.SetInputConnection(reader.GetOutputPort()) 25 26# NOTE: This test only works if the current directory is writable 27# 28try: 29 channel = open("RGridField.vtk", "wb") 30 channel.close() 31 32 writer = vtk.vtkDataObjectWriter() 33 writer.SetInputConnection(ds2do.GetOutputPort()) 34 writer.SetFileName("RGridField.vtk") 35 writer.Write() 36 37 # Read the field 38 # 39 dor = vtk.vtkDataObjectReader() 40 dor.SetFileName("RGridField.vtk") 41 42 do2ds = vtk.vtkDataObjectToDataSetFilter() 43 do2ds.SetInputConnection(dor.GetOutputPort()) 44 do2ds.SetDataSetTypeToRectilinearGrid() 45 do2ds.SetDimensionsComponent("Dimensions", 0) 46 do2ds.SetPointComponent(0, "XCoordinates", 0) 47 do2ds.SetPointComponent(1, "YCoordinates", 0) 48 do2ds.SetPointComponent(2, "ZCoordinates", 0) 49 do2ds.Update() 50 51 fd2ad = vtk.vtkFieldDataToAttributeDataFilter() 52 fd2ad.SetInputData(do2ds.GetRectilinearGridOutput()) 53 fd2ad.SetInputFieldToDataObjectField() 54 fd2ad.SetOutputAttributeDataToPointData() 55 fd2ad.SetVectorComponent(0, "vectors", 0) 56 fd2ad.SetVectorComponent(1, "vectors", 1) 57 fd2ad.SetVectorComponent(2, "vectors", 2) 58 fd2ad.SetScalarComponent(0, "scalars", 0) 59 fd2ad.Update() 60 61 # create pipeline 62 # 63 plane = vtk.vtkRectilinearGridGeometryFilter() 64 plane.SetInputData(fd2ad.GetRectilinearGridOutput()) 65 plane.SetExtent(0, 100, 0, 100, 15, 15) 66 67 warper = vtk.vtkWarpVector() 68 warper.SetInputConnection(plane.GetOutputPort()) 69 warper.SetScaleFactor(0.05) 70 71 planeMapper = vtk.vtkDataSetMapper() 72 planeMapper.SetInputConnection(warper.GetOutputPort()) 73 planeMapper.SetScalarRange(0.197813, 0.710419) 74 75 planeActor = vtk.vtkActor() 76 planeActor.SetMapper(planeMapper) 77 78 cutPlane = vtk.vtkPlane() 79 cutPlane.SetOrigin(fd2ad.GetOutput().GetCenter()) 80 cutPlane.SetNormal(1, 0, 0) 81 82 planeCut = vtk.vtkCutter() 83 planeCut.SetInputData(fd2ad.GetRectilinearGridOutput()) 84 planeCut.SetCutFunction(cutPlane) 85 86 cutMapper = vtk.vtkDataSetMapper() 87 cutMapper.SetInputConnection(planeCut.GetOutputPort()) 88 cutMapper.SetScalarRange(fd2ad.GetOutput().GetPointData().GetScalars().GetRange()) 89 90 cutActor = vtk.vtkActor() 91 cutActor.SetMapper(cutMapper) 92 93 iso = vtk.vtkContourFilter() 94 iso.SetInputData(fd2ad.GetRectilinearGridOutput()) 95 iso.SetValue(0, 0.7) 96 97 normals = vtk.vtkPolyDataNormals() 98 normals.SetInputConnection(iso.GetOutputPort()) 99 normals.SetFeatureAngle(45) 100 101 isoMapper = vtk.vtkPolyDataMapper() 102 isoMapper.SetInputConnection(normals.GetOutputPort()) 103 isoMapper.ScalarVisibilityOff() 104 105 isoActor = vtk.vtkActor() 106 isoActor.SetMapper(isoMapper) 107 isoActor.GetProperty().SetColor(GetRGBColor('bisque')) 108 isoActor.GetProperty().SetRepresentationToWireframe() 109 110 streamer = vtk.vtkStreamTracer() 111 streamer.SetInputConnection(fd2ad.GetOutputPort()) 112 streamer.SetStartPosition(-1.2, -0.1, 1.3) 113 streamer.SetMaximumPropagation(500) 114 streamer.SetInitialIntegrationStep(0.05) 115 streamer.SetIntegrationDirectionToBoth() 116 117 streamTube = vtk.vtkTubeFilter() 118 streamTube.SetInputConnection(streamer.GetOutputPort()) 119 streamTube.SetRadius(0.025) 120 streamTube.SetNumberOfSides(6) 121 streamTube.SetVaryRadiusToVaryRadiusByVector() 122 123 mapStreamTube = vtk.vtkPolyDataMapper() 124 mapStreamTube.SetInputConnection(streamTube.GetOutputPort()) 125 mapStreamTube.SetScalarRange(fd2ad.GetOutput().GetPointData().GetScalars().GetRange()) 126 127 streamTubeActor = vtk.vtkActor() 128 streamTubeActor.SetMapper(mapStreamTube) 129 streamTubeActor.GetProperty().BackfaceCullingOn() 130 131 outline = vtk.vtkOutlineFilter() 132 outline.SetInputData(fd2ad.GetRectilinearGridOutput()) 133 134 outlineMapper = vtk.vtkPolyDataMapper() 135 outlineMapper.SetInputConnection(outline.GetOutputPort()) 136 137 outlineActor = vtk.vtkActor() 138 outlineActor.SetMapper(outlineMapper) 139 outlineActor.GetProperty().SetColor(GetRGBColor('black')) 140 141 # Graphics stuff 142 # Create the RenderWindow, Renderer and both Actors 143 # 144 ren1 = vtk.vtkRenderer() 145 renWin = vtk.vtkRenderWindow() 146 renWin.SetMultiSamples(0) 147 renWin.AddRenderer(ren1) 148 iren = vtk.vtkRenderWindowInteractor() 149 iren.SetRenderWindow(renWin) 150 151 # Add the actors to the renderer, set the background and size 152 # 153 ren1.AddActor(outlineActor) 154 ren1.AddActor(planeActor) 155 ren1.AddActor(cutActor) 156 ren1.AddActor(isoActor) 157 ren1.AddActor(streamTubeActor) 158 159 ren1.SetBackground(1, 1, 1) 160 161 renWin.SetSize(300, 300) 162 163 ren1.GetActiveCamera().SetPosition(0.0390893, 0.184813, -3.94026) 164 ren1.GetActiveCamera().SetFocalPoint(-0.00578326, 0, 0.701967) 165 ren1.GetActiveCamera().SetViewAngle(30) 166 ren1.GetActiveCamera().SetViewUp(0.00850257, 0.999169, 0.0398605) 167 ren1.GetActiveCamera().SetClippingRange(3.08127, 6.62716) 168 169 iren.Initialize() 170 171 # render the image 172 # 173 renWin.Render() 174 175 # cleanup 176 # 177 try: 178 os.remove("RGridField.vtk") 179 except OSError: 180 pass 181 182 183# iren.Start() 184 185except IOError: 186 print("Couldn't open RGridField.vtk for writing.") 187