def main(argv): if len(argv) < 2: print "usage:", argv[0], " data.vtk" exit(1) data_fn = argv[1] reader = vtk.vtkStructuredPointsReader() reader.SetFileName(data_fn) reader.Update() data = reader.GetOutput() updateColorOpacity() # composite function (using ray tracing) compositeFunction = vtk.vtkVolumeRayCastMIPFunction() volumeMapper = vtk.vtkVolumeRayCastMapper() volumeMapper.SetVolumeRayCastFunction(compositeFunction) volumeMapper.SetInput(data) # make the volume #volume = vtk.vtkVolume() global volume volume.SetMapper(volumeMapper) volume.SetProperty(volumeProperty) # renderer renderer = vtk.vtkRenderer() renderWin = vtk.vtkRenderWindow() renderWin.AddRenderer(renderer) renderInteractor = vtk.vtkRenderWindowInteractor() renderInteractor.SetRenderWindow(renderWin) renderer.AddVolume(volume) renderer.SetBackground(0, 0, 0) renderWin.SetSize(400, 400) renderInteractor.Initialize() renderWin.Render() renderInteractor.Start()
def main(argv): if len(argv) < 2: print "usage:",argv[0]," data.vtk" exit(1) data_fn = argv[1] reader = vtk.vtkStructuredPointsReader() reader.SetFileName(data_fn) reader.Update() data = reader.GetOutput() updateColorOpacity() # composite function (using ray tracing) compositeFunction = vtk.vtkVolumeRayCastMIPFunction() volumeMapper = vtk.vtkVolumeRayCastMapper() volumeMapper.SetVolumeRayCastFunction(compositeFunction) volumeMapper.SetInput(data) # make the volume #volume = vtk.vtkVolume() global volume volume.SetMapper(volumeMapper) volume.SetProperty(volumeProperty) # renderer renderer = vtk.vtkRenderer() renderWin = vtk.vtkRenderWindow() renderWin.AddRenderer(renderer) renderInteractor = vtk.vtkRenderWindowInteractor() renderInteractor.SetRenderWindow(renderWin) renderer.AddVolume(volume) renderer.SetBackground(0,0,0) renderWin.SetSize(400, 400) renderInteractor.Initialize() renderWin.Render() renderInteractor.Start()
def _create_pipeline(self): # setup our pipeline self._otf = vtk.vtkPiecewiseFunction() self._ctf = vtk.vtkColorTransferFunction() self._volume_property = vtk.vtkVolumeProperty() self._volume_property.SetScalarOpacity(self._otf) self._volume_property.SetColor(self._ctf) self._volume_property.ShadeOn() self._volume_property.SetAmbient(0.1) self._volume_property.SetDiffuse(0.7) self._volume_property.SetSpecular(0.2) self._volume_property.SetSpecularPower(10) self._volume_raycast_function = vtk.vtkVolumeRayCastMIPFunction() self._volume_mapper = vtk.vtkVolumeRayCastMapper() # can also used FixedPoint, but then we have to use: # SetBlendModeToMaximumIntensity() and not SetVolumeRayCastFunction #self._volume_mapper = vtk.vtkFixedPointVolumeRayCastMapper() self._volume_mapper.SetVolumeRayCastFunction( self._volume_raycast_function) module_utils.setup_vtk_object_progress(self, self._volume_mapper, 'Preparing render.') self._volume = vtk.vtkVolume() self._volume.SetProperty(self._volume_property) self._volume.SetMapper(self._volume_mapper)
def save_vtk_image(images, dst, i): image_import = vtk.vtkImageImport() image_import.CopyImportVoidPointer(images.tostring(), len(images.tostring())) image_import.SetDataScalarTypeToUnsignedChar() image_import.SetNumberOfScalarComponents(1) image_import.SetDataExtent(0, images.shape[2] - 1, 0, images.shape[1] - 1, 0, images.shape[0] - 1) image_import.SetWholeExtent(0, images.shape[2] - 1, 0, images.shape[1] - 1, 0, images.shape[0] - 1) volume = vtk.vtkVolume() volume_mapper = vtk.vtkVolumeRayCastMapper() alpha_channel_func = vtk.vtkPiecewiseFunction() alpha_channel_func.AddPoint(0, 0.0) # alpha_channel_func.AddPoint(64, 0.3) # alpha_channel_func.AddPoint(128, 0.5) alpha_channel_func.AddPoint(100, 1.0) alpha_channel_func.ClampingOn() color_func = vtk.vtkPiecewiseFunction() color_func.AddPoint(5, 0.3) color_func.AddPoint(25, 0.5) color_func.AddPoint(125, 0.7) color_func.AddPoint(255, 1.0) volume_property = vtk.vtkVolumeProperty() volume_property.SetColor(color_func) volume_property.SetInterpolationTypeToLinear() volume_property.SetScalarOpacity(alpha_channel_func) volume.SetProperty(volume_property) volume_ray_cast_func = vtk.vtkVolumeRayCastMIPFunction() volume_mapper.SetInputConnection(image_import.GetOutputPort()) volume_mapper.SetVolumeRayCastFunction(volume_ray_cast_func) # volume_mapper.SetSampleDistance(1) # volume_mapper.SetAutoAdjustSampleDistances(0) # volume_mapper.SetImageSampleDistance(1) volume.SetMapper(volume_mapper) ren = vtk.vtkRenderer() ren.AddVolume(volume) ren.SetBackground(0, 0, 0) renWin = vtk.vtkRenderWindow() renWin.SetSize(1024, 1024) renWin.AddRenderer(ren) renWin.Render() window_2_image = vtk.vtkWindowToImageFilter() window_2_image.SetInput(renWin) window_2_image.Update() png_writer = vtk.vtkPNGWriter() png_writer.SetFileName(dst + '%05d' % (i) + '.png') png_writer.SetInput(window_2_image.GetOutput()) png_writer.Write()
def SetTypeRaycasting(self): if self.volume_mapper.IsA("vtkFixedPointVolumeRayCastMapper"): if self.config.get('MIP', False): self.volume_mapper.SetBlendModeToMaximumIntensity() else: self.volume_mapper.SetBlendModeToComposite() else: if self.config.get('MIP', False): raycasting_function = vtk.vtkVolumeRayCastMIPFunction() else: raycasting_function = vtk.vtkVolumeRayCastCompositeFunction() raycasting_function.SetCompositeMethodToInterpolateFirst() self.volume_mapper.SetVolumeRayCastFunction(raycasting_function)
def main(argv): if len(argv) < 2: print "usage:",argv[0]," data.nrrd data.cmap" exit(1) data_fn = argv[1] cmap_fn = argv[2] reader = vtk.vtkPNrrdReader() reader.SetFileName(data_fn) reader.Update() data = reader.GetOutput() # opacity function opacityFunction = vtk.vtkPiecewiseFunction() # color function colorFunction = vtk.vtkColorTransferFunction() cmap = open(cmap_fn, 'r') for line in cmap.readlines(): parts = line.split() value = float(parts[0]) r = float(parts[1]) g = float(parts[2]) b = float(parts[3]) a = float(parts[4]) opacityFunction.AddPoint(value, a) colorFunction.AddRGBPoint(value, r, g, b) # volume setup: volumeProperty = vtk.vtkVolumeProperty() volumeProperty.SetColor(colorFunction) volumeProperty.SetScalarOpacity(opacityFunction) # composite function (using ray tracing) compositeFunction = vtk.vtkVolumeRayCastMIPFunction() volumeMapper = vtk.vtkVolumeRayCastMapper() volumeMapper.SetVolumeRayCastFunction(compositeFunction) volumeMapper.SetInput(data) # make the volume volume = vtk.vtkVolume() volume.SetMapper(volumeMapper) volume.SetProperty(volumeProperty) # renderer renderer = vtk.vtkRenderer() renderWin = vtk.vtkRenderWindow() renderWin.AddRenderer(renderer) renderInteractor = vtk.vtkRenderWindowInteractor() renderInteractor.SetRenderWindow(renderWin) renderer.AddVolume(volume) renderer.SetBackground(0,0,0) renderWin.SetSize(400, 400) renderInteractor.Initialize() renderWin.Render() renderInteractor.Start()
def save_vtk_image(images, dst, i): image_import = vtk.vtkImageImport() image_import.CopyImportVoidPointer(images.tostring(), len(images.tostring())) image_import.SetDataScalarTypeToUnsignedChar() image_import.SetNumberOfScalarComponents(1) image_import.SetDataExtent(0, images.shape[2] - 1, 0, images.shape[1] - 1, 0, images.shape[0] - 1) image_import.SetWholeExtent(0, images.shape[2] - 1, 0, images.shape[1] - 1, 0, images.shape[0] - 1) volume = vtk.vtkVolume() volume_mapper = vtk.vtkVolumeRayCastMapper() alpha_channel_func = vtk.vtkPiecewiseFunction() alpha_channel_func.AddPoint(0, 0.0) # alpha_channel_func.AddPoint(64, 0.3) # alpha_channel_func.AddPoint(128, 0.5) alpha_channel_func.AddPoint(100, 1.0) alpha_channel_func.ClampingOn() color_func = vtk.vtkPiecewiseFunction() color_func.AddPoint(5, 0.3) color_func.AddPoint(25, 0.5) color_func.AddPoint(125, 0.7) color_func.AddPoint(255, 1.0) volume_property = vtk.vtkVolumeProperty() volume_property.SetColor(color_func) volume_property.SetInterpolationTypeToLinear() volume_property.SetScalarOpacity(alpha_channel_func) volume.SetProperty(volume_property) volume_ray_cast_func = vtk.vtkVolumeRayCastMIPFunction() volume_mapper.SetInputConnection(image_import.GetOutputPort()) volume_mapper.SetVolumeRayCastFunction(volume_ray_cast_func) # volume_mapper.SetSampleDistance(1) # volume_mapper.SetAutoAdjustSampleDistances(0) # volume_mapper.SetImageSampleDistance(1) volume.SetMapper(volume_mapper) ren = vtk.vtkRenderer() ren.AddVolume(volume) ren.SetBackground(0, 0, 0) renWin = vtk.vtkRenderWindow() renWin.SetSize(1024, 1024) renWin.AddRenderer(ren) renWin.Render() window_2_image = vtk.vtkWindowToImageFilter() window_2_image.SetInput(renWin) window_2_image.Update() png_writer = vtk.vtkPNGWriter() png_writer.SetFileName(dst + '%05d'%(i) + '.png') png_writer.SetInput(window_2_image.GetOutput()) png_writer.Write()
def SetTypeRaycasting(self): if self.volume_mapper.IsA("vtkFixedPointVolumeRayCastMapper") or self.volume_mapper.IsA("vtkGPUVolumeRayCastMapper"): if self.config.get('MIP', False): self.volume_mapper.SetBlendModeToMaximumIntensity() else: self.volume_mapper.SetBlendModeToComposite() else: if self.config.get('MIP', False): raycasting_function = vtk.vtkVolumeRayCastMIPFunction() else: raycasting_function = vtk.vtkVolumeRayCastCompositeFunction() raycasting_function.SetCompositeMethodToInterpolateFirst() if ses.Session().rendering == '0': self.volume_mapper.SetVolumeRayCastFunction(raycasting_function)
def volumeProperty(reader, opacityTransferFunction, colorTransferFunction): volumeProperty = vtk.vtkVolumeProperty() volumeProperty.SetColor(colorTransferFunction) volumeProperty.SetScalarOpacity(opacityTransferFunction) volumeProperty.ShadeOn() volumeProperty.SetSpecular(0.3) volumeProperty.SetInterpolationTypeToLinear() MIPFunction = vtk.vtkVolumeRayCastMIPFunction() volumeMapper = vtk.vtkVolumeRayCastMapper() volumeMapper.SetSampleDistance(1.0) volumeMapper.SetInput(reader.GetOutput()) volumeMapper.SetVolumeRayCastFunction(MIPFunction) volume = vtk.vtkVolume() volume.SetMapper(volumeMapper) volume.SetProperty(volumeProperty) volume.RotateX(-90) return volume
def mip_rendering(data, opacity, samp_dist=1.0, renderer=None): vmin,vmax = opacity.get_range() vrange = float(vtk.VTK_UNSIGNED_SHORT_MAX-1) crg0 = vrange/3.0 crg1 = vrange*2.0/3.0 scale = (crg1-crg0) / (vmax-vmin) shift = -vmin + crg0/scale clipped = data + shift clipped *= scale np.clip(clipped.data, 0, vrange, out=clipped.data) image = RegData_to_vtkImageData(clipped, dtype=np.uint16) ctf = opacity.get_vtkColorTransferFunction(scale, shift) otf = opacity.get_vtkPiecewiseFunction(scale, shift) volume = vtk.vtkVolume() vol_prop = vtk.vtkVolumeProperty() volume.SetProperty(vol_prop) vol_prop.SetColor(ctf) vol_prop.SetScalarOpacity(otf) vol_prop.SetInterpolationTypeToLinear() vol_prop.ShadeOff() mipf = vtk.vtkVolumeRayCastMIPFunction() mipf.SetMaximizeMethodToScalarValue() vol_map = vtk.vtkVolumeRayCastMapper() vol_map.SetVolumeRayCastFunction(mipf) volume.SetMapper(vol_map) vtkConnectDataInput(image, vol_map) vol_map.SetSampleDistance(samp_dist*np.min(data.dx())) if renderer is not None: renderer.AddVolume(volume) # ctfbar = opacity.get_vtkLookupTable() return volume, ctfbar
color_func.AddPoint(125, 0.7) color_func.AddPoint(255, 1.0) color_func.ClampingOff() color_func1 = vtk.vtkColorTransferFunction() color_func1.AddRGBPoint(0.0, 0.0, 0.0, 0.0) color_func1.AddRGBPoint(5.0, 0.0, 0.3, 0.0) color_func1.AddRGBPoint(25.0, 0.0, 0.5, 0.0) color_func1.AddRGBPoint(125.0, 0.0, 0.7, 0.0) color_func1.AddRGBPoint(255.0, 0.0, 1.0, 0.0) volume_property = vtk.vtkVolumeProperty() volume_property.SetColor(color_func) volume_property.SetScalarOpacity(alpha_channel_func) volume_property.ShadeOff() volume_property.SetInterpolationTypeToLinear() volume.SetProperty(volume_property) volume_ray_cast_func = vtk.vtkVolumeRayCastMIPFunction() volume_mapper.SetInputConnection(image_import.GetOutputPort()) volume_mapper.SetVolumeRayCastFunction(volume_ray_cast_func) volume.SetMapper(volume_mapper) ren = vtk.vtkRenderer() ren.AddVolume(volume) ren.SetBackground(0, 0, 0) renWin = vtk.vtkRenderWindow() iren = vtk.vtkRenderWindowInteractor() iren.SetRenderWindow(renWin) renWin.SetSize(300, 300) renWin.AddRenderer(ren) renWin.Render() window_2_image = vtk.vtkWindowToImageFilter() window_2_image.SetInput(renWin)
def volume_render(field, outfile, maxopacity=1.0, cmap='bone', size=600, elevation=45, azimuth=45, bkg=(0.0, 0.0, 0.0), opacitycut=0.35, offscreen=False, rayfunction='smart'): """ Uses vtk to make render an image of a field, with control over the camera angle and colormap. Input Parameters ---------------- field : np.ndarray 3D array of the field to render. outfile : string The save name of the image. maxopacity : Float Default is 1.0 cmap : matplotlib colormap string Passed to cmap2colorfunc. Default is bone. size : 2-element list-like of ints or Int The size of the final rendered image. elevation : Numeric The elevation of the camera angle, in degrees. Default is 45 azimuth : Numeric The azimuth of the camera angle, in degrees. Default is 45 bkg : Tuple of floats 3-element tuple of floats on [0,1] of the background image color. Default is (0., 0., 0.). """ sh = field.shape dataImporter = vtk.vtkImageImport() dataImporter.SetDataScalarTypeToUnsignedChar() data_string = field.tostring() dataImporter.SetNumberOfScalarComponents(1) dataImporter.CopyImportVoidPointer(data_string, len(data_string)) dataImporter.SetDataExtent(0, sh[2] - 1, 0, sh[1] - 1, 0, sh[0] - 1) dataImporter.SetWholeExtent(0, sh[2] - 1, 0, sh[1] - 1, 0, sh[0] - 1) alphaChannelFunc = vtk.vtkPiecewiseFunction() alphaChannelFunc.AddPoint(0, 0.0) alphaChannelFunc.AddPoint(int(255 * opacitycut), maxopacity) volumeProperty = vtk.vtkVolumeProperty() colorFunc = cmap2colorfunc(cmap) volumeProperty.SetColor(colorFunc) volumeProperty.SetScalarOpacity(alphaChannelFunc) volumeMapper = vtk.vtkVolumeRayCastMapper() if rayfunction == 'mip': comp = vtk.vtkVolumeRayCastMIPFunction() comp.SetMaximizeMethodToOpacity() elif rayfunction == 'avg': comp = vtk.vtkVolumeRayCastCompositeFunction() elif rayfunction == 'iso': comp = vtk.vtkVolumeRayCastIsosurfaceFunction() comp.SetIsoValue(maxopacity / 2) else: comp = vtk.vtkVolumeRayCastIsosurfaceFunction() volumeMapper.SetSampleDistance(0.1) volumeMapper.SetVolumeRayCastFunction(comp) if rayfunction == 'smart': volumeMapper = vtk.vtkSmartVolumeMapper() volumeMapper.SetInputConnection(dataImporter.GetOutputPort()) volume = vtk.vtkVolume() volume.SetMapper(volumeMapper) volume.SetProperty(volumeProperty) light = vtk.vtkLight() light.SetLightType(vtk.VTK_LIGHT_TYPE_HEADLIGHT) light.SetIntensity(5.5) light.SwitchOn() renderer = vtk.vtkRenderer() renderWin = vtk.vtkRenderWindow() renderWin.AddRenderer(renderer) renderWin.SetOffScreenRendering(1) if not hasattr(size, '__iter__'): size = (size, size) renderer.AddVolume(volume) renderer.AddLight(light) renderer.SetBackground(*bkg) renderWin.SetSize(*size) if offscreen: renderWin.SetOffScreenRendering(1) def exitCheck(obj, event): if obj.GetEventPending() != 0: obj.SetAbortRender(1) renderWin.AddObserver("AbortCheckEvent", exitCheck) renderInteractor = vtk.vtkRenderWindowInteractor() renderInteractor.Initialize() renderWin.Render() renderInteractor.Start() #writer = vtk.vtkFFMPEGWriter() #writer.SetQuality(2) #writer.SetRate(24) #w2i = vtk.vtkWindowToImageFilter() #w2i.SetInput(renderWin) #writer.SetInputConnection(w2i.GetOutputPort()) #writer.SetFileName('movie.avi') #writer.Start() #writer.End() writer = vtk.vtkPNGWriter() w2i = vtk.vtkWindowToImageFilter() w2i.SetInput(renderWin) writer.SetInputConnection(w2i.GetOutputPort()) renderWin.Render() ac = renderer.GetActiveCamera() ac.Elevation(elevation) ac.Azimuth(azimuth) renderer.ResetCameraClippingRange() renderWin.Render() w2i.Modified() writer.SetFileName(outfile) writer.Write()
alpha_channel_func.AddPoint(100, 0.7) alpha_channel_func.AddPoint(255, 1.0) alpha_channel_func.ClampingOn() color_func = vtk.vtkPiecewiseFunction() color_func.AddPoint(5, 0.3) color_func.AddPoint(50, 0.5) color_func.AddPoint(100, 0.7) color_func.AddPoint(255, 1.0) color_func.ClampingOff() volume_property = vtk.vtkVolumeProperty() volume_property.SetColor(color_func) volume_property.SetScalarOpacity(alpha_channel_func) volume_property.ShadeOff() volume_property.SetInterpolationTypeToLinear() volume.SetProperty(volume_property) volume_ray_cast_func = vtk.vtkVolumeRayCastMIPFunction() volume_mapper.SetInputConnection(image_import.GetOutputPort()) volume_mapper.SetVolumeRayCastFunction(volume_ray_cast_func) volume.SetMapper(volume_mapper) # camera1 = vtk.vtkCamera() ren = vtk.vtkRenderer() # camera2 = ren.GetActiveCamera() # camera2.SetPosition(128, 128, -1000) # camera2.SetFocalPoint(128, 128, 300) # camera2.SetViewAngle(30.0) # camera2.SetClippingRange((-10, 300)) # camera2.ParallelProjectionOn()
import vtk objectPath = r"./assets/torso.vtk" reader = vtk.vtkStructuredPointsReader() reader.SetFileName(objectPath) reader.Update() ## Create a default volume raycasting MIP function to use in the volume mapper raycasting_function = vtk.vtkVolumeRayCastMIPFunction() volumeMapper = vtk.vtkVolumeRayCastMapper() volumeMapper.SetVolumeRayCastFunction(raycasting_function) volumeMapper.SetInputConnection(reader.GetOutputPort()) ## Use vtkVolume instead of vtkActor volume = vtk.vtkVolume() volume.SetMapper(volumeMapper) # Create a rendering window and renderer renderer = vtk.vtkRenderer() renderWindow = vtk.vtkRenderWindow() renderWindow.AddRenderer(renderer) # Create a renderwindowinteractor interactor = vtk.vtkRenderWindowInteractor() interactor.SetRenderWindow(renderWindow)
alphaChannelFunc = vtk.vtkPiecewiseFunction() alphaChannelFunc.AddPoint(0, 0.0) alphaChannelFunc.AddPoint(100, 1.0) colorFunc = vtk.vtkPiecewiseFunction() colorFunc.AddPoint(5, 0.3) colorFunc.AddPoint(25, 0.5) colorFunc.AddPoint(125, 0.7) colorFunc.AddPoint(255, 1.0) vp = vtk.vtkVolumeProperty() vp.SetColor(colorFunc) vp.SetScalarOpacity(alphaChannelFunc) cf = vtk.vtkVolumeRayCastMIPFunction() vM = vtk.vtkVolumeRayCastMapper() vM.SetInputConnection(data_importer.GetOutputPort()) vM.SetVolumeRayCastFunction(cf) volume = vtk.vtkVolume() volume.SetMapper(vM) volume.SetProperty(vp) ren = vtk.vtkRenderer() camera1 = ren.GetActiveCamera() #print camera2.GetPosition() #print camera2.GetFocalPoint() #print camera2.GetViewUp() #print camera2.GetViewAngle() #print camera2.GetClippingRange() #print camera2.GetEyeAngle()
def plot(N, field, prefix="vtkrender", animate=True, write=True): field = numpy.tanh(field / field.mean() / 8) maxfield = field.max() if maxfield > 5: maxfield = 5 field = field * 255 / maxfield field = (field > 255) * 255 + (field <= 255) * field field = field.astype("uint8") timeSeries = True mip = False minopacity = 0.001 maxopacity = 0.1 dataImporter = vtk.vtkImageImport() dataImporter.SetDataScalarTypeToUnsignedChar() data_string = rho.tostring() dataImporter.SetNumberOfScalarComponents(1) dataImporter.CopyImportVoidPointer(data_string, len(data_string)) dataImporter.SetDataExtent(0, N - 1, 0, N - 1, 0, N - 1) dataImporter.SetWholeExtent(0, N - 1, 0, N - 1, 0, N - 1) alphaChannelFunc = vtk.vtkPiecewiseFunction() alphaChannelFunc.AddPoint(0, maxopacity) alphaChannelFunc.AddPoint(255, minopacity) volumeProperty = vtk.vtkVolumeProperty() colorFunc = vtk.vtkColorTransferFunction() colorFunc.AddRGBPoint(0, 0.0, 0.0, 0.0) colorFunc.AddRGBPoint(255, 1.0, 1.0, 1.0) volumeProperty.SetColor(colorFunc) volumeProperty.SetScalarOpacity(alphaChannelFunc) volumeMapper = vtk.vtkVolumeRayCastMapper() if mip: mipFunction = vtk.vtkVolumeRayCastMIPFunction() mipFunction.SetMaximizeMethodToOpacity() volumeMapper.SetVolumeRayCastFunction(mipFunction) else: compositeFunction = vtk.vtkVolumeRayCastCompositeFunction() volumeMapper.SetVolumeRayCastFunction(compositeFunction) volumeMapper.SetInputConnection(dataImporter.GetOutputPort()) volume = vtk.vtkVolume() volume.SetMapper(volumeMapper) volume.SetProperty(volumeProperty) renderer = vtk.vtkRenderer() renderWin = vtk.vtkRenderWindow() renderWin.AddRenderer(renderer) renderer.AddVolume(volume) renderer.SetBackground(1.0, 1.0, 1.0) # renderer.SetBackground(0.6,0.6,0.6) renderWin.SetSize(400, 400) renderWin.AddObserver("AbortCheckEvent", exitCheck) if not animate: renderInteractor.Initialize() renderWin.Render() if not animate: renderInteractor.Start() if animate: writer = vtk.vtkPNGWriter() w2i = vtk.vtkWindowToImageFilter() w2i.SetInput(renderWin) writer.SetInputConnection(w2i.GetOutputPort()) renderWin.Render() ac = renderer.GetActiveCamera() ac.Elevation(20) step = 1 current = 0 for i in range(0, 360, step): ac.Azimuth(step) # ac.Elevation(1*((-1)**(int(i/90)))) renderer.ResetCameraClippingRange() renderWin.Render() w2i.Modified() if write: writer.SetFileName("%s%04d.gif" % (prefix, current)) writer.Write() current += 1 writer.End()
dataImporter.SetWholeExtent(0, N-1, 0, N-1, 0, N-1) alphaChannelFunc = vtk.vtkPiecewiseFunction() alphaChannelFunc.AddPoint(0, 0.01) alphaChannelFunc.AddPoint(255, maxopacity) volumeProperty = vtk.vtkVolumeProperty() colorFunc = vtk.vtkColorTransferFunction() colorFunc.AddRGBPoint(0, 1.0, 1.0, 1.0) colorFunc.AddRGBPoint(255, 0.0, 0.0, 0.0) volumeProperty.SetColor(colorFunc) volumeProperty.SetScalarOpacity(alphaChannelFunc) volumeMapper = vtk.vtkVolumeRayCastMapper() if mip: mipFunction = vtk.vtkVolumeRayCastMIPFunction() mipFunction.SetMaximizeMethodToOpacity() volumeMapper.SetVolumeRayCastFunction(mipFunction) else: compositeFunction = vtk.vtkVolumeRayCastCompositeFunction() volumeMapper.SetVolumeRayCastFunction(compositeFunction) volumeMapper.SetInputConnection(dataImporter.GetOutputPort()) volume = vtk.vtkVolume() volume.SetMapper(volumeMapper) volume.SetProperty(volumeProperty) renderer = vtk.vtkRenderer() renderWin = vtk.vtkRenderWindow() renderWin.AddRenderer(renderer)
def __init__(self, master): global _vtk_lib_present if not _vtk_lib_present: raise ValueError("no VTK") # Window creation tk.Frame.__init__(self, master) self.columnconfigure(0, weight=1) self.rowconfigure(0, weight=1) # Renderer and associated widget self.im_ref = None self._renWidget = vtkTkRenderWidget(self) self._ren = vtk.vtkRenderer() self._renWidget.GetRenderWindow().AddRenderer(self._ren) self._renWidget.grid(row=0, column=0, sticky=tk.E+tk.W+tk.N+tk.S) # Transfer functions and volume display options and properties self.vtk_im = vtkImageImport() self.vtk_im.SetDataScalarType(VTK_UNSIGNED_CHAR) self.im_flipy = vtk.vtkImageFlip() self.im_flipy.SetFilteredAxis(1) self.im_flipy.SetInputConnection(self.vtk_im.GetOutputPort()); self.im_flipz = vtk.vtkImageFlip() self.im_flipz.SetFilteredAxis(2) self.im_flipz.SetInputConnection(self.im_flipy.GetOutputPort()); self.opaTF = vtk.vtkPiecewiseFunction() self.colTF = vtk.vtkColorTransferFunction() self.volProp = vtk.vtkVolumeProperty() self.volProp.SetColor(self.colTF) self.volProp.SetScalarOpacity(self.opaTF) self.volProp.ShadeOn() self.volProp.SetInterpolationTypeToLinear() self.compoFun = vtk.vtkVolumeRayCastCompositeFunction() self.isosfFun = vtk.vtkVolumeRayCastIsosurfaceFunction() self.isosfFun.SetIsoValue(0) self.mipFun = vtk.vtkVolumeRayCastMIPFunction() self.volMap = vtk.vtkVolumeRayCastMapper() self.volMap.SetVolumeRayCastFunction(self.compoFun) self.volMap.SetInputConnection(self.im_flipz.GetOutputPort()) self.volume = vtk.vtkVolume() self.volume.SetMapper(self.volMap) self.volume.SetProperty(self.volProp) self.outlineData = vtk.vtkOutlineFilter() self.outlineData.SetInputConnection(self.im_flipz.GetOutputPort()) self.mapOutline = vtk.vtkPolyDataMapper() self.mapOutline.SetInputConnection(self.outlineData.GetOutputPort()) self.outline = vtk.vtkActor() self.outline.SetMapper(self.mapOutline) self.outline.GetProperty().SetColor(1, 1, 1) self._ren.AddVolume(self.volume) self._ren.AddActor(self.outline) self._ren.SetBackground(116/255.0,214/255.0,220/255.0) # Control widget self.controlbar = ttk.Frame(self) self.controlbar.grid(row=0, column=1, sticky=tk.E+tk.W+tk.N+tk.S) self.drawControlBar() self.controlbar.grid_remove() self.controlbar.state = "hidden" self.master = master # Creates the info status bar. statusbar = ttk.Frame(self) statusbar.columnconfigure(0, weight=1) statusbar.grid(row=1, column=0, columnspan=2, sticky=tk.E+tk.W) self.infos = [] for i in range(3): v = tk.StringVar(self) ttk.Label(statusbar, anchor=tk.W, textvariable=v).grid(row=0, column=i, sticky=tk.E+tk.W) self.infos.append(v) self.infos[2].set("Hit Tab for control <-") # Events bindings master.bind("<KeyPress-Tab>", self.displayControlEvent)