def _set_input (self): """ This function tries its best to generate an appropriate input for the Normals. If one has an input StructuredGrid or StructuredPoints or even a RectilinearGrid the PolyDataNormals will not work. In order for it to work an appropriate intermediate filter is used to create the correct output.""" debug ("In PolyDataNormals::_set_input ()") out = self.prev_fil.GetOutput () f = None if out.IsA ('vtkStructuredGrid'): f = vtk.vtkStructuredGridGeometryFilter () elif out.IsA ('vtkRectilinearGrid'): f = vtk.vtkRectilinearGridGeometryFilter () elif out.IsA ('vtkStructuredPoints') or out.IsA('vtkImageData'): if hasattr (vtk, 'vtkImageDataGeometryFilter'): f = vtk.vtkImageDataGeometryFilter () else: f = vtk.vtkStructuredPointsGeometryFilter () elif out.IsA('vtkUnstructuredGrid'): f = vtk.vtkGeometryFilter() elif out.IsA('vtkPolyData'): f = None else: msg = "This module does not support the given "\ "output - %s "%(out.GetClassName ()) raise Base.Objects.ModuleException, msg if f: f.SetInput (out) self.fil.SetInput (f.GetOutput ()) else: self.fil.SetInput(out)
def __init__(self, module_manager): SimpleVTKClassModuleBase.__init__( self, module_manager, vtk.vtkImageDataGeometryFilter(), 'Processing.', ('vtkImageData',), ('vtkPolyData',), replaceDoc=True, inputFunctions=None, outputFunctions=None)
def __init__ (self, mod_m): debug ("In CustomGridPlane::__init__ ()") Common.state.busy () Base.Objects.Module.__init__ (self, mod_m) self.act = None out = self.mod_m.GetOutput () if out.IsA('vtkStructuredGrid'): self.plane = vtk.vtkStructuredGridGeometryFilter () elif out.IsA ('vtkStructuredPoints') or out.IsA('vtkImageData'): if hasattr (vtk, 'vtkImageDataGeometryFilter'): self.plane = vtk.vtkImageDataGeometryFilter () else: self.plane = vtk.vtkStructuredPointsGeometryFilter () elif out.IsA ('vtkRectilinearGrid'): self.plane = vtk.vtkRectilinearGridGeometryFilter () else: msg = "This module does not support the %s dataset."%(out.GetClassName()) raise Base.Objects.ModuleException, msg self.cont_fil = vtk.vtkContourFilter () self.mapper = self.map = vtk.vtkPolyDataMapper () self.actor = self.act = vtk.vtkActor () self._initialize () self._gui_init () self.renwin.Render () Common.state.idle ()
def main(): filename = get_program_parameters() # Read the file reader = vtk.vtkStructuredPointsReader() reader.SetFileName(filename) reader.Update() geometry_filter = vtk.vtkImageDataGeometryFilter() geometry_filter.SetInputConnection(reader.GetOutputPort()) geometry_filter.Update() # Visualize mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(geometry_filter.GetOutputPort()) actor = vtk.vtkActor() actor.SetMapper(mapper) renderer = vtk.vtkRenderer() render_window = vtk.vtkRenderWindow() render_window.AddRenderer(renderer) render_window_interactor = vtk.vtkRenderWindowInteractor() render_window_interactor.SetRenderWindow(render_window) renderer.AddActor(actor) named_colors = vtk.vtkNamedColors() renderer.SetBackground(named_colors.GetColor3d("Green")) render_window.Render() render_window_interactor.Start()
def slicePlane(self, origin=(0, 0, 0), normal=(1, 1, 1)): """Extract the slice along a given plane position and normal. |slicePlane| |slicePlane.py|_ """ reslice = vtk.vtkImageReslice() reslice.SetInputData(self._data) reslice.SetOutputDimensionality(2) newaxis = utils.versor(normal) pos = np.array(origin) initaxis = (0, 0, 1) crossvec = np.cross(initaxis, newaxis) angle = np.arccos(np.dot(initaxis, newaxis)) T = vtk.vtkTransform() T.PostMultiply() T.RotateWXYZ(np.rad2deg(angle), crossvec) T.Translate(pos) M = T.GetMatrix() reslice.SetResliceAxes(M) reslice.SetInterpolationModeToLinear() reslice.Update() vslice = vtk.vtkImageDataGeometryFilter() vslice.SetInputData(reslice.GetOutput()) vslice.Update() msh = Mesh(vslice.GetOutput()) msh.SetOrientation(T.GetOrientation()) msh.SetPosition(pos) return msh
def createWarpPolyData(image, scale=1.0): geometry = vtk.vtkImageDataGeometryFilter() geometry.SetInput(image) warp = vtk.vtkWarpScalar() warp.SetInput(geometry.GetOutput()) warp.SetScaleFactor(scale) warp.Update() return warp.GetOutput()
def displayData(self): geometryFilter = vtk.vtkImageDataGeometryFilter() geometryFilter.SetInputConnection(self.reader.GetOutputPort()) geometryFilter.Update() self.outputPortForMapper = geometryFilter.GetOutputPort() self.createMapper(False) self.createActor() self.finalizePipeline()
def __init__(self, module_manager): SimpleVTKClassModuleBase.__init__(self, module_manager, vtk.vtkImageDataGeometryFilter(), 'Processing.', ('vtkImageData', ), ('vtkPolyData', ), replaceDoc=True, inputFunctions=None, outputFunctions=None)
def main(): colors = vtk.vtkNamedColors() fileName = get_program_parameters() # Now create the RenderWindow, Renderer and Interactor. # ren1 = vtk.vtkRenderer() renWin = vtk.vtkRenderWindow() renWin.AddRenderer(ren1) iren = vtk.vtkRenderWindowInteractor() iren.SetRenderWindow(renWin) imageIn = vtk.vtkPNMReader() imageIn.SetFileName(fileName) gaussian = vtk.vtkImageGaussianSmooth() gaussian.SetStandardDeviations(2, 2) gaussian.SetDimensionality(2) gaussian.SetRadiusFactors(1, 1) gaussian.SetInputConnection(imageIn.GetOutputPort()) geometry = vtk.vtkImageDataGeometryFilter() geometry.SetInputConnection(gaussian.GetOutputPort()) aClipper = vtk.vtkClipPolyData() aClipper.SetInputConnection(geometry.GetOutputPort()) aClipper.SetValue(127.5) aClipper.GenerateClipScalarsOff() aClipper.InsideOutOn() aClipper.GetOutput().GetPointData().CopyScalarsOff() aClipper.Update() mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(aClipper.GetOutputPort()) mapper.ScalarVisibilityOff() letter = vtk.vtkActor() letter.SetMapper(mapper) ren1.AddActor(letter) letter.GetProperty().SetDiffuseColor(colors.GetColor3d("LampBlack")) letter.GetProperty().SetRepresentationToWireframe() ren1.SetBackground(colors.GetColor3d("WhiteSmoke")) ren1.ResetCamera() ren1.GetActiveCamera().Dolly(1.2) ren1.ResetCameraClippingRange() renWin.SetSize(640, 480) renWin.SetWindowName('CreateBFont') # Render the image. # renWin.Render() iren.Start()
def zSlice(self, k): """Extract the slice at index `i` of volume along z-axis.""" vslice = vtk.vtkImageDataGeometryFilter() vslice.SetInputData(self.imagedata()) nx, ny, nz = self.imagedata().GetDimensions() if k > nz - 1: k = nz - 1 vslice.SetExtent(0, nx, 0, ny, k, k) vslice.Update() return Mesh(vslice.GetOutput())
def ySlice(self, j): """Extract the slice at index `j` of volume along y-axis.""" vslice = vtk.vtkImageDataGeometryFilter() vslice.SetInputData(self.imagedata()) nx, ny, nz = self.imagedata().GetDimensions() if j > ny - 1: j = ny - 1 vslice.SetExtent(0, nx, j, j, 0, nz) vslice.Update() return Mesh(vslice.GetOutput())
def xSlice(self, i): """Extract the slice at index `i` of volume along x-axis.""" vslice = vtk.vtkImageDataGeometryFilter() vslice.SetInputData(self.imagedata()) nx, ny, nz = self.imagedata().GetDimensions() if i > nx - 1: i = nx - 1 vslice.SetExtent(i, i, 0, ny, 0, nz) vslice.Update() return Mesh(vslice.GetOutput())
def main(): filename = get_program_parameters() colors = vtk.vtkNamedColors() image_data = vtk.vtkImageData() image_data.SetDimensions(3, 4, 5) image_data.AllocateScalars(vtk.VTK_DOUBLE, 1) dims = image_data.GetDimensions() # Fill every entry of the image data with "2.0" for z in range(0, dims[2]): for y in range(0, dims[1]): for x in range(0, dims[0]): pixel = image_data.GetScalarPointer(x, y, z) writer = vtk.vtkXMLImageDataWriter() writer.SetFileName(filename) writer.SetInputData(image_data) writer.Write() # Read the file(to test that it was written correctly) reader = vtk.vtkXMLImageDataReader() reader.SetFileName(filename) reader.Update() # Convert the image to a polydata image_data_geometry_filter = vtk.vtkImageDataGeometryFilter() image_data_geometry_filter.SetInputConnection(reader.GetOutputPort()) image_data_geometry_filter.Update() mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(image_data_geometry_filter.GetOutputPort()) actor = vtk.vtkActor() actor.SetMapper(mapper) actor.GetProperty().SetPointSize(3) # Setup rendering renderer = vtk.vtkRenderer() renderer.AddActor(actor) renderer.SetBackground(1, 1, 1) renderer.ResetCamera() render_window = vtk.vtkRenderWindow() render_window.AddRenderer(renderer) render_window_interactor = vtk.vtkRenderWindowInteractor() renderer.SetBackground(colors.GetColor3d("Azure")) render_window_interactor.SetRenderWindow(render_window) render_window.Render() render_window_interactor.Initialize() render_window_interactor.Start()
def render_image(png_reader): square = 8 color_map = vtk.vtkLookupTable() color_map.SetNumberOfColors(16) color_map.SetHueRange(0, 0.667) magnitude = vtk.vtkImageMagnitude() magnitude.SetInput(png_reader.GetOutput()) geometry = vtk.vtkImageDataGeometryFilter() geometry.SetInput(magnitude.GetOutput()) warp = vtk.vtkWarpScalar() warp.SetInput(geometry.GetOutput()) warp.SetScaleFactor(0.25) merge = vtk.vtkMergeFilter() merge.SetGeometry(warp.GetOutput()) merge.SetScalars(png_reader.GetOutput()) elevation_mtHood = vtk.vtkElevationFilter() elevation_mtHood.SetInput(merge.GetOutput()) elevation_mtHood.SetLowPoint(0, 0, 0) elevation_mtHood.SetHighPoint(0, 0, 50) mapper_3D_mtHood = vtk.vtkDataSetMapper() mapper_3D_mtHood.SetInput(elevation_mtHood.GetOutput()) mapper_3D_mtHood.SetLookupTable(color_map) mapper_2D_mtHood = vtk.vtkPolyDataMapper2D() mapper_2D_mtHood.SetInput(elevation_mtHood.GetOutput()) mapper_2D_mtHood.SetLookupTable(color_map) actor_2D_mtHood = vtk.vtkActor2D() actor_2D_mtHood.SetMapper(mapper_2D_mtHood) actor_2D_mtHood.GetPositionCoordinate().SetCoordinateSystemToNormalizedDisplay() actor_2D_mtHood.GetPositionCoordinate().SetValue(0.25,0.25) actor_3D_mtHood = vtk.vtkActor() actor_3D_mtHood.SetMapper(mapper_3D_mtHood) renderer = vtk.vtkRenderer() renderWindow = vtk.vtkRenderWindow() renderWindow.AddRenderer(renderer) renderWindowInteractor = vtk.vtkRenderWindowInteractor() renderWindowInteractor.SetRenderWindow(renderWindow) renderer.AddActor(actor_3D_mtHood) renderer.SetBackground(.5, .5, .5) renderWindow.SetSize(600, 600) renderWindow.Render() renderWindowInteractor.Start()
def loadStructuredPoints(filename): '''Load a vtkStructuredPoints object from file and return a vtkActor. [**Example**](https://github.com/marcomusy/vtkplotter/blob/master/examples/volumetric/readStructuredPoints.py) ![atomp2](https://user-images.githubusercontent.com/32848391/48198462-3b393700-e359-11e8-8272-670bd5f2db42.jpg) ''' reader = vtk.vtkStructuredPointsReader() reader.SetFileName(filename) reader.Update() gf = vtk.vtkImageDataGeometryFilter() gf.SetInputConnection(reader.GetOutputPort()) gf.Update() return Actor(gf.GetOutput())
def initialize_map(self): reader = vtk.vtkPNGReader() reader.SetFileName(IMAGES_PATH + MAP_FILENAME) reader.Update() filter = vtk.vtkImageDataGeometryFilter() filter.SetInputConnection(reader.GetOutputPort()) filter.Update() mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(filter.GetOutputPort()) self.map_actor = vtk.vtkActor() self.map_actor.SetMapper(mapper) self.renderer.AddActor(self.map_actor)
def initialize_map(self): reader = vtk.vtkPNGReader() reader.SetFileName("images/pl_map.png") reader.Update() filter = vtk.vtkImageDataGeometryFilter() filter.SetInputConnection(reader.GetOutputPort()) filter.Update() mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(filter.GetOutputPort()) self.map3d_actor = vtk.vtkActor() self.map3d_actor.SetMapper(mapper) self.renderer.AddActor(self.map3d_actor)
def do_contour (self, event=None): debug ("In BandedSurfaceMap::do_contour ()") Common.state.busy () if self.contour_on.get (): if not self.mod_m.get_scalar_data_name (): self.contour_on.set (0) msg = "Warning: No scalar data present to contour!" Common.print_err (msg) Common.state.idle () return out = self.mod_m.GetOutput () if out.IsA('vtkPolyData'): f = None elif out.IsA ('vtkStructuredGrid'): f = vtk.vtkStructuredGridGeometryFilter () elif out.IsA ('vtkRectilinearGrid'): f = vtk.vtkRectilinearGridGeometryFilter () elif out.IsA ('vtkStructuredPoints') or \ out.IsA('vtkImageData'): if hasattr (vtk, 'vtkImageDataGeometryFilter'): f = vtk.vtkImageDataGeometryFilter () else: f = vtk.vtkStructuredPointsGeometryFilter () elif out.IsA('vtkUnstructuredGrid'): f = vtk.vtkGeometryFilter() else: msg = "This module does not support the given "\ "output - %s "%(out.GetClassName ()) raise Base.Objects.ModuleException, msg if f: f.SetInput (out) self.cont_fil.SetInput (f.GetOutput()) else: self.cont_fil.SetInput (out) self.map.SetInput (self.cont_fil.GetOutput ()) self.map.SetScalarModeToUseCellData() else: self.map.SetInput (self.mod_m.GetOutput ()) self.map.SetScalarModeToDefault() self.change_contour () Common.state.idle ()
def render_image(png_reader): colorLookup = vtk.vtkLookupTable() colorLookup.SetNumberOfColors(256) colorLookup.SetTableRange(0, 255) for ii in range(0, 256): colorLookup.SetTableValue(ii, 0, 0, 0, 1) magnitude = vtk.vtkImageMagnitude() magnitude.SetInput(png_reader.GetOutput()) geometry = vtk.vtkImageDataGeometryFilter() geometry.SetInput(magnitude.GetOutput()) warp = vtk.vtkWarpScalar() warp.SetInput(geometry.GetOutput()) warp.SetScaleFactor(0.25) merge = vtk.vtkMergeFilter() merge.SetGeometry(warp.GetOutput()) merge.SetGeometry(warp.GetOutput()) merge.SetScalars(png_reader.GetOutput()) mapper = vtk.vtkDataSetMapper() mapper.SetInput(merge.GetOutput()) mapper.ScalarVisibilityOn() mapper.SetLookupTable(colorLookup) # mapper.SetScalarRange(0,255) actor = vtk.vtkActor() actor.SetMapper(mapper) renderer = vtk.vtkRenderer() renderWindow = vtk.vtkRenderWindow() renderWindow.AddRenderer(renderer) renderWindowInteractor = vtk.vtkRenderWindowInteractor() renderWindowInteractor.SetRenderWindow(renderWindow) renderer.AddActor(actor) renderer.SetBackground(0.5, 0.5, 0.5) renderWindow.SetSize(600, 600) renderWindow.Render() renderWindowInteractor.Start()
def render_image(png_reader): colorLookup = vtk.vtkLookupTable() colorLookup.SetNumberOfColors(256) colorLookup.SetTableRange(0, 255) for ii in range(0, 256): colorLookup.SetTableValue(ii, 0, 0, 0, 1) magnitude = vtk.vtkImageMagnitude() magnitude.SetInput(png_reader.GetOutput()) geometry = vtk.vtkImageDataGeometryFilter() geometry.SetInput(magnitude.GetOutput()) warp = vtk.vtkWarpScalar() warp.SetInput(geometry.GetOutput()) warp.SetScaleFactor(0.25) merge = vtk.vtkMergeFilter() merge.SetGeometry(warp.GetOutput()) merge.SetGeometry(warp.GetOutput()) merge.SetScalars(png_reader.GetOutput()) mapper = vtk.vtkDataSetMapper() mapper.SetInput(merge.GetOutput()) mapper.ScalarVisibilityOn() mapper.SetLookupTable(colorLookup) #mapper.SetScalarRange(0,255) actor = vtk.vtkActor() actor.SetMapper(mapper) renderer = vtk.vtkRenderer() renderWindow = vtk.vtkRenderWindow() renderWindow.AddRenderer(renderer) renderWindowInteractor = vtk.vtkRenderWindowInteractor() renderWindowInteractor.SetRenderWindow(renderWindow) renderer.AddActor(actor) renderer.SetBackground(.5, .5, .5) renderWindow.SetSize(600, 600) renderWindow.Render() renderWindowInteractor.Start()
def ImageActor(img): reader = vtkImageImportFromArray() reader.SetArray(img) ImageDataGeometryFilter = vtk.vtkImageDataGeometryFilter() ImageDataGeometryFilter.SetInputConnection(reader.GetOutputPort()) ImageDataGeometryFilter.Update() # textureCoordinates = vtk.vtkFloatArray() # textureCoordinates.SetNumberOfComponents(2) # textureCoordinates.InsertNextTuple2(0.0, 1.0) # textureCoordinates.InsertNextTuple2(1.0, 1.0) # textureCoordinates.InsertNextTuple2(1.0, 0.0) # textureCoordinates.InsertNextTuple2(0.0, 0.0) mag = vtk.vtkImageMagnify() mag.SetMagnificationFactors(512, 512, 1) mag.InterpolateOff() mag.SetInputConnection(reader.GetOutputPort()) mapper = vtk.vtkImageMapper() # mapper.SetInputConnection(reader.GetOutputPort()) # mapper.SetColorWindow(4) # mapper.SetColorLevel(255) # mapper.SetZSlice(0) mapper.SetInputConnection(mag.GetOutputPort()) # mapper.SetColorlevel(1000) viewer = vtk.vtkImageViewer() viewer.SetInputConnection(reader.GetOutputPort()) viewer.SetColorWindow(4) viewer.SetColorLevel(255) # viewer.SetZSlice(0) viewer.Render() actor = vtk.vtkActor2D() actor.SetMapper(mapper.GetOutputPort()) # actor=vtk.vtkImageActor() # actor.SetMapper(mapper) # actor.SetInputData(reader.GetOutput()) return actor, viewer
def array_to_poly_data(array, spacing=None, origin=None): """ TODO: figure out how to create image data directly from array TODO: show faces as cubes with texture """ with NamedTemporaryFile(suffix='.jpg') as f: filepath = f.name Image.fromarray(array).save(filepath) jpeg_reader = vtk.vtkJPEGReader() jpeg_reader.SetFileName(filepath) jpeg_reader.Update() image_data = jpeg_reader.GetOutput() if spacing is not None: image_data.SetSpacing(spacing) if origin is not None: image_data.SetOrigin(origin) geometry = vtk.vtkImageDataGeometryFilter() geometry.SetInputData(image_data) geometry.Update() poly_data = geometry.GetOutput() return poly_data
def compute(self): variable = self.getInputFromPort('tvariable') filename = self.getInputFromPort('filename') print "convert to vtk image data" cv = PVCDMSReader() image_data = cv.convert(variable.data) print "convert to poly data" geom = vtk.vtkImageDataGeometryFilter() geom.SetInputData(image_data) geom.ReleaseDataFlagOn() print "Convert to GeoJSON" gw = vtk.vtkGeoJSONWriter() gw.SetInputConnection(geom.GetOutputPort()) gw.WriteToOutputStringOn() gw.Write() gj = str(gw.RegisterAndGetOutputString()).replace('\n','') outf = open(filename, 'w') outf.write(gj)
def __init__(self, parent, visualizer, **kws): """ Initialization """ VisualizationModule.__init__(self, parent, visualizer, **kws) self.descs = { "Normals": "Smooth surface with normals", "FeatureAngle": "Feature angle of normals", "Slice": "Select slice to be warped", "Scale": "Scale factor for warping" } self.luminance = vtk.vtkImageLuminance() #DataGeometry filter, image to polygons self.geometry = vtk.vtkImageDataGeometryFilter() self.colorMapper = None #warp scalars! self.warp = vtk.vtkWarpScalar() self.warp.SetScaleFactor(-0.1) #merge image and new warped data self.merge = vtk.vtkMergeFilter() self.normals = vtk.vtkPolyDataNormals() self.normals.SetFeatureAngle(90) #first the mapper self.mapper = vtk.vtkPolyDataMapper() #make the actor from the mapper self.actor = vtk.vtkActor() self.actor.SetMapper(self.mapper) self.renderer = self.parent.getRenderer() self.renderer.AddActor(self.actor) # iactor = self.wxrenwin.GetRenderWindow().GetInteractor() self.filterDesc = "Visualize 2D slice as 3D map"
def main(): colors = vtk.vtkNamedColors() # Create an image source1 = vtk.vtkImageCanvasSource2D() source1.SetScalarTypeToUnsignedChar() source1.SetNumberOfScalarComponents(3) source1.SetExtent(0, 100, 0, 100, 0, 0) source1.SetDrawColor(colors.GetColor4ub('SteelBlue')) source1.FillBox(0, 100, 0, 100) source1.SetDrawColor(colors.GetColor4ub('PaleGoldenrod')) source1.FillBox(10, 20, 10, 20) source1.FillBox(40, 50, 20, 30) source1.Update() # Convert the image to a polydata imageDataGeometryFilter = vtk.vtkImageDataGeometryFilter() imageDataGeometryFilter.SetInputConnection(source1.GetOutputPort()) imageDataGeometryFilter.Update() # Create a mapper and actor mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(imageDataGeometryFilter.GetOutputPort()) actor = vtk.vtkActor() actor.SetMapper(mapper) # Visualization renderer = vtk.vtkRenderer() renderWindow = vtk.vtkRenderWindow() renderWindow.AddRenderer(renderer) renderWindowInteractor = vtk.vtkRenderWindowInteractor() renderWindowInteractor.SetRenderWindow(renderWindow) renderer.AddActor(actor) renderer.SetBackground(colors.GetColor3d('RosyBrown')) renderWindow.SetWindowName('ImageDataGeometryFilter') renderWindow.Render() renderWindowInteractor.Start()
def main(): imageDataGeometryFilter = vtk.vtkImageDataGeometryFilter() imageDataGeometryFilter.SetInputConnection(fromVid2Vtk(args)) imageDataGeometryFilter.Update() # Create a mapper and actor mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(imageDataGeometryFilter.GetOutputPort()) actor = vtk.vtkActor() actor.SetMapper(mapper) # Visualization renderer = vtk.vtkRenderer() renderWindow = vtk.vtkRenderWindow() renderWindow.AddRenderer(renderer) renderWindowInteractor = vtk.vtkRenderWindowInteractor() renderWindowInteractor.SetRenderWindow(renderWindow) renderer.AddActor(actor) renderer.SetBackground(colors.GetColor3d("white")) # Background color white renderWindow.Render() renderWindowInteractor.Start()
def __init__(self, parent, visualizer, **kws): """ Initialization """ VisualizationModule.__init__(self, parent, visualizer, **kws) self.descs = {"Normals": "Smooth surface with normals", "FeatureAngle": "Feature angle of normals", "Slice": "Select slice to be warped", "Scale": "Scale factor for warping"} self.luminance = vtk.vtkImageLuminance() #DataGeometry filter, image to polygons self.geometry = vtk.vtkImageDataGeometryFilter() self.colorMapper = None #warp scalars! self.warp = vtk.vtkWarpScalar() self.warp.SetScaleFactor(-0.1) #merge image and new warped data self.merge = vtk.vtkMergeFilter() self.normals = vtk.vtkPolyDataNormals() self.normals.SetFeatureAngle (90) #first the mapper self.mapper = vtk.vtkPolyDataMapper() #make the actor from the mapper self.actor = vtk.vtkActor() self.actor.SetMapper(self.mapper) self.renderer = self.parent.getRenderer() self.renderer.AddActor(self.actor) # iactor = self.wxrenwin.GetRenderWindow().GetInteractor() self.filterDesc = "Visualize 2D slice as 3D map"
image_data = vtk.vtkImageData() N = 72 image_data.SetDimensions(N,N,1) try: method = image_data.SetScalarComponentFromFloat except AttributeError: method = image_data.SetScalarComponentFromDouble for i in range(N): for j in range(N): a = float(i)/N b = float(j)/N v = 0.5 + 0.5*cos(13*a)*cos(8*b+3*a*a) v = v**2 method(i,j,0,0,v) geometry_filter = vtk.vtkImageDataGeometryFilter() geometry_filter.SetInput(image_data) warp = vtk.vtkWarpScalar() warp.SetInput(geometry_filter.GetOutput()) warp.SetScaleFactor(8.1) normal_filter = vtk.vtkPolyDataNormals() normal_filter.SetInput(warp.GetOutput()) data_mapper = vtk.vtkDataSetMapper() data_mapper.SetInput(normal_filter.GetOutput()) data_actor = vtk.vtkActor() data_actor.SetMapper(data_mapper) renderer.AddActor(data_actor) table = vtk.vtkLookupTable() data_mapper.SetLookupTable(table)
VTK_DATA_ROOT = vtkGetDataRoot() lut = vtk.vtkLookupTable() lut.SetHueRange(0.6, 0) lut.SetSaturationRange(1.0, 0) lut.SetValueRange(0.5, 1.0) # Read the data: a height field results demReader = vtk.vtkDEMReader() demReader.SetFileName(VTK_DATA_ROOT + "/Data/SainteHelens.dem") demReader.Update() lo = demReader.GetOutput().GetScalarRange()[0] hi = demReader.GetOutput().GetScalarRange()[1] surface = vtk.vtkImageDataGeometryFilter() surface.SetInputConnection(demReader.GetOutputPort()) warp = vtk.vtkWarpScalar() warp.SetInputConnection(surface.GetOutputPort()) warp.SetScaleFactor(1) warp.UseNormalOn() warp.SetNormal(0, 0, 1) warp.Update() normals = vtk.vtkPolyDataNormals() normals.SetInputData(warp.GetPolyDataOutput()) normals.SetFeatureAngle(60) normals.SplittingOff() demMapper = vtk.vtkPolyDataMapper()
def testSphereWidget(self): # This example demonstrates how to use the vtkSphereWidget to control the # position of a light. # These are the pre-recorded events Recording = \ "# StreamVersion 1\n\ CharEvent 23 266 0 0 105 1 i\n\ KeyReleaseEvent 23 266 0 0 105 1 i\n\ EnterEvent 69 294 0 0 0 0 i\n\ MouseMoveEvent 69 294 0 0 0 0 i\n\ MouseMoveEvent 68 293 0 0 0 0 i\n\ MouseMoveEvent 67 292 0 0 0 0 i\n\ MouseMoveEvent 66 289 0 0 0 0 i\n\ MouseMoveEvent 66 282 0 0 0 0 i\n\ MouseMoveEvent 66 271 0 0 0 0 i\n\ MouseMoveEvent 69 253 0 0 0 0 i\n\ MouseMoveEvent 71 236 0 0 0 0 i\n\ MouseMoveEvent 74 219 0 0 0 0 i\n\ MouseMoveEvent 76 208 0 0 0 0 i\n\ MouseMoveEvent 78 190 0 0 0 0 i\n\ MouseMoveEvent 78 173 0 0 0 0 i\n\ MouseMoveEvent 77 162 0 0 0 0 i\n\ MouseMoveEvent 77 151 0 0 0 0 i\n\ MouseMoveEvent 77 139 0 0 0 0 i\n\ MouseMoveEvent 76 125 0 0 0 0 i\n\ MouseMoveEvent 73 114 0 0 0 0 i\n\ MouseMoveEvent 73 106 0 0 0 0 i\n\ MouseMoveEvent 73 101 0 0 0 0 i\n\ MouseMoveEvent 72 95 0 0 0 0 i\n\ MouseMoveEvent 72 92 0 0 0 0 i\n\ MouseMoveEvent 70 89 0 0 0 0 i\n\ MouseMoveEvent 69 86 0 0 0 0 i\n\ MouseMoveEvent 67 84 0 0 0 0 i\n\ MouseMoveEvent 65 81 0 0 0 0 i\n\ MouseMoveEvent 60 79 0 0 0 0 i\n\ MouseMoveEvent 59 79 0 0 0 0 i\n\ MouseMoveEvent 58 79 0 0 0 0 i\n\ MouseMoveEvent 57 78 0 0 0 0 i\n\ MouseMoveEvent 55 78 0 0 0 0 i\n\ MouseMoveEvent 54 77 0 0 0 0 i\n\ LeftButtonPressEvent 54 77 0 0 0 0 i\n\ MouseMoveEvent 61 79 0 0 0 0 i\n\ MouseMoveEvent 67 83 0 0 0 0 i\n\ MouseMoveEvent 72 88 0 0 0 0 i\n\ MouseMoveEvent 77 90 0 0 0 0 i\n\ MouseMoveEvent 78 91 0 0 0 0 i\n\ MouseMoveEvent 80 92 0 0 0 0 i\n\ MouseMoveEvent 84 93 0 0 0 0 i\n\ MouseMoveEvent 85 94 0 0 0 0 i\n\ MouseMoveEvent 88 97 0 0 0 0 i\n\ MouseMoveEvent 90 100 0 0 0 0 i\n\ MouseMoveEvent 92 102 0 0 0 0 i\n\ MouseMoveEvent 94 103 0 0 0 0 i\n\ MouseMoveEvent 97 105 0 0 0 0 i\n\ MouseMoveEvent 101 107 0 0 0 0 i\n\ MouseMoveEvent 102 109 0 0 0 0 i\n\ MouseMoveEvent 104 111 0 0 0 0 i\n\ MouseMoveEvent 108 113 0 0 0 0 i\n\ MouseMoveEvent 112 115 0 0 0 0 i\n\ MouseMoveEvent 118 119 0 0 0 0 i\n\ MouseMoveEvent 118 120 0 0 0 0 i\n\ MouseMoveEvent 118 123 0 0 0 0 i\n\ MouseMoveEvent 120 125 0 0 0 0 i\n\ MouseMoveEvent 122 128 0 0 0 0 i\n\ MouseMoveEvent 123 129 0 0 0 0 i\n\ MouseMoveEvent 125 132 0 0 0 0 i\n\ MouseMoveEvent 125 134 0 0 0 0 i\n\ MouseMoveEvent 127 138 0 0 0 0 i\n\ MouseMoveEvent 127 142 0 0 0 0 i\n\ MouseMoveEvent 127 147 0 0 0 0 i\n\ MouseMoveEvent 126 152 0 0 0 0 i\n\ MouseMoveEvent 126 155 0 0 0 0 i\n\ MouseMoveEvent 125 160 0 0 0 0 i\n\ MouseMoveEvent 125 167 0 0 0 0 i\n\ MouseMoveEvent 125 169 0 0 0 0 i\n\ MouseMoveEvent 125 174 0 0 0 0 i\n\ MouseMoveEvent 122 179 0 0 0 0 i\n\ MouseMoveEvent 120 183 0 0 0 0 i\n\ MouseMoveEvent 116 187 0 0 0 0 i\n\ MouseMoveEvent 113 192 0 0 0 0 i\n\ MouseMoveEvent 113 193 0 0 0 0 i\n\ MouseMoveEvent 111 195 0 0 0 0 i\n\ MouseMoveEvent 108 198 0 0 0 0 i\n\ MouseMoveEvent 106 200 0 0 0 0 i\n\ MouseMoveEvent 104 202 0 0 0 0 i\n\ MouseMoveEvent 103 203 0 0 0 0 i\n\ MouseMoveEvent 99 205 0 0 0 0 i\n\ MouseMoveEvent 97 207 0 0 0 0 i\n\ MouseMoveEvent 94 208 0 0 0 0 i\n\ MouseMoveEvent 91 210 0 0 0 0 i\n\ MouseMoveEvent 89 211 0 0 0 0 i\n\ MouseMoveEvent 86 211 0 0 0 0 i\n\ MouseMoveEvent 84 211 0 0 0 0 i\n\ MouseMoveEvent 80 211 0 0 0 0 i\n\ MouseMoveEvent 77 211 0 0 0 0 i\n\ MouseMoveEvent 75 211 0 0 0 0 i\n\ MouseMoveEvent 71 211 0 0 0 0 i\n\ MouseMoveEvent 68 211 0 0 0 0 i\n\ MouseMoveEvent 66 210 0 0 0 0 i\n\ MouseMoveEvent 62 210 0 0 0 0 i\n\ MouseMoveEvent 58 209 0 0 0 0 i\n\ MouseMoveEvent 54 207 0 0 0 0 i\n\ MouseMoveEvent 52 204 0 0 0 0 i\n\ MouseMoveEvent 51 203 0 0 0 0 i\n\ MouseMoveEvent 51 200 0 0 0 0 i\n\ MouseMoveEvent 48 196 0 0 0 0 i\n\ MouseMoveEvent 45 187 0 0 0 0 i\n\ MouseMoveEvent 45 181 0 0 0 0 i\n\ MouseMoveEvent 44 168 0 0 0 0 i\n\ MouseMoveEvent 40 161 0 0 0 0 i\n\ MouseMoveEvent 39 154 0 0 0 0 i\n\ MouseMoveEvent 38 146 0 0 0 0 i\n\ MouseMoveEvent 35 131 0 0 0 0 i\n\ MouseMoveEvent 34 121 0 0 0 0 i\n\ MouseMoveEvent 34 110 0 0 0 0 i\n\ MouseMoveEvent 34 103 0 0 0 0 i\n\ MouseMoveEvent 34 91 0 0 0 0 i\n\ MouseMoveEvent 34 86 0 0 0 0 i\n\ MouseMoveEvent 34 73 0 0 0 0 i\n\ MouseMoveEvent 35 66 0 0 0 0 i\n\ MouseMoveEvent 37 60 0 0 0 0 i\n\ MouseMoveEvent 37 53 0 0 0 0 i\n\ MouseMoveEvent 38 50 0 0 0 0 i\n\ MouseMoveEvent 38 48 0 0 0 0 i\n\ MouseMoveEvent 41 45 0 0 0 0 i\n\ MouseMoveEvent 43 45 0 0 0 0 i\n\ MouseMoveEvent 44 45 0 0 0 0 i\n\ MouseMoveEvent 47 43 0 0 0 0 i\n\ MouseMoveEvent 51 44 0 0 0 0 i\n\ MouseMoveEvent 54 44 0 0 0 0 i\n\ MouseMoveEvent 55 44 0 0 0 0 i\n\ MouseMoveEvent 59 44 0 0 0 0 i\n\ MouseMoveEvent 64 44 0 0 0 0 i\n\ MouseMoveEvent 67 44 0 0 0 0 i\n\ MouseMoveEvent 68 44 0 0 0 0 i\n\ MouseMoveEvent 71 44 0 0 0 0 i\n\ MouseMoveEvent 74 44 0 0 0 0 i\n\ MouseMoveEvent 77 44 0 0 0 0 i\n\ MouseMoveEvent 80 45 0 0 0 0 i\n\ MouseMoveEvent 81 45 0 0 0 0 i\n\ MouseMoveEvent 85 49 0 0 0 0 i\n\ MouseMoveEvent 89 50 0 0 0 0 i\n\ MouseMoveEvent 94 52 0 0 0 0 i\n\ MouseMoveEvent 99 56 0 0 0 0 i\n\ MouseMoveEvent 104 58 0 0 0 0 i\n\ MouseMoveEvent 107 61 0 0 0 0 i\n\ MouseMoveEvent 109 63 0 0 0 0 i\n\ MouseMoveEvent 109 67 0 0 0 0 i\n\ MouseMoveEvent 111 83 0 0 0 0 i\n\ MouseMoveEvent 113 86 0 0 0 0 i\n\ MouseMoveEvent 113 87 0 0 0 0 i\n\ MouseMoveEvent 113 89 0 0 0 0 i\n\ MouseMoveEvent 112 93 0 0 0 0 i\n\ MouseMoveEvent 112 97 0 0 0 0 i\n\ MouseMoveEvent 111 104 0 0 0 0 i\n\ MouseMoveEvent 112 108 0 0 0 0 i\n\ MouseMoveEvent 116 115 0 0 0 0 i\n\ MouseMoveEvent 116 123 0 0 0 0 i\n\ MouseMoveEvent 116 129 0 0 0 0 i\n\ MouseMoveEvent 119 138 0 0 0 0 i\n\ MouseMoveEvent 122 141 0 0 0 0 i\n\ MouseMoveEvent 127 148 0 0 0 0 i\n\ MouseMoveEvent 128 161 0 0 0 0 i\n\ MouseMoveEvent 131 166 0 0 0 0 i\n\ MouseMoveEvent 134 168 0 0 0 0 i\n\ MouseMoveEvent 135 171 0 0 0 0 i\n\ MouseMoveEvent 134 174 0 0 0 0 i\n\ MouseMoveEvent 132 176 0 0 0 0 i\n\ MouseMoveEvent 132 178 0 0 0 0 i\n\ MouseMoveEvent 129 180 0 0 0 0 i\n\ MouseMoveEvent 127 182 0 0 0 0 i\n\ MouseMoveEvent 124 185 0 0 0 0 i\n\ MouseMoveEvent 122 186 0 0 0 0 i\n\ MouseMoveEvent 118 189 0 0 0 0 i\n\ MouseMoveEvent 114 191 0 0 0 0 i\n\ MouseMoveEvent 114 193 0 0 0 0 i\n\ MouseMoveEvent 112 193 0 0 0 0 i\n\ MouseMoveEvent 111 194 0 0 0 0 i\n\ MouseMoveEvent 110 197 0 0 0 0 i\n\ MouseMoveEvent 110 198 0 0 0 0 i\n\ MouseMoveEvent 109 199 0 0 0 0 i\n\ MouseMoveEvent 108 200 0 0 0 0 i\n\ MouseMoveEvent 108 201 0 0 0 0 i\n\ MouseMoveEvent 108 202 0 0 0 0 i\n\ MouseMoveEvent 108 203 0 0 0 0 i\n\ MouseMoveEvent 104 206 0 0 0 0 i\n\ LeftButtonReleaseEvent 104 206 0 0 0 0 i\n\ MouseMoveEvent 104 205 0 0 0 0 i\n\ MouseMoveEvent 104 204 0 0 0 0 i\n\ MouseMoveEvent 105 205 0 0 0 0 i\n\ MouseMoveEvent 105 206 0 0 0 0 i\n\ " # Start by loading some data. # dem = vtk.vtkDEMReader() dem.SetFileName(VTK_DATA_ROOT + "/Data/SainteHelens.dem") dem.Update() Scale = 2 lut = vtk.vtkLookupTable() lut.SetHueRange(0.6, 0) lut.SetSaturationRange(1.0, 0) lut.SetValueRange(0.5, 1.0) lo = Scale * dem.GetElevationBounds()[0] hi = Scale * dem.GetElevationBounds()[1] shrink = vtk.vtkImageShrink3D() shrink.SetShrinkFactors(4, 4, 1) shrink.SetInputConnection(dem.GetOutputPort()) shrink.AveragingOn() geom = vtk.vtkImageDataGeometryFilter() geom.SetInputConnection(shrink.GetOutputPort()) geom.ReleaseDataFlagOn() warp = vtk.vtkWarpScalar() warp.SetInputConnection(geom.GetOutputPort()) warp.SetNormal(0, 0, 1) warp.UseNormalOn() warp.SetScaleFactor(Scale) warp.ReleaseDataFlagOn() elevation = vtk.vtkElevationFilter() elevation.SetInputConnection(warp.GetOutputPort()) elevation.SetLowPoint(0, 0, lo) elevation.SetHighPoint(0, 0, hi) elevation.SetScalarRange(lo, hi) elevation.ReleaseDataFlagOn() normals = vtk.vtkPolyDataNormals() normals.SetInputConnection(elevation.GetOutputPort()) normals.SetFeatureAngle(60) normals.ConsistencyOff() normals.SplittingOff() normals.ReleaseDataFlagOn() normals.Update() demMapper = vtk.vtkPolyDataMapper() demMapper.SetInputConnection(normals.GetOutputPort()) demMapper.SetScalarRange(lo, hi) demMapper.SetLookupTable(lut) demActor = vtk.vtkActor() demActor.SetMapper(demMapper) # Create the RenderWindow, Renderer and both Actors # ren = vtk.vtkRenderer() renWin = vtk.vtkRenderWindow() renWin.SetMultiSamples(0) renWin.AddRenderer(ren) iRen = vtk.vtkRenderWindowInteractor() iRen.SetRenderWindow(renWin) iRen.LightFollowCameraOff() # iRen.SetInteractorStyle("") # The callback takes two arguments. # The first being the object that generates the event and # the second argument the event name (which is a string). def MoveLight(widget, event_string): light.SetPosition(rep.GetHandlePosition()) # Associate the line widget with the interactor rep = vtk.vtkSphereRepresentation() rep.SetPlaceFactor(4) rep.PlaceWidget(normals.GetOutput().GetBounds()) rep.HandleVisibilityOn() rep.SetRepresentationToWireframe() # rep HandleVisibilityOff # rep HandleTextOff sphereWidget = vtk.vtkSphereWidget2() sphereWidget.SetInteractor(iRen) sphereWidget.SetRepresentation(rep) # sphereWidget.TranslationEnabledOff() # sphereWidget.ScalingEnabledOff() sphereWidget.AddObserver("InteractionEvent", MoveLight) recorder = vtk.vtkInteractorEventRecorder() recorder.SetInteractor(iRen) # recorder.SetFileName("c:/record.log") # recorder.Record() recorder.ReadFromInputStringOn() recorder.SetInputString(Recording) # Add the actors to the renderer, set the background and size # ren.AddActor(demActor) ren.SetBackground(1, 1, 1) renWin.SetSize(300, 300) ren.SetBackground(0.1, 0.2, 0.4) cam1 = ren.GetActiveCamera() cam1.SetViewUp(0, 0, 1) cam1.SetFocalPoint(dem.GetOutput().GetCenter()) cam1.SetPosition(1, 0, 0) ren.ResetCamera() cam1.Elevation(25) cam1.Azimuth(125) cam1.Zoom(1.25) light = vtk.vtkLight() light.SetFocalPoint(rep.GetCenter()) light.SetPosition(rep.GetHandlePosition()) ren.AddLight(light) iRen.Initialize() renWin.Render() # render the image renWin.Render() # Actually probe the data recorder.Play() img_file = "TestSphereWidget.png" vtk.test.Testing.compareImage( iRen.GetRenderWindow(), vtk.test.Testing.getAbsImagePath(img_file), threshold=25) vtk.test.Testing.interact()
def elevation(self, data): self.data = data self.settings = wx.Panel(self) self.plot_type= self.type = 'elevation' self.image = self.array_to_2d_imagedata() geometry = vtk.vtkImageDataGeometryFilter() if vtk.vtkVersion.GetVTKMajorVersion()<6: geometry.SetInput(self.image) else: geometry.SetInputData(self.image) self.warp = vtk.vtkWarpScalar() self.warp.SetInputConnection(geometry.GetOutputPort()) self.warp.SetScaleFactor(1) self.warp.UseNormalOn() self.warp.SetNormal(0,0,1) self.warp.Update() lut =vtk.vtkLookupTable() lut.SetTableRange(self.image.GetScalarRange()) lut.SetNumberOfColors(256) lut.SetHueRange(0.7, 0) lut.Build() merge=vtk.vtkMergeFilter() if vtk.vtkVersion.GetVTKMajorVersion()<6: merge.SetGeometry(self.warp.GetOutput()) merge.SetScalars(self.image) else: merge.SetGeometryInputData(self.warp.GetOutput()) merge.SetScalarsData(self.image) merge.Update() self.outline = vtk.vtkOutlineFilter() self.outline.SetInputConnection(merge.GetOutputPort()) self.outline.Update() outlineMapper = vtk.vtkPolyDataMapper() if vtk.vtkVersion.GetVTKMajorVersion()<6: outlineMapper.SetInputConnection(self.outline.GetOutputPort()) else: outlineMapper.SetInputData(self.outline.GetOutputDataObject(0)) box=vtk.vtkActor() box.SetMapper(outlineMapper) box.GetProperty().SetColor(0,0,0) self.renderer.AddActor(box) self.actor_list.append(box) mapper=vtk.vtkPolyDataMapper() mapper.SetLookupTable(lut) mapper.SetScalarRange(self.image.GetScalarRange()) mapper.SetInputConnection(merge.GetOutputPort()) actor=vtk.vtkActor() actor.SetMapper(mapper) self.renderer.AddActor(actor) self.actor_list.append(actor) scalarBar = vtk.vtkScalarBarActor() scalarBar.SetTitle("") scalarBar.SetWidth(0.1) scalarBar.SetHeight(0.9) scalarBar.SetLookupTable(lut) self.renderer.AddActor2D(scalarBar) self.actor_list.append(scalarBar) self.build_axes(noZaxis = True) self.center_on_actor(actor) self.iren.Render() self.warp.SetScaleFactor(0) self.warp.Update() self.outline.Update() self.renderer.ResetCameraClippingRange() self.iren.Render() sb0 = wx.StaticBox(self.settings, wx.ID_ANY, label = "Scaling Panel") Sizer0 = wx.StaticBoxSizer(sb0, wx.HORIZONTAL) content1 = wx.StaticText(self.settings, -1, "X") self.x_Offset = wx.TextCtrl(self.settings, wx.ID_ANY, size = (45,27),style = wx.TE_PROCESS_ENTER ) self.Bind(wx.EVT_TEXT_ENTER, self.x_spacing_onmove ,self.x_Offset) self.x_Offset.SetValue('1.0') self.x_slider = wx.Slider(self.settings,id=wx.ID_ANY,value=100,minValue=0,maxValue=200, style= wx.SL_AUTOTICKS | wx.SL_HORIZONTAL | wx.SL_LABELS) self.x_slider.Bind(wx.EVT_SCROLL, self.x_spacing_onmove) content2 = wx.StaticText(self.settings, -1, "Y") self.y_Offset = wx.TextCtrl(self.settings, wx.ID_ANY,size = (45,27), style = wx.TE_PROCESS_ENTER ) self.Bind(wx.EVT_TEXT_ENTER, self.y_spacing_onmove ,self.y_Offset) self.y_Offset.SetValue('1.0') self.y_slider = wx.Slider(self.settings,id=wx.ID_ANY,value=100,minValue=0,maxValue=200, style= wx.SL_AUTOTICKS | wx.SL_HORIZONTAL | wx.SL_LABELS) self.y_slider.Bind(wx.EVT_SCROLL, self.y_spacing_onmove) sb1 = wx.StaticBox(self.settings, wx.ID_ANY, label = "Elevation Panel") Sizer1 = wx.StaticBoxSizer(sb1, wx.HORIZONTAL) content3 = wx.StaticText(self.settings, -1, "Warp") self.z_Offset = wx.TextCtrl(self.settings, wx.ID_ANY, size = (45,27),style = wx.TE_PROCESS_ENTER ) self.Bind(wx.EVT_TEXT_ENTER, self.z_spacing_onmove ,self.z_Offset) self.z_Offset.SetValue('1.0') self.z_slider = wx.Slider(self.settings,id=wx.ID_ANY,value=0,minValue=0,maxValue=100, style= wx.SL_HORIZONTAL ) self.z_slider.Bind(wx.EVT_SCROLL, self.z_spacing_onmove) # build sizer Sizer0.Add(content1, proportion=0, flag = wx.ALIGN_BOTTOM) Sizer0.Add(self.x_Offset,proportion=0, flag= wx.ALIGN_CENTER_VERTICAL) Sizer0.Add(self.x_slider,proportion=1, flag= wx.ALIGN_CENTER_VERTICAL|wx.EXPAND) Sizer0.Add((20, -1),proportion= 0, flag= wx.ALIGN_CENTER_VERTICAL) Sizer0.Add(content2, proportion=0, flag = wx.ALIGN_CENTER_VERTICAL) Sizer0.Add(self.y_Offset,proportion=0, flag= wx.ALIGN_BOTTOM) Sizer0.Add(self.y_slider,proportion=1, flag=wx.ALIGN_CENTER_VERTICAL|wx.EXPAND) Sizer1.Add(content3, proportion=0, flag = wx.ALIGN_CENTER_VERTICAL) Sizer1.Add(self.z_Offset,proportion=0, flag= wx.ALIGN_CENTER_VERTICAL) Sizer1.Add(self.z_slider,proportion=1, flag=wx.ALIGN_CENTER_VERTICAL|wx.EXPAND) self.save_fig = wx.Button(self.settings, wx.ID_ANY, label="Save current view") self.save_fig.Bind(wx.EVT_BUTTON, self.Screen_shot) Sizer = wx.BoxSizer(wx.VERTICAL) HSizer = wx.BoxSizer(wx.HORIZONTAL) HSizer.Add(Sizer0, 1, wx.EXPAND, 0) HSizer.Add(Sizer1, 1, wx.EXPAND, 0) Sizer.Add(HSizer, 0, wx.EXPAND, 0) Sizer.Add(self.save_fig, 0, wx.EXPAND, 0) self.settings.SetSizer(Sizer) Sizer.Fit(self.settings) self.settings.Layout() self._mgr.AddPane(self.settings, wxaui.AuiPaneInfo().Center().Dock().Bottom().CloseButton(False).CaptionVisible(False)) self._mgr.Update()
def set_initial_display(self): if self.renwininter is None: self.renwininter = MEQ_QVTKRenderWindowInteractor(self.winsplitter) self.renwininter.setWhatsThis(rendering_control_instructions) self.renwin = self.renwininter.GetRenderWindow() self.inter = self.renwin.GetInteractor() self.winsplitter.insertWidget(0,self.renwininter) self.winsplitter.addWidget(self.v_box_controls) self.winsplitter.setSizes([500,100]) self.renwininter.show() # Paul Kemper suggested the following: camstyle = vtk.vtkInteractorStyleTrackballCamera() self.renwininter.SetInteractorStyle(camstyle) self.extents = self.image_array.GetDataExtent() self.spacing = self.image_array.GetDataSpacing() self.origin = self.image_array.GetDataOrigin() # An outline is shown for context. if self.warped_surface: self.index_selector.initWarpContextmenu() sx, sy, sz = self.image_array.GetDataSpacing() xMin, xMax, yMin, yMax, zMin, zMax = self.image_array.GetDataExtent() xMin = sx * xMin xMax = sx * xMax yMin = sy * yMin yMax = sy * yMax self.scale_factor = 0.5 * ((xMax-xMin) + (yMax-yMin)) / (self.data_max - self.data_min) zMin = self.data_min * self.scale_factor zMax = self.data_max * self.scale_factor self.outline = vtk.vtkOutlineSource(); self.outline.SetBounds(xMin, xMax, yMin, yMax, zMin, zMax) else: self.index_selector.init3DContextmenu() self.outline = vtk.vtkOutlineFilter() self.outline.SetInput(self.image_array.GetOutput()) outlineMapper = vtk.vtkPolyDataMapper(); outlineMapper.SetInput(self.outline.GetOutput() ); outlineActor = vtk.vtkActor(); outlineActor.SetMapper(outlineMapper); # create blue to red color table self.lut = vtk.vtkLookupTable() self.lut.SetHueRange(0.6667, 0.0) self.lut.SetNumberOfColors(256) self.lut.Build() # here is where the 2-D image gets warped if self.warped_surface: geometry = vtk.vtkImageDataGeometryFilter() geometry.SetInput(self.image_array.GetOutput()) self.warp = vtk.vtkWarpScalar() self.warp.SetInput(geometry.GetOutput()) self.warp.SetScaleFactor(self.scale_factor) self.mapper = vtk.vtkPolyDataMapper(); self.mapper.SetInput(self.warp.GetPolyDataOutput()) self.mapper.SetScalarRange(self.data_min,self.data_max) self.mapper.SetLookupTable(self.lut) self.mapper.ImmediateModeRenderingOff() warp_actor = vtk.vtkActor() # warp_actor.SetScale(2,1,1) warp_actor.SetMapper(self.mapper) min_range = 0.5 * self.scale_factor max_range = 2.0 * self.scale_factor self.index_selector.set_emit(False) self.index_selector.setMaxValue(max_range,False) self.index_selector.setMinValue(min_range) self.index_selector.setTickInterval( (max_range - min_range) / 10 ) self.index_selector.setRange(max_range, False) self.index_selector.setValue(self.scale_factor) self.index_selector.setLabel('display gain') self.index_selector.hideNDControllerOption() self.index_selector.reset_scale_toggle() self.index_selector.set_emit(True) else: # set up ImagePlaneWidgets ... # The shared picker enables us to use 3 planes at one time # and gets the picking order right picker = vtk.vtkCellPicker() picker.SetTolerance(0.005) # get locations for initial slices xMin, xMax, yMin, yMax, zMin, zMax = self.extents x_index = (xMax-xMin) / 2 y_index = (yMax-yMin) / 2 z_index = (zMax-zMin) / 2 # The 3 image plane widgets are used to probe the dataset. self.planeWidgetX = vtk.vtkImagePlaneWidget() self.planeWidgetX.DisplayTextOn() self.planeWidgetX.SetInput(self.image_array.GetOutput()) self.planeWidgetX.SetPlaneOrientationToXAxes() self.planeWidgetX.SetSliceIndex(x_index) self.planeWidgetX.SetPicker(picker) self.planeWidgetX.SetKeyPressActivationValue("x") self.planeWidgetX.SetLookupTable(self.lut) self.planeWidgetX.TextureInterpolateOff() self.planeWidgetX.SetResliceInterpolate(0) self.planeWidgetY = vtk.vtkImagePlaneWidget() self.planeWidgetY.DisplayTextOn() self.planeWidgetY.SetInput(self.image_array.GetOutput()) self.planeWidgetY.SetPlaneOrientationToYAxes() self.planeWidgetY.SetSliceIndex(y_index) self.planeWidgetY.SetPicker(picker) self.planeWidgetY.SetKeyPressActivationValue("y") self.planeWidgetY.SetLookupTable(self.planeWidgetX.GetLookupTable()) self.planeWidgetY.TextureInterpolateOff() self.planeWidgetY.SetResliceInterpolate(0) self.planeWidgetZ = vtk.vtkImagePlaneWidget() self.planeWidgetZ.DisplayTextOn() self.planeWidgetZ.SetInput(self.image_array.GetOutput()) self.planeWidgetZ.SetPlaneOrientationToZAxes() self.planeWidgetZ.SetSliceIndex(z_index) self.planeWidgetZ.SetPicker(picker) self.planeWidgetZ.SetKeyPressActivationValue("z") self.planeWidgetZ.SetLookupTable(self.planeWidgetX.GetLookupTable()) self.planeWidgetZ.TextureInterpolateOff() self.planeWidgetZ.SetResliceInterpolate(0) self.current_widget = self.planeWidgetZ self.mode_widget = self.planeWidgetZ self.index_selector.set_emit(False) self.index_selector.setMinValue(zMin) self.index_selector.setMaxValue(zMax,False) self.index_selector.setTickInterval( (zMax-zMin) / 10 ) self.index_selector.setRange(zMax, False) self.index_selector.setValue(z_index) self.index_selector.setLabel('Z axis') self.index_selector.reset_scale_toggle() self.index_selector.set_emit(True) # create scalar bar for display of intensity range self.scalar_bar = vtk.vtkScalarBarActor() self.scalar_bar.SetLookupTable(self.lut) self.scalar_bar.SetOrientationToVertical() self.scalar_bar.SetWidth(0.1) self.scalar_bar.SetHeight(0.8) self.scalar_bar.SetTitle("Intensity") self.scalar_bar.GetPositionCoordinate().SetCoordinateSystemToNormalizedViewport() self.scalar_bar.GetPositionCoordinate().SetValue(0.01, 0.1) # Create the RenderWindow and Renderer self.ren = vtk.vtkRenderer() self.renwin.AddRenderer(self.ren) # Add the outline actor to the renderer, set the background color and size if self.warped_surface: self.ren.AddActor(warp_actor) self.ren.AddActor(outlineActor) self.ren.SetBackground(0.1, 0.1, 0.2) self.ren.AddActor2D(self.scalar_bar) # Create a text property for cube axes tprop = vtk.vtkTextProperty() tprop.SetColor(1, 1, 1) tprop.ShadowOn() # Create a vtkCubeAxesActor2D. Use the outer edges of the bounding box to # draw the axes. Add the actor to the renderer. self.axes = vtk.vtkCubeAxesActor2D() if self.warped_surface: if zMin < 0.0 and zMax > 0.0: zLoc = 0.0 else: zLoc = zMin self.axes.SetBounds(xMin, xMax, yMin, yMax, zLoc, zLoc) self.axes.SetZLabel(" ") else: self.axes.SetInput(self.image_array.GetOutput()) self.axes.SetZLabel("Z") self.axes.SetCamera(self.ren.GetActiveCamera()) self.axes.SetLabelFormat("%6.4g") self.axes.SetFlyModeToOuterEdges() self.axes.SetFontFactor(0.8) self.axes.SetAxisTitleTextProperty(tprop) self.axes.SetAxisLabelTextProperty(tprop) self.axes.SetXLabel("X") self.axes.SetYLabel("Y") self.ren.AddProp(self.axes) # Set the interactor for the widgets if not self.warped_surface: self.planeWidgetX.SetInteractor(self.inter) self.planeWidgetX.On() self.planeWidgetY.SetInteractor(self.inter) self.planeWidgetY.On() self.planeWidgetZ.SetInteractor(self.inter) self.planeWidgetZ.On() self.initialize_camera()
def main(argv): if len(argv) < 2: print "usage: ",argv[0]," <data>" exit(1) data_fn = argv[1] mapper = vtk.vtkPolyDataMapper() if data_fn.find('.vtk') != -1: reader = vtk.vtkPolyDataReader() reader.SetFileName(data_fn) reader.Update() data = reader.GetOutput() trianglize = vtk.vtkDelaunay2D() trianglize.SetInput(data) trianglize.Update() mapper.SetInputConnection(trianglize.GetOutputPort()) elif data_fn.find('.pgm') != -1: reader = vtk.vtkPNMReader() reader.SetFileName(data_fn) reader.Update() data = reader.GetOutput() trianglize = vtk.vtkImageDataGeometryFilter() trianglize.SetInput(data) trianglize.Update() warp = vtk.vtkWarpScalar() warp.SetScaleFactor(0.2) # arbitrary choice warp.SetInputConnection(trianglize.GetOutputPort()) warp.Update() mapper.SetInputConnection(warp.GetOutputPort()) elif data_fn.find('.dcm') != -1: reader =vtk.vtkDICOMImageReader() reader.SetFileName(data_fn) reader.Update() data = reader.GetOutput() trianglize = vtk.vtkImageDataGeometryFilter() trianglize.SetInput(data) trianglize.Update() warp = vtk.vtkWarpScalar() #warp.SetScaleFactor(0.2) # arbitrary choice warp.SetInputConnection(trianglize.GetOutputPort()) warp.Update() mapper.SetInputConnection(warp.GetOutputPort()) else: print "unrecognized data file:",data_fn exit(1) actor = vtk.vtkActor() actor.SetMapper(mapper) renderer = vtk.vtkRenderer() renderWindow = vtk.vtkRenderWindow() renderWindow.SetSize(700,700) renderWindow.AddRenderer(renderer) renderWindow.SetWindowName("heightfield") renderer.AddActor(actor) renderer.SetBackground(0.4,0.3,0.2) interactor = vtk.vtkRenderWindowInteractor() interactor.SetRenderWindow(renderWindow) renderWindow.Render() interactor.Start()
def main(argv): if len(argv) < 2: print "usage: ",argv[0]," <data> [flat]" exit(1) data_fn = argv[1] flat = False if len(argv) > 2: flat = True mapper = vtk.vtkPolyDataMapper() if data_fn.find('.vtk') != -1: reader = vtk.vtkPolyDataReader() reader.SetFileName(data_fn) reader.Update() data = reader.GetOutput() trianglize = vtk.vtkDelaunay2D() trianglize.SetInput(data) trianglize.Update() mapper.SetInputConnection(trianglize.GetOutputPort()) elif data_fn.find('.pgm') != -1: reader = vtk.vtkPNMReader() reader.SetFileName(data_fn) reader.Update() data = reader.GetOutput() geometry = vtk.vtkImageDataGeometryFilter() geometry.SetInputConnection(reader.GetOutputPort()) geometry.Update() if flat: merge = vtk.vtkMergeFilter() merge.SetGeometry(geometry.GetOutput()) merge.SetScalars(data) mapper.SetInputConnection(merge.GetOutputPort()) else: warp = vtk.vtkWarpScalar() warp.SetInputConnection(geometry.GetOutputPort()) warp.SetScaleFactor(0.3) # looked good warp.Update() merge = vtk.vtkMergeFilter() merge.SetGeometry(warp.GetOutput()) merge.SetScalars(data) mapper.SetInputConnection(merge.GetOutputPort()) elif data_fn.find('.dcm') != -1: reader =vtk.vtkDICOMImageReader() reader.SetFileName(data_fn) reader.Update() data = reader.GetOutput() geometry = vtk.vtkImageDataGeometryFilter() geometry.SetInput(data) geometry.Update() if flat: mapper.SetInputConnection(geometry.GetOutputPort()) else: warp = vtk.vtkWarpScalar() warp.SetInputConnection(geometry.GetOutputPort()) warp.Update() mapper.SetInputConnection(warp.GetOutputPort()) else: print "unrecognized data file:",data_fn exit(1) lut = vtk.vtkLookupTable() lut.SetNumberOfColors(10) lut.SetHueRange(0.5,0.3) lut.SetSaturationRange(0.6,0.5) lut.SetValueRange(1.0,0.5) lut.Build() mapper.ImmediateModeRenderingOff() mapper.SetLookupTable(lut) actor = vtk.vtkActor() actor.SetMapper(mapper) renderer = vtk.vtkRenderer() renderWindow = vtk.vtkRenderWindow() renderWindow.SetSize(700,700) renderWindow.AddRenderer(renderer) renderer.AddActor(actor) renderer.SetBackground(0.4,0.3,0.2) interactor = vtk.vtkRenderWindowInteractor() interactor.SetRenderWindow(renderWindow) renderWindow.Render() interactor.Start()
def main(argv): if len(argv) < 2: print "usage: ", argv[0], " <data>" exit(1) data_fn = argv[1] mapper = vtk.vtkPolyDataMapper() if data_fn.find('.vtk') != -1: reader = vtk.vtkPolyDataReader() reader.SetFileName(data_fn) reader.Update() data = reader.GetOutput() trianglize = vtk.vtkDelaunay2D() trianglize.SetInput(data) trianglize.Update() mapper.SetInputConnection(trianglize.GetOutputPort()) elif data_fn.find('.pgm') != -1: reader = vtk.vtkPNMReader() reader.SetFileName(data_fn) reader.Update() data = reader.GetOutput() trianglize = vtk.vtkImageDataGeometryFilter() trianglize.SetInput(data) trianglize.Update() warp = vtk.vtkWarpScalar() warp.SetScaleFactor(0.2) # arbitrary choice warp.SetInputConnection(trianglize.GetOutputPort()) warp.Update() mapper.SetInputConnection(warp.GetOutputPort()) elif data_fn.find('.dcm') != -1: reader = vtk.vtkDICOMImageReader() reader.SetFileName(data_fn) reader.Update() data = reader.GetOutput() trianglize = vtk.vtkImageDataGeometryFilter() trianglize.SetInput(data) trianglize.Update() warp = vtk.vtkWarpScalar() #warp.SetScaleFactor(0.2) # arbitrary choice warp.SetInputConnection(trianglize.GetOutputPort()) warp.Update() mapper.SetInputConnection(warp.GetOutputPort()) else: print "unrecognized data file:", data_fn exit(1) actor = vtk.vtkActor() actor.SetMapper(mapper) renderer = vtk.vtkRenderer() renderWindow = vtk.vtkRenderWindow() renderWindow.SetSize(700, 700) renderWindow.AddRenderer(renderer) renderWindow.SetWindowName("heightfield") renderer.AddActor(actor) renderer.SetBackground(0.4, 0.3, 0.2) interactor = vtk.vtkRenderWindowInteractor() interactor.SetRenderWindow(renderWindow) renderWindow.Render() interactor.Start()
VTK_DATA_ROOT = vtkGetDataRoot() lut = vtk.vtkLookupTable() lut.SetHueRange(0.6, 0) lut.SetSaturationRange(1.0, 0) lut.SetValueRange(0.5, 1.0) # Read the data: a height field results demReader = vtk.vtkDEMReader() demReader.SetFileName(VTK_DATA_ROOT + "/Data/SainteHelens.dem") demReader.Update() lo = demReader.GetOutput().GetScalarRange()[0] hi = demReader.GetOutput().GetScalarRange()[1] surface = vtk.vtkImageDataGeometryFilter() surface.SetInputConnection(demReader.GetOutputPort()) warp = vtk.vtkWarpScalar() warp.SetInputConnection(surface.GetOutputPort()) warp.SetScaleFactor(1) warp.UseNormalOn() warp.SetNormal(0, 0, 1) normals = vtk.vtkPolyDataNormals() normals.SetInputConnection(warp.GetOutputPort()) normals.SetFeatureAngle(60) normals.SplittingOff() demMapper = vtk.vtkPolyDataMapper() demMapper.SetInputConnection(normals.GetOutputPort())
def main(): colors = vtk.vtkNamedColors() # Create an image source1 = vtk.vtkImageCanvasSource2D() source1.SetScalarTypeToUnsignedChar() source1.SetNumberOfScalarComponents(3) source1.SetExtent(0, 100, 0, 100, 0, 0) source1.SetDrawColor(0, 0, 0, 1) source1.FillBox(0, 100, 0, 100) source1.SetDrawColor(255, 0, 0, 1) source1.FillBox(10, 20, 10, 20) source1.FillBox(40, 50, 20, 30) source1.Update() # Convert the image to a polydata imageDataGeometryFilter = vtk.vtkImageDataGeometryFilter() # imageDataGeometryFilter = vtk.vtkStructuredPointsGeometryFilter() imageDataGeometryFilter.SetInputConnection(source1.GetOutputPort()) imageDataGeometryFilter.Update() # p2c = vtk.vtkPointDataToCellData() # p2c.SetInputConnection(imageDataGeometryFilter.GetOutputPort()) # stripper = vtk.vtkStripper() # stripper.SetInputConnection(p2c.GetOutputPort()) # # stripper.PassCellDataAsFieldDataOn() p2c = vtk.vtkPointDataToCellData() p2c.PassPointDataOn() # p2c.SetInputConnection(source1.GetOutputPort()) # geom_filter = vtk.vtkGeometryFilter() # geom_filter.SetInputConnection(p2c.GetOutputPort()) # p2c.SetInputConnection(imageDataGeometryFilter.GetOutputPort()) # stripper = vtk.vtkStripper() # stripper.SetInputConnection(p2c.GetOutputPort()) # stripper.PassCellDataAsFieldDataOn() sphere = vtk.vtkSphereSource() # Create a mapper and actor mapper = vtk.vtkPolyDataMapper() # mapper = vtk.vtkPolyDataMapper2D() # mapper.SetScalarModeToUseCellData() mapper.SetInputConnection(imageDataGeometryFilter.GetOutputPort()) # mapper.SetInputConnection(geom_filter.GetOutputPort()) # mapper.SetInputConnection(p2c.GetOutputPort()) # mapper.SetInputConnection(sphere.GetOutputPort()) actor = vtk.vtkActor() # actor.GetProperty().BackfaceCullingOn() # actor.GetProperty().LightingOff() # actor.GetProperty().ShadingOn() # actor.GetProperty().SetAmbient(1.0) # actor.GetProperty().SetDiffuse(0.0) # actor.GetProperty().SetSpecular(0.0) # actor.GetProperty().SetInterpolationToGouraud() # actor.GetProperty().SetInterpolationToFlat() # interp = actor.GetProperty().GetInterpolation() # # # print('interp ',interp ) # actor.GetProperty().SetInterpolationToFlat() # actor.GetProperty().SetInterpolation(0) # interp = actor.GetProperty().GetInterpolation() # print('interp ', interp) actor.SetMapper(mapper) actor.GetProperty().SetInterpolationToFlat() actor.GetProperty().BackfaceCullingOn() actor.GetProperty().LightingOff() actor.GetProperty().ShadingOn() actor.GetProperty().SetAmbient(1.0) actor.GetProperty().SetDiffuse(0.0) actor.GetProperty().SetSpecular(0.0) actor.GetProperty().SetInterpolationToGouraud() actor.GetProperty().SetInterpolationToFlat() # Visualization renderer = vtk.vtkRenderer() renderWindow = vtk.vtkRenderWindow() renderWindow.AddRenderer(renderer) renderWindowInteractor = vtk.vtkRenderWindowInteractor() renderWindowInteractor.SetRenderWindow(renderWindow) renderer.AddActor(actor) renderer.SetBackground( colors.GetColor3d("white")) # Background color white renderWindow.Render() renderWindowInteractor.Start()
7:vtk.vtkDoubleArray()} normaldata = {0:vtk.vtkDoubleArray(), 1:vtk.vtkDoubleArray(), 3:vtk.vtkDoubleArray(), 5:vtk.vtkDoubleArray(), 7:vtk.vtkDoubleArray()} for i in [0,1,3,5,7]: # one for the dot product, one for the area scalardata[i].SetNumberOfComponents(2) # these have 3 components for cartesian coordinates vectordata[i].SetNumberOfComponents(3) normaldata[i].SetNumberOfComponents(3) imageGeoFilter = vtk.vtkImageDataGeometryFilter() imageGeoFilter.SetInput(indexedImage) imageGeoFilter.SetExtent(imageBounds) imagePoints = imageGeoFilter.GetOutput() imagePoints.Update() # needed to calulate normal and area polygon = vtk.vtkPolygon() triangle = vtk.vtkTriangle() normal = [0.0,0.0,0.0] pt=[0.0,0.0,0.0] # loop over voxels and add faces that border different pixel groups to polydata for i in xrange(indexedImage.GetNumberOfCells()): voxel = indexedImage.GetCell(i) p = voxel.GetPoints().GetPoint(0)
def main(args): parser = argparse.ArgumentParser( description= 'Render a DSM from a DTM and polygons representing buildings.') parser.add_argument("--input_vtp_path", type=str, help="Input buildings polygonal file (.vtp)") parser.add_argument( "--input_obj_paths", nargs="*", help="List of input building (.obj) file paths. " "Building object files start " "with a digit, road object files start with \"Road\". " "All obj files start with comments specifying the offsets " "that are added the coordinats. There are three comment lines, " "one for each coordinate: \"#c offset: value\" where c is x, y and z.") parser.add_argument("input_dtm", help="Input digital terain model (DTM)") parser.add_argument("output_dsm", help="Output digital surface model (DSM)") parser.add_argument("--render_png", action="store_true", help="Do not save the DSM, render into a PNG instead.") parser.add_argument( "--render_cls", action="store_true", help="Render a buildings mask: render buildings label (6), " "background (2) and no DTM.") parser.add_argument("--buildings_only", action="store_true", help="Do not use the DTM, use only the buildings.") parser.add_argument("--debug", action="store_true", help="Save intermediate results") args = parser.parse_args(args) # open the DTM dtm = gdal.Open(args.input_dtm, gdal.GA_ReadOnly) if not dtm: raise RuntimeError("Error: Failed to open DTM {}".format( args.input_dtm)) dtmDriver = dtm.GetDriver() dtmDriverMetadata = dtmDriver.GetMetadata() dsm = None dtmBounds = [0.0, 0.0, 0.0, 0.0] if dtmDriverMetadata.get(gdal.DCAP_CREATE) == "YES": print("Create destination image " "size:({}, {}) ...".format(dtm.RasterXSize, dtm.RasterYSize)) # georeference information projection = dtm.GetProjection() transform = dtm.GetGeoTransform() gcpProjection = dtm.GetGCPProjection() gcps = dtm.GetGCPs() options = ["COMPRESS=DEFLATE"] # ensure that space will be reserved for geographic corner coordinates # (in DMS) to be set later if (dtmDriver.ShortName == "NITF" and not projection): options.append("ICORDS=G") if args.render_cls: eType = gdal.GDT_Byte else: eType = gdal.GDT_Float32 dsm = dtmDriver.Create(args.output_dsm, xsize=dtm.RasterXSize, ysize=dtm.RasterYSize, bands=1, eType=eType, options=options) if (projection): # georeference through affine geotransform dsm.SetProjection(projection) dsm.SetGeoTransform(transform) else: # georeference through GCPs dsm.SetGCPs(gcps, gcpProjection) gdal.GCPsToGeoTransform(gcps, transform) corners = [[0, 0], [0, dtm.RasterYSize], [dtm.RasterXSize, dtm.RasterYSize], [dtm.RasterXSize, 0]] geoCorners = numpy.zeros((4, 2)) for i, corner in enumerate(corners): geoCorners[i] = [ transform[0] + corner[0] * transform[1] + corner[1] * transform[2], transform[3] + corner[0] * transform[4] + corner[1] * transform[5] ] dtmBounds[0] = numpy.min(geoCorners[:, 0]) dtmBounds[1] = numpy.max(geoCorners[:, 0]) dtmBounds[2] = numpy.min(geoCorners[:, 1]) dtmBounds[3] = numpy.max(geoCorners[:, 1]) if args.render_cls: # label for no building dtmRaster = numpy.full([dtm.RasterYSize, dtm.RasterXSize], 2) nodata = 0 else: print("Reading the DTM {} size: ({}, {})\n" "\tbounds: ({}, {}), ({}, {})...".format( args.input_dtm, dtm.RasterXSize, dtm.RasterYSize, dtmBounds[0], dtmBounds[1], dtmBounds[2], dtmBounds[3])) dtmRaster = dtm.GetRasterBand(1).ReadAsArray() nodata = dtm.GetRasterBand(1).GetNoDataValue() print("Nodata: {}".format(nodata)) else: raise RuntimeError( "Driver {} does not supports Create().".format(dtmDriver)) # read the buildings polydata, set Z as a scalar and project to XY plane print("Reading the buildings ...") # labels for buildings and elevated roads labels = [6, 17] if (args.input_vtp_path and os.path.isfile(args.input_vtp_path)): polyReader = vtk.vtkXMLPolyDataReader() polyReader.SetFileName(args.input_vtp_path) polyReader.Update() polyVtkList = [polyReader.GetOutput()] elif (args.input_obj_paths): # buildings start with numbers # optional elevated roads start with Road*.obj bldg_re = re.compile(".*/?[0-9][^/]*\\.obj") bldg_files = [f for f in args.input_obj_paths if bldg_re.match(f)] print(bldg_files) road_re = re.compile(".*/?Road[^/]*\\.obj") road_files = [f for f in args.input_obj_paths if road_re.match(f)] files = [bldg_files, road_files] files = [x for x in files if x] print(road_files) if len(files) >= 2: print("Found {} buildings and {} roads".format( len(files[0]), len(files[1]))) elif len(files) == 1: print("Found {} buildings".format(len(files[0]))) else: raise RuntimeError("No OBJ files found in {}".format( args.input_obj_paths)) polyVtkList = [] for category in range(len(files)): append = vtk.vtkAppendPolyData() for i, fileName in enumerate(files[category]): offset = [0.0, 0.0, 0.0] gdal_utils.read_offset(fileName, offset) print("Offset: {}".format(offset)) transform = vtk.vtkTransform() transform.Translate(offset[0], offset[1], offset[2]) objReader = vtk.vtkOBJReader() objReader.SetFileName(fileName) transformFilter = vtk.vtkTransformFilter() transformFilter.SetTransform(transform) transformFilter.SetInputConnection(objReader.GetOutputPort()) append.AddInputConnection(transformFilter.GetOutputPort()) append.Update() polyVtkList.append(append.GetOutput()) else: raise RuntimeError( "Must provide either --input_vtp_path, or --input_obj_paths") arrayName = "Elevation" append = vtk.vtkAppendPolyData() for category in range(len(polyVtkList)): poly = dsa.WrapDataObject(polyVtkList[category]) polyElevation = poly.Points[:, 2] if args.render_cls: # label for buildings polyElevation[:] = labels[category] polyElevationVtk = numpy_support.numpy_to_vtk(polyElevation) polyElevationVtk.SetName(arrayName) poly.PointData.SetScalars(polyElevationVtk) append.AddInputDataObject(polyVtkList[category]) append.Update() # Create the RenderWindow, Renderer ren = vtk.vtkRenderer() renWin = vtk.vtkRenderWindow() renWin.OffScreenRenderingOn() renWin.SetSize(dtm.RasterXSize, dtm.RasterYSize) renWin.SetMultiSamples(0) renWin.AddRenderer(ren) # show the buildings trisBuildingsFilter = vtk.vtkTriangleFilter() trisBuildingsFilter.SetInputDataObject(append.GetOutput()) trisBuildingsFilter.Update() p2cBuildings = vtk.vtkPointDataToCellData() p2cBuildings.SetInputConnection(trisBuildingsFilter.GetOutputPort()) p2cBuildings.PassPointDataOn() p2cBuildings.Update() buildingsScalarRange = p2cBuildings.GetOutput().GetCellData().GetScalars( ).GetRange() if (args.debug): polyWriter = vtk.vtkXMLPolyDataWriter() polyWriter.SetFileName("p2c.vtp") polyWriter.SetInputConnection(p2cBuildings.GetOutputPort()) polyWriter.Write() buildingsMapper = vtk.vtkPolyDataMapper() buildingsMapper.SetInputDataObject(p2cBuildings.GetOutput()) buildingsActor = vtk.vtkActor() buildingsActor.SetMapper(buildingsMapper) ren.AddActor(buildingsActor) if (args.render_png): print("Render into a PNG ...") # Show the terrain. print("Converting the DTM into a surface ...") # read the DTM as a VTK object dtmReader = vtk.vtkGDALRasterReader() dtmReader.SetFileName(args.input_dtm) dtmReader.Update() dtmVtk = dtmReader.GetOutput() # Convert the terrain into a polydata. surface = vtk.vtkImageDataGeometryFilter() surface.SetInputDataObject(dtmVtk) # Make sure the polygons are planar, so need to use triangles. tris = vtk.vtkTriangleFilter() tris.SetInputConnection(surface.GetOutputPort()) # Warp the surface by scalar values warp = vtk.vtkWarpScalar() warp.SetInputConnection(tris.GetOutputPort()) warp.SetScaleFactor(1) warp.UseNormalOn() warp.SetNormal(0, 0, 1) warp.Update() dsmScalarRange = warp.GetOutput().GetPointData().GetScalars().GetRange( ) dtmMapper = vtk.vtkPolyDataMapper() dtmMapper.SetInputConnection(warp.GetOutputPort()) dtmActor = vtk.vtkActor() dtmActor.SetMapper(dtmMapper) ren.AddActor(dtmActor) ren.ResetCamera() camera = ren.GetActiveCamera() camera.ParallelProjectionOn() camera.SetParallelScale((dtmBounds[3] - dtmBounds[2]) / 2) if (args.buildings_only): scalarRange = buildingsScalarRange else: scalarRange = [ min(dsmScalarRange[0], buildingsScalarRange[0]), max(dsmScalarRange[1], buildingsScalarRange[1]) ] lut = vtk.vtkColorTransferFunction() lut.AddRGBPoint(scalarRange[0], 0.23, 0.30, 0.75) lut.AddRGBPoint((scalarRange[0] + scalarRange[1]) / 2, 0.86, 0.86, 0.86) lut.AddRGBPoint(scalarRange[1], 0.70, 0.02, 0.15) dtmMapper.SetLookupTable(lut) dtmMapper.SetColorModeToMapScalars() buildingsMapper.SetLookupTable(lut) if (args.buildings_only): ren.RemoveActor(dtmActor) renWin.Render() windowToImageFilter = vtk.vtkWindowToImageFilter() windowToImageFilter.SetInput(renWin) windowToImageFilter.SetInputBufferTypeToRGBA() windowToImageFilter.ReadFrontBufferOff() windowToImageFilter.Update() writerPng = vtk.vtkPNGWriter() writerPng.SetFileName(args.output_dsm + ".png") writerPng.SetInputConnection(windowToImageFilter.GetOutputPort()) writerPng.Write() else: print("Render into a floating point buffer ...") ren.ResetCamera() camera = ren.GetActiveCamera() camera.ParallelProjectionOn() camera.SetParallelScale((dtmBounds[3] - dtmBounds[2]) / 2) distance = camera.GetDistance() focalPoint = [(dtmBounds[0] + dtmBounds[1]) * 0.5, (dtmBounds[3] + dtmBounds[2]) * 0.5, (buildingsScalarRange[0] + buildingsScalarRange[1]) * 0.5 ] position = [focalPoint[0], focalPoint[1], focalPoint[2] + distance] camera.SetFocalPoint(focalPoint) camera.SetPosition(position) valuePass = vtk.vtkValuePass() valuePass.SetRenderingMode(vtk.vtkValuePass.FLOATING_POINT) # use the default scalar for point data valuePass.SetInputComponentToProcess(0) valuePass.SetInputArrayToProcess( vtk.VTK_SCALAR_MODE_USE_POINT_FIELD_DATA, arrayName) passes = vtk.vtkRenderPassCollection() passes.AddItem(valuePass) sequence = vtk.vtkSequencePass() sequence.SetPasses(passes) cameraPass = vtk.vtkCameraPass() cameraPass.SetDelegatePass(sequence) ren.SetPass(cameraPass) # We have to render the points first, otherwise we get a segfault. renWin.Render() valuePass.SetInputArrayToProcess( vtk.VTK_SCALAR_MODE_USE_CELL_FIELD_DATA, arrayName) renWin.Render() elevationFlatVtk = valuePass.GetFloatImageDataArray(ren) valuePass.ReleaseGraphicsResources(renWin) print("Writing the DSM ...") elevationFlat = numpy_support.vtk_to_numpy(elevationFlatVtk) # VTK X,Y corresponds to numpy cols,rows. VTK stores arrays # in Fortran order. elevationTranspose = numpy.reshape(elevationFlat, [dtm.RasterXSize, dtm.RasterYSize], "F") # changes from cols, rows to rows,cols. elevation = numpy.transpose(elevationTranspose) # numpy rows increase as you go down, Y for VTK images increases as you go up elevation = numpy.flip(elevation, 0) if args.buildings_only: dsmElevation = elevation else: # elevation has nans in places other than buildings dsmElevation = numpy.fmax(dtmRaster, elevation) dsm.GetRasterBand(1).WriteArray(dsmElevation) if nodata: dsm.GetRasterBand(1).SetNoDataValue(nodata)
def main(): fileName = get_program_parameters() colors = vtk.vtkNamedColors() # Set the background color. Match those in VTKTextbook.pdf. bkg = map(lambda x: x / 256.0, [60, 93, 144]) colors.SetColor("BkgColor", *bkg) # Read in an image and compute a luminance value. The image is extracted # as a set of polygons (vtkImageDataGeometryFilter). We then will # warp the plane using the scalar (luminance) values. # reader = vtk.vtkBMPReader() reader.SetFileName(fileName) # Convert the image to a grey scale. luminance = vtk.vtkImageLuminance() luminance.SetInputConnection(reader.GetOutputPort()) # Pass the data to the pipeline as polygons. geometry = vtk.vtkImageDataGeometryFilter() geometry.SetInputConnection(luminance.GetOutputPort()) # Warp the data in a direction perpendicular to the image plane. warp = vtk.vtkWarpScalar() warp.SetInputConnection(geometry.GetOutputPort()) warp.SetScaleFactor(-0.1) # Use vtkMergeFilter to combine the original image with the warped geometry. merge = vtk.vtkMergeFilter() merge.SetGeometryConnection(warp.GetOutputPort()) merge.SetScalarsConnection(reader.GetOutputPort()) mapper = vtk.vtkDataSetMapper() mapper.SetInputConnection(merge.GetOutputPort()) mapper.SetScalarRange(0, 255) actor = vtk.vtkActor() actor.SetMapper(mapper) # Create the rendering window, renderer, and interactive renderer. ren = vtk.vtkRenderer() renWin = vtk.vtkRenderWindow() renWin.AddRenderer(ren) iren = vtk.vtkRenderWindowInteractor() iren.SetRenderWindow(renWin) # Add the actors to the renderer, set the background and size. ren.AddActor(actor) ren.ResetCamera() ren.SetBackground(colors.GetColor3d("BkgColor")) # ren.GetActiveCamera().Azimuth(20) # ren.GetActiveCamera().Elevation(30) # ren.ResetCameraClippingRange() # ren.GetActiveCamera().Zoom(1.3) ren.GetActiveCamera().SetPosition(-100, -130, 325) ren.GetActiveCamera().SetFocalPoint(105, 114, -29) ren.GetActiveCamera().SetViewUp(0.51, 0.54, 0.67) ren.ResetCameraClippingRange() renWin.SetSize(512, 512) # Render the image. iren.Initialize() renWin.Render() iren.Start()
def vtkWidget(self, qFrame, filename=''): # the center computation might seem to be a bit complicated however what we do is: # the center_of_rotation gives the center of rotation in pixel coordinates self.vl = QtWidgets.QGridLayout() self.vtkWidget = QVTKRenderWindowInteractor(qFrame) self.vl.addWidget(self.vtkWidget) self.vl.setContentsMargins(0, 0, 0, 0) self.ren = vtk.vtkRenderer() self.vtkWidget.GetRenderWindow().AddRenderer(self.ren) self.iren = self.vtkWidget.GetRenderWindow().GetInteractor() # Create an actor self.arrowSource = vtk.vtkArrowSource() self.focal_point = [0, 0, 0] # self.reader = vtk.vtkSTLReader() # self.reader.SetFileName(filename) # self.reader.Update() # polydata = self.reader.GetOutput() testing = 0 if testing == 1: reader = vtk.vtkXMLImageDataReader() reader.SetFileName( 'C:\\Users\\jonas\\GitHub\\InteractiveConeBeamReconstruction\\shepplogan.vti' ) reader.Update() # Convert the image to a polydata imageDataGeometryFilter = vtk.vtkImageDataGeometryFilter() imageDataGeometryFilter.SetInputConnection(reader.GetOutputPort()) imageDataGeometryFilter.Update() pdm = vtk.vtkPolyDataMapper() pdm.SetInputConnection(imageDataGeometryFilter.GetOutputPort()) self.actor = vtk.vtkActor() self.actor.SetMapper(pdm) self.actor.GetProperty().SetPointSize(1) print('x') self.actor.GetProperty().SetRepresentationToWireframe() elif testing == 2: reader = vtk.vtkXMLImageDataReader() reader.SetFileName( 'C:\\Users\\jonas\\GitHub\\InteractiveConeBeamReconstruction\\shepplogan.vti' ) reader.Update() castFilter = vtk.vtkImageCast() castFilter.SetInputConnection(reader.GetOutputPort()) castFilter.SetOutputScalarTypeToUnsignedShort() castFilter.Update() imdataBrainSeg = castFilter.GetOutput() propVolume = vtk.vtkVolumeProperty() propVolume.ShadeOff() # propVolume.SetColor(funcColor) # propVolume.SetScalarOpacity(funcOpacityScalar) # propVolume.SetGradientOpacity(funcOpacityGradient) propVolume.SetInterpolationTypeToLinear() funcRayCast = vtk.vtkVolumeRayCastCompositeFunction() funcRayCast.SetCompositeMethodToClassifyFirst() mapperVolume = vtk.vtkVolumeRayCastMapper() mapperVolume.SetVolumeRayCastFunction(funcRayCast) mapperVolume.SetInput(imdataBrainSeg) actorVolume = vtk.vtkVolume() actorVolume.SetMapper(mapperVolume) actorVolume.SetProperty(propVolume) self.actor = actorVolume self.actor = vtk.vtkActor() self.ren.AddActor(self.actor) self.ren.SetBackground(0.0, 0.0, 0.0) self.vtkWidget.Initialize() self.iren.Initialize() self.iren.SetInteractorStyle(InteractorStyle(parent=self.iren)) qFrame.setLayout(self.vl) self.initial_camera = vtk.vtkCamera() # self.initial_camera.SetPosition(100, 0, 1000) self.initial_camera.DeepCopy(self.ren.GetActiveCamera()) #if filename: # self.display_file(filename) self.reset_view()
def testSphereWidget(self): # This example demonstrates how to use the vtkSphereWidget to control the # position of a light. # These are the pre-recorded events Recording = \ "# StreamVersion 1\n\ CharEvent 23 266 0 0 105 1 i\n\ KeyReleaseEvent 23 266 0 0 105 1 i\n\ EnterEvent 69 294 0 0 0 0 i\n\ MouseMoveEvent 69 294 0 0 0 0 i\n\ MouseMoveEvent 68 293 0 0 0 0 i\n\ MouseMoveEvent 67 292 0 0 0 0 i\n\ MouseMoveEvent 66 289 0 0 0 0 i\n\ MouseMoveEvent 66 282 0 0 0 0 i\n\ MouseMoveEvent 66 271 0 0 0 0 i\n\ MouseMoveEvent 69 253 0 0 0 0 i\n\ MouseMoveEvent 71 236 0 0 0 0 i\n\ MouseMoveEvent 74 219 0 0 0 0 i\n\ MouseMoveEvent 76 208 0 0 0 0 i\n\ MouseMoveEvent 78 190 0 0 0 0 i\n\ MouseMoveEvent 78 173 0 0 0 0 i\n\ MouseMoveEvent 77 162 0 0 0 0 i\n\ MouseMoveEvent 77 151 0 0 0 0 i\n\ MouseMoveEvent 77 139 0 0 0 0 i\n\ MouseMoveEvent 76 125 0 0 0 0 i\n\ MouseMoveEvent 73 114 0 0 0 0 i\n\ MouseMoveEvent 73 106 0 0 0 0 i\n\ MouseMoveEvent 73 101 0 0 0 0 i\n\ MouseMoveEvent 72 95 0 0 0 0 i\n\ MouseMoveEvent 72 92 0 0 0 0 i\n\ MouseMoveEvent 70 89 0 0 0 0 i\n\ MouseMoveEvent 69 86 0 0 0 0 i\n\ MouseMoveEvent 67 84 0 0 0 0 i\n\ MouseMoveEvent 65 81 0 0 0 0 i\n\ MouseMoveEvent 60 79 0 0 0 0 i\n\ MouseMoveEvent 59 79 0 0 0 0 i\n\ MouseMoveEvent 58 79 0 0 0 0 i\n\ MouseMoveEvent 57 78 0 0 0 0 i\n\ MouseMoveEvent 55 78 0 0 0 0 i\n\ MouseMoveEvent 54 77 0 0 0 0 i\n\ LeftButtonPressEvent 54 77 0 0 0 0 i\n\ MouseMoveEvent 61 79 0 0 0 0 i\n\ MouseMoveEvent 67 83 0 0 0 0 i\n\ MouseMoveEvent 72 88 0 0 0 0 i\n\ MouseMoveEvent 77 90 0 0 0 0 i\n\ MouseMoveEvent 78 91 0 0 0 0 i\n\ MouseMoveEvent 80 92 0 0 0 0 i\n\ MouseMoveEvent 84 93 0 0 0 0 i\n\ MouseMoveEvent 85 94 0 0 0 0 i\n\ MouseMoveEvent 88 97 0 0 0 0 i\n\ MouseMoveEvent 90 100 0 0 0 0 i\n\ MouseMoveEvent 92 102 0 0 0 0 i\n\ MouseMoveEvent 94 103 0 0 0 0 i\n\ MouseMoveEvent 97 105 0 0 0 0 i\n\ MouseMoveEvent 101 107 0 0 0 0 i\n\ MouseMoveEvent 102 109 0 0 0 0 i\n\ MouseMoveEvent 104 111 0 0 0 0 i\n\ MouseMoveEvent 108 113 0 0 0 0 i\n\ MouseMoveEvent 112 115 0 0 0 0 i\n\ MouseMoveEvent 118 119 0 0 0 0 i\n\ MouseMoveEvent 118 120 0 0 0 0 i\n\ MouseMoveEvent 118 123 0 0 0 0 i\n\ MouseMoveEvent 120 125 0 0 0 0 i\n\ MouseMoveEvent 122 128 0 0 0 0 i\n\ MouseMoveEvent 123 129 0 0 0 0 i\n\ MouseMoveEvent 125 132 0 0 0 0 i\n\ MouseMoveEvent 125 134 0 0 0 0 i\n\ MouseMoveEvent 127 138 0 0 0 0 i\n\ MouseMoveEvent 127 142 0 0 0 0 i\n\ MouseMoveEvent 127 147 0 0 0 0 i\n\ MouseMoveEvent 126 152 0 0 0 0 i\n\ MouseMoveEvent 126 155 0 0 0 0 i\n\ MouseMoveEvent 125 160 0 0 0 0 i\n\ MouseMoveEvent 125 167 0 0 0 0 i\n\ MouseMoveEvent 125 169 0 0 0 0 i\n\ MouseMoveEvent 125 174 0 0 0 0 i\n\ MouseMoveEvent 122 179 0 0 0 0 i\n\ MouseMoveEvent 120 183 0 0 0 0 i\n\ MouseMoveEvent 116 187 0 0 0 0 i\n\ MouseMoveEvent 113 192 0 0 0 0 i\n\ MouseMoveEvent 113 193 0 0 0 0 i\n\ MouseMoveEvent 111 195 0 0 0 0 i\n\ MouseMoveEvent 108 198 0 0 0 0 i\n\ MouseMoveEvent 106 200 0 0 0 0 i\n\ MouseMoveEvent 104 202 0 0 0 0 i\n\ MouseMoveEvent 103 203 0 0 0 0 i\n\ MouseMoveEvent 99 205 0 0 0 0 i\n\ MouseMoveEvent 97 207 0 0 0 0 i\n\ MouseMoveEvent 94 208 0 0 0 0 i\n\ MouseMoveEvent 91 210 0 0 0 0 i\n\ MouseMoveEvent 89 211 0 0 0 0 i\n\ MouseMoveEvent 86 211 0 0 0 0 i\n\ MouseMoveEvent 84 211 0 0 0 0 i\n\ MouseMoveEvent 80 211 0 0 0 0 i\n\ MouseMoveEvent 77 211 0 0 0 0 i\n\ MouseMoveEvent 75 211 0 0 0 0 i\n\ MouseMoveEvent 71 211 0 0 0 0 i\n\ MouseMoveEvent 68 211 0 0 0 0 i\n\ MouseMoveEvent 66 210 0 0 0 0 i\n\ MouseMoveEvent 62 210 0 0 0 0 i\n\ MouseMoveEvent 58 209 0 0 0 0 i\n\ MouseMoveEvent 54 207 0 0 0 0 i\n\ MouseMoveEvent 52 204 0 0 0 0 i\n\ MouseMoveEvent 51 203 0 0 0 0 i\n\ MouseMoveEvent 51 200 0 0 0 0 i\n\ MouseMoveEvent 48 196 0 0 0 0 i\n\ MouseMoveEvent 45 187 0 0 0 0 i\n\ MouseMoveEvent 45 181 0 0 0 0 i\n\ MouseMoveEvent 44 168 0 0 0 0 i\n\ MouseMoveEvent 40 161 0 0 0 0 i\n\ MouseMoveEvent 39 154 0 0 0 0 i\n\ MouseMoveEvent 38 146 0 0 0 0 i\n\ MouseMoveEvent 35 131 0 0 0 0 i\n\ MouseMoveEvent 34 121 0 0 0 0 i\n\ MouseMoveEvent 34 110 0 0 0 0 i\n\ MouseMoveEvent 34 103 0 0 0 0 i\n\ MouseMoveEvent 34 91 0 0 0 0 i\n\ MouseMoveEvent 34 86 0 0 0 0 i\n\ MouseMoveEvent 34 73 0 0 0 0 i\n\ MouseMoveEvent 35 66 0 0 0 0 i\n\ MouseMoveEvent 37 60 0 0 0 0 i\n\ MouseMoveEvent 37 53 0 0 0 0 i\n\ MouseMoveEvent 38 50 0 0 0 0 i\n\ MouseMoveEvent 38 48 0 0 0 0 i\n\ MouseMoveEvent 41 45 0 0 0 0 i\n\ MouseMoveEvent 43 45 0 0 0 0 i\n\ MouseMoveEvent 44 45 0 0 0 0 i\n\ MouseMoveEvent 47 43 0 0 0 0 i\n\ MouseMoveEvent 51 44 0 0 0 0 i\n\ MouseMoveEvent 54 44 0 0 0 0 i\n\ MouseMoveEvent 55 44 0 0 0 0 i\n\ MouseMoveEvent 59 44 0 0 0 0 i\n\ MouseMoveEvent 64 44 0 0 0 0 i\n\ MouseMoveEvent 67 44 0 0 0 0 i\n\ MouseMoveEvent 68 44 0 0 0 0 i\n\ MouseMoveEvent 71 44 0 0 0 0 i\n\ MouseMoveEvent 74 44 0 0 0 0 i\n\ MouseMoveEvent 77 44 0 0 0 0 i\n\ MouseMoveEvent 80 45 0 0 0 0 i\n\ MouseMoveEvent 81 45 0 0 0 0 i\n\ MouseMoveEvent 85 49 0 0 0 0 i\n\ MouseMoveEvent 89 50 0 0 0 0 i\n\ MouseMoveEvent 94 52 0 0 0 0 i\n\ MouseMoveEvent 99 56 0 0 0 0 i\n\ MouseMoveEvent 104 58 0 0 0 0 i\n\ MouseMoveEvent 107 61 0 0 0 0 i\n\ MouseMoveEvent 109 63 0 0 0 0 i\n\ MouseMoveEvent 109 67 0 0 0 0 i\n\ MouseMoveEvent 111 83 0 0 0 0 i\n\ MouseMoveEvent 113 86 0 0 0 0 i\n\ MouseMoveEvent 113 87 0 0 0 0 i\n\ MouseMoveEvent 113 89 0 0 0 0 i\n\ MouseMoveEvent 112 93 0 0 0 0 i\n\ MouseMoveEvent 112 97 0 0 0 0 i\n\ MouseMoveEvent 111 104 0 0 0 0 i\n\ MouseMoveEvent 112 108 0 0 0 0 i\n\ MouseMoveEvent 116 115 0 0 0 0 i\n\ MouseMoveEvent 116 123 0 0 0 0 i\n\ MouseMoveEvent 116 129 0 0 0 0 i\n\ MouseMoveEvent 119 138 0 0 0 0 i\n\ MouseMoveEvent 122 141 0 0 0 0 i\n\ MouseMoveEvent 127 148 0 0 0 0 i\n\ MouseMoveEvent 128 161 0 0 0 0 i\n\ MouseMoveEvent 131 166 0 0 0 0 i\n\ MouseMoveEvent 134 168 0 0 0 0 i\n\ MouseMoveEvent 135 171 0 0 0 0 i\n\ MouseMoveEvent 134 174 0 0 0 0 i\n\ MouseMoveEvent 132 176 0 0 0 0 i\n\ MouseMoveEvent 132 178 0 0 0 0 i\n\ MouseMoveEvent 129 180 0 0 0 0 i\n\ MouseMoveEvent 127 182 0 0 0 0 i\n\ MouseMoveEvent 124 185 0 0 0 0 i\n\ MouseMoveEvent 122 186 0 0 0 0 i\n\ MouseMoveEvent 118 189 0 0 0 0 i\n\ MouseMoveEvent 114 191 0 0 0 0 i\n\ MouseMoveEvent 114 193 0 0 0 0 i\n\ MouseMoveEvent 112 193 0 0 0 0 i\n\ MouseMoveEvent 111 194 0 0 0 0 i\n\ MouseMoveEvent 110 197 0 0 0 0 i\n\ MouseMoveEvent 110 198 0 0 0 0 i\n\ MouseMoveEvent 109 199 0 0 0 0 i\n\ MouseMoveEvent 108 200 0 0 0 0 i\n\ MouseMoveEvent 108 201 0 0 0 0 i\n\ MouseMoveEvent 108 202 0 0 0 0 i\n\ MouseMoveEvent 108 203 0 0 0 0 i\n\ MouseMoveEvent 104 206 0 0 0 0 i\n\ LeftButtonReleaseEvent 104 206 0 0 0 0 i\n\ MouseMoveEvent 104 205 0 0 0 0 i\n\ MouseMoveEvent 104 204 0 0 0 0 i\n\ MouseMoveEvent 105 205 0 0 0 0 i\n\ MouseMoveEvent 105 206 0 0 0 0 i\n\ " # Start by loading some data. # dem = vtk.vtkDEMReader() dem.SetFileName(VTK_DATA_ROOT + "/Data/SainteHelens.dem") dem.Update() Scale = 2 lut = vtk.vtkLookupTable() lut.SetHueRange(0.6, 0) lut.SetSaturationRange(1.0, 0) lut.SetValueRange(0.5, 1.0) lo = Scale * dem.GetElevationBounds()[0] hi = Scale * dem.GetElevationBounds()[1] shrink = vtk.vtkImageShrink3D() shrink.SetShrinkFactors(4, 4, 1) shrink.SetInputConnection(dem.GetOutputPort()) shrink.AveragingOn() geom = vtk.vtkImageDataGeometryFilter() geom.SetInputConnection(shrink.GetOutputPort()) geom.ReleaseDataFlagOn() warp = vtk.vtkWarpScalar() warp.SetInputConnection(geom.GetOutputPort()) warp.SetNormal(0, 0, 1) warp.UseNormalOn() warp.SetScaleFactor(Scale) warp.ReleaseDataFlagOn() elevation = vtk.vtkElevationFilter() elevation.SetInputConnection(warp.GetOutputPort()) elevation.SetLowPoint(0, 0, lo) elevation.SetHighPoint(0, 0, hi) elevation.SetScalarRange(lo, hi) elevation.ReleaseDataFlagOn() normals = vtk.vtkPolyDataNormals() normals.SetInputConnection(elevation.GetOutputPort()) normals.SetFeatureAngle(60) normals.ConsistencyOff() normals.SplittingOff() normals.ReleaseDataFlagOn() normals.Update() demMapper = vtk.vtkPolyDataMapper() demMapper.SetInputConnection(normals.GetOutputPort()) demMapper.SetScalarRange(lo, hi) demMapper.SetLookupTable(lut) demActor = vtk.vtkActor() demActor.SetMapper(demMapper) # Create the RenderWindow, Renderer and both Actors # ren = vtk.vtkRenderer() renWin = vtk.vtkRenderWindow() renWin.SetMultiSamples(0) renWin.AddRenderer(ren) iRen = vtk.vtkRenderWindowInteractor() iRen.SetRenderWindow(renWin) iRen.LightFollowCameraOff() # iRen.SetInteractorStyle("") # The callback takes two arguments. # The first being the object that generates the event and # the second argument the event name (which is a string). def MoveLight(widget, event_string): light.SetPosition(rep.GetHandlePosition()) # Associate the line widget with the interactor rep = vtk.vtkSphereRepresentation() rep.SetPlaceFactor(4) rep.PlaceWidget(normals.GetOutput().GetBounds()) rep.HandleVisibilityOn() rep.SetRepresentationToWireframe() # rep HandleVisibilityOff # rep HandleTextOff sphereWidget = vtk.vtkSphereWidget2() sphereWidget.SetInteractor(iRen) sphereWidget.SetRepresentation(rep) # sphereWidget.TranslationEnabledOff() # sphereWidget.ScalingEnabledOff() sphereWidget.AddObserver("InteractionEvent", MoveLight) recorder = vtk.vtkInteractorEventRecorder() recorder.SetInteractor(iRen) # recorder.SetFileName("c:/record.log") # recorder.Record() recorder.ReadFromInputStringOn() recorder.SetInputString(Recording) # Add the actors to the renderer, set the background and size # ren.AddActor(demActor) ren.SetBackground(1, 1, 1) renWin.SetSize(300, 300) ren.SetBackground(0.1, 0.2, 0.4) cam1 = ren.GetActiveCamera() cam1.SetViewUp(0, 0, 1) cam1.SetFocalPoint(dem.GetOutput().GetCenter()) cam1.SetPosition(1, 0, 0) ren.ResetCamera() cam1.Elevation(25) cam1.Azimuth(125) cam1.Zoom(1.25) light = vtk.vtkLight() light.SetFocalPoint(rep.GetCenter()) light.SetPosition(rep.GetHandlePosition()) ren.AddLight(light) iRen.Initialize() renWin.Render() # render the image renWin.Render() # Actually probe the data recorder.Play() img_file = "TestSphereWidget.png" vtk.test.Testing.compareImage(iRen.GetRenderWindow(), vtk.test.Testing.getAbsImagePath(img_file), threshold=25) vtk.test.Testing.interact()
lut.SetValueRange(0.5,1.0) demModel = vtk.vtkDEMReader() demModel.SetFileName("" + str(VTK_DATA_ROOT) + "/Data/SainteHelens.dem") demModel.Update() catch.catch(globals(),"""#demModel.Print()""") lo = expr.expr(globals(), locals(),["Scale","*","lindex(demModel.GetElevationBounds(),0)"]) hi = expr.expr(globals(), locals(),["Scale","*","lindex(demModel.GetElevationBounds(),1)"]) demActor = vtk.vtkLODActor() # create a pipeline for each lod mapper lods = "4 8 16" for lod in lods.split(): locals()[get_variable_name("shrink", lod, "")] = vtk.vtkImageShrink3D() locals()[get_variable_name("shrink", lod, "")].SetShrinkFactors(expr.expr(globals(), locals(),["int","(","lod",")"]),expr.expr(globals(), locals(),["int","(","lod",")"]),1) locals()[get_variable_name("shrink", lod, "")].SetInputConnection(demModel.GetOutputPort()) locals()[get_variable_name("shrink", lod, "")].AveragingOn() locals()[get_variable_name("geom", lod, "")] = vtk.vtkImageDataGeometryFilter() locals()[get_variable_name("geom", lod, "")].SetInputConnection(locals()[get_variable_name("shrink", lod, "")].GetOutputPort()) locals()[get_variable_name("geom", lod, "")].ReleaseDataFlagOn() locals()[get_variable_name("warp", lod, "")] = vtk.vtkWarpScalar() locals()[get_variable_name("warp", lod, "")].SetInputConnection(locals()[get_variable_name("geom", lod, "")].GetOutputPort()) locals()[get_variable_name("warp", lod, "")].SetNormal(0,0,1) locals()[get_variable_name("warp", lod, "")].UseNormalOn() locals()[get_variable_name("warp", lod, "")].SetScaleFactor(Scale) locals()[get_variable_name("warp", lod, "")].ReleaseDataFlagOn() locals()[get_variable_name("elevation", lod, "")] = vtk.vtkElevationFilter() locals()[get_variable_name("elevation", lod, "")].SetInputConnection(locals()[get_variable_name("warp", lod, "")].GetOutputPort()) locals()[get_variable_name("elevation", lod, "")].SetLowPoint(0,0,lo) locals()[get_variable_name("elevation", lod, "")].SetHighPoint(0,0,hi) locals()[get_variable_name("elevation", lod, "")].SetScalarRange(lo,hi) locals()[get_variable_name("elevation", lod, "")].ReleaseDataFlagOn() locals()[get_variable_name("toPoly", lod, "")] = vtk.vtkCastToConcrete()
# This example shows how to combine data from both the imaging and # graphics pipelines. The vtkMergeFilter is used to merge the data # from each together. import vtk from vtk.util.misc import vtkGetDataRoot VTK_DATA_ROOT = vtkGetDataRoot() # Read in an image and compute a luminance value. The image is # extracted as a set of polygons (vtkImageDataGeometryFilter). We then # will warp the plane using the scalar (luminance) values. reader = vtk.vtkBMPReader() reader.SetFileName(VTK_DATA_ROOT + "/Data/masonry.bmp") luminance = vtk.vtkImageLuminance() luminance.SetInputConnection(reader.GetOutputPort()) geometry = vtk.vtkImageDataGeometryFilter() geometry.SetInputConnection(luminance.GetOutputPort()) warp = vtk.vtkWarpScalar() warp.SetInputConnection(geometry.GetOutputPort()) warp.SetScaleFactor(-0.1) # Use vtkMergeFilter to combine the original image with the warped # geometry. merge = vtk.vtkMergeFilter() merge.SetGeometryConnection(warp.GetOutputPort()) merge.SetScalarsConnection(reader.GetOutputPort()) mapper = vtk.vtkDataSetMapper() mapper.SetInputConnection(merge.GetOutputPort()) mapper.SetScalarRange(0, 255) actor = vtk.vtkActor() actor.SetMapper(mapper)
image_data = vtk.vtkImageData() N = 72 image_data.SetDimensions(N, N, 1) try: method = image_data.SetScalarComponentFromFloat except AttributeError: method = image_data.SetScalarComponentFromDouble for i in range(N): for j in range(N): a = float(i) / N b = float(j) / N v = 0.5 + 0.5 * cos(13 * a) * cos(8 * b + 3 * a * a) v = v**2 method(i, j, 0, 0, v) geometry_filter = vtk.vtkImageDataGeometryFilter() geometry_filter.SetInput(image_data) warp = vtk.vtkWarpScalar() warp.SetInput(geometry_filter.GetOutput()) warp.SetScaleFactor(8.1) normal_filter = vtk.vtkPolyDataNormals() normal_filter.SetInput(warp.GetOutput()) data_mapper = vtk.vtkDataSetMapper() data_mapper.SetInput(normal_filter.GetOutput()) data_actor = vtk.vtkActor() data_actor.SetMapper(data_mapper) renderer.AddActor(data_actor) table = vtk.vtkLookupTable() data_mapper.SetLookupTable(table)
renWin = vtk.vtkRenderWindow() renWin.SetMultiSamples(0) renWin.AddRenderer(ren1) iren = vtk.vtkRenderWindowInteractor() iren.SetRenderWindow(renWin) # # Create tensor ellipsoids # # generate tensors ptLoad = vtk.vtkPointLoad() ptLoad.SetLoadValue(100.0) ptLoad.SetSampleDimensions(6,6,6) ptLoad.ComputeEffectiveStressOn() ptLoad.SetModelBounds(-10,10,-10,10,-10,10) # extract plane of data plane = vtk.vtkImageDataGeometryFilter() plane.SetInputConnection(ptLoad.GetOutputPort()) plane.SetExtent(2,2,0,99,0,99) # Generate ellipsoids sphere = vtk.vtkSphereSource() sphere.SetThetaResolution(8) sphere.SetPhiResolution(8) ellipsoids = vtk.vtkTensorGlyph() ellipsoids.SetInputConnection(ptLoad.GetOutputPort()) ellipsoids.SetSourceConnection(sphere.GetOutputPort()) ellipsoids.SetScaleFactor(10) ellipsoids.ClampScalingOn() ellipNormals = vtk.vtkPolyDataNormals() ellipNormals.SetInputConnection(ellipsoids.GetOutputPort()) # Map contour lut = vtk.vtkLogLookupTable()
def set_initial_display(self): if self.renwininter is None: self.renwininter = MEQ_QVTKRenderWindowInteractor(self.winsplitter) self.renwininter.setWhatsThis(rendering_control_instructions) self.renwin = self.renwininter.GetRenderWindow() self.inter = self.renwin.GetInteractor() self.winsplitter.insertWidget(0, self.renwininter) self.winsplitter.addWidget(self.v_box_controls) self.winsplitter.setSizes([500, 100]) self.renwininter.show() # Paul Kemper suggested the following: camstyle = vtk.vtkInteractorStyleTrackballCamera() self.renwininter.SetInteractorStyle(camstyle) self.extents = self.image_array.GetDataExtent() self.spacing = self.image_array.GetDataSpacing() self.origin = self.image_array.GetDataOrigin() # An outline is shown for context. if self.warped_surface: self.index_selector.initWarpContextmenu() sx, sy, sz = self.image_array.GetDataSpacing() xMin, xMax, yMin, yMax, zMin, zMax = self.image_array.GetDataExtent( ) xMin = sx * xMin xMax = sx * xMax yMin = sy * yMin yMax = sy * yMax self.scale_factor = 0.5 * ( (xMax - xMin) + (yMax - yMin)) / (self.data_max - self.data_min) zMin = self.data_min * self.scale_factor zMax = self.data_max * self.scale_factor self.outline = vtk.vtkOutlineSource() self.outline.SetBounds(xMin, xMax, yMin, yMax, zMin, zMax) else: self.index_selector.init3DContextmenu() self.outline = vtk.vtkOutlineFilter() self.outline.SetInput(self.image_array.GetOutput()) outlineMapper = vtk.vtkPolyDataMapper() outlineMapper.SetInput(self.outline.GetOutput()) outlineActor = vtk.vtkActor() outlineActor.SetMapper(outlineMapper) # create blue to red color table self.lut = vtk.vtkLookupTable() self.lut.SetHueRange(0.6667, 0.0) self.lut.SetNumberOfColors(256) self.lut.Build() # here is where the 2-D image gets warped if self.warped_surface: geometry = vtk.vtkImageDataGeometryFilter() geometry.SetInput(self.image_array.GetOutput()) self.warp = vtk.vtkWarpScalar() self.warp.SetInput(geometry.GetOutput()) self.warp.SetScaleFactor(self.scale_factor) self.mapper = vtk.vtkPolyDataMapper() self.mapper.SetInput(self.warp.GetPolyDataOutput()) self.mapper.SetScalarRange(self.data_min, self.data_max) self.mapper.SetLookupTable(self.lut) self.mapper.ImmediateModeRenderingOff() warp_actor = vtk.vtkActor() # warp_actor.SetScale(2,1,1) warp_actor.SetMapper(self.mapper) min_range = 0.5 * self.scale_factor max_range = 2.0 * self.scale_factor self.index_selector.set_emit(False) self.index_selector.setMaxValue(max_range, False) self.index_selector.setMinValue(min_range) self.index_selector.setTickInterval((max_range - min_range) / 10) self.index_selector.setRange(max_range, False) self.index_selector.setValue(self.scale_factor) self.index_selector.setLabel('display gain') self.index_selector.hideNDControllerOption() self.index_selector.reset_scale_toggle() self.index_selector.set_emit(True) else: # set up ImagePlaneWidgets ... # The shared picker enables us to use 3 planes at one time # and gets the picking order right picker = vtk.vtkCellPicker() picker.SetTolerance(0.005) # get locations for initial slices xMin, xMax, yMin, yMax, zMin, zMax = self.extents x_index = (xMax - xMin) / 2 y_index = (yMax - yMin) / 2 z_index = (zMax - zMin) / 2 # The 3 image plane widgets are used to probe the dataset. self.planeWidgetX = vtk.vtkImagePlaneWidget() self.planeWidgetX.DisplayTextOn() self.planeWidgetX.SetInput(self.image_array.GetOutput()) self.planeWidgetX.SetPlaneOrientationToXAxes() self.planeWidgetX.SetSliceIndex(x_index) self.planeWidgetX.SetPicker(picker) self.planeWidgetX.SetKeyPressActivationValue("x") self.planeWidgetX.SetLookupTable(self.lut) self.planeWidgetX.TextureInterpolateOff() self.planeWidgetX.SetResliceInterpolate(0) self.planeWidgetY = vtk.vtkImagePlaneWidget() self.planeWidgetY.DisplayTextOn() self.planeWidgetY.SetInput(self.image_array.GetOutput()) self.planeWidgetY.SetPlaneOrientationToYAxes() self.planeWidgetY.SetSliceIndex(y_index) self.planeWidgetY.SetPicker(picker) self.planeWidgetY.SetKeyPressActivationValue("y") self.planeWidgetY.SetLookupTable( self.planeWidgetX.GetLookupTable()) self.planeWidgetY.TextureInterpolateOff() self.planeWidgetY.SetResliceInterpolate(0) self.planeWidgetZ = vtk.vtkImagePlaneWidget() self.planeWidgetZ.DisplayTextOn() self.planeWidgetZ.SetInput(self.image_array.GetOutput()) self.planeWidgetZ.SetPlaneOrientationToZAxes() self.planeWidgetZ.SetSliceIndex(z_index) self.planeWidgetZ.SetPicker(picker) self.planeWidgetZ.SetKeyPressActivationValue("z") self.planeWidgetZ.SetLookupTable( self.planeWidgetX.GetLookupTable()) self.planeWidgetZ.TextureInterpolateOff() self.planeWidgetZ.SetResliceInterpolate(0) self.current_widget = self.planeWidgetZ self.mode_widget = self.planeWidgetZ self.index_selector.set_emit(False) self.index_selector.setMinValue(zMin) self.index_selector.setMaxValue(zMax, False) self.index_selector.setTickInterval((zMax - zMin) / 10) self.index_selector.setRange(zMax, False) self.index_selector.setValue(z_index) self.index_selector.setLabel('Z axis') self.index_selector.reset_scale_toggle() self.index_selector.set_emit(True) # create scalar bar for display of intensity range self.scalar_bar = vtk.vtkScalarBarActor() self.scalar_bar.SetLookupTable(self.lut) self.scalar_bar.SetOrientationToVertical() self.scalar_bar.SetWidth(0.1) self.scalar_bar.SetHeight(0.8) self.scalar_bar.SetTitle("Intensity") self.scalar_bar.GetPositionCoordinate( ).SetCoordinateSystemToNormalizedViewport() self.scalar_bar.GetPositionCoordinate().SetValue(0.01, 0.1) # Create the RenderWindow and Renderer self.ren = vtk.vtkRenderer() self.renwin.AddRenderer(self.ren) # Add the outline actor to the renderer, set the background color and size if self.warped_surface: self.ren.AddActor(warp_actor) self.ren.AddActor(outlineActor) self.ren.SetBackground(0.1, 0.1, 0.2) self.ren.AddActor2D(self.scalar_bar) # Create a text property for cube axes tprop = vtk.vtkTextProperty() tprop.SetColor(1, 1, 1) tprop.ShadowOn() # Create a vtkCubeAxesActor2D. Use the outer edges of the bounding box to # draw the axes. Add the actor to the renderer. self.axes = vtk.vtkCubeAxesActor2D() if self.warped_surface: if zMin < 0.0 and zMax > 0.0: zLoc = 0.0 else: zLoc = zMin self.axes.SetBounds(xMin, xMax, yMin, yMax, zLoc, zLoc) self.axes.SetZLabel(" ") else: self.axes.SetInput(self.image_array.GetOutput()) self.axes.SetZLabel("Z") self.axes.SetCamera(self.ren.GetActiveCamera()) self.axes.SetLabelFormat("%6.4g") self.axes.SetFlyModeToOuterEdges() self.axes.SetFontFactor(0.8) self.axes.SetAxisTitleTextProperty(tprop) self.axes.SetAxisLabelTextProperty(tprop) self.axes.SetXLabel("X") self.axes.SetYLabel("Y") self.ren.AddProp(self.axes) # Set the interactor for the widgets if not self.warped_surface: self.planeWidgetX.SetInteractor(self.inter) self.planeWidgetX.On() self.planeWidgetY.SetInteractor(self.inter) self.planeWidgetY.On() self.planeWidgetZ.SetInteractor(self.inter) self.planeWidgetZ.On() self.initialize_camera()