def __init__(self, module_manager): SimpleVTKClassModuleBase.__init__( self, module_manager, vtk.vtkImageWrapPad(), 'Processing.', ('vtkImageData',), ('vtkImageData',), replaceDoc=True, inputFunctions=None, outputFunctions=None)
def __init__(self, module_manager): SimpleVTKClassModuleBase.__init__(self, module_manager, vtk.vtkImageWrapPad(), 'Processing.', ('vtkImageData', ), ('vtkImageData', ), replaceDoc=True, inputFunctions=None, outputFunctions=None)
#!/usr/bin/env python import vtk from vtk.test import Testing from vtk.util.misc import vtkGetDataRoot VTK_DATA_ROOT = vtkGetDataRoot() # Make an image larger by repeating the data. Tile. # Image pipeline reader = vtk.vtkImageReader() reader.ReleaseDataFlagOff() reader.SetDataByteOrderToLittleEndian() reader.SetDataExtent(0, 63, 0, 63, 1, 93) reader.SetDataSpacing(3.2, 3.2, 1.5) reader.SetFilePrefix("" + str(VTK_DATA_ROOT) + "/Data/headsq/quarter") reader.SetDataMask(0x7fff) pad = vtk.vtkImageWrapPad() pad.SetInputConnection(reader.GetOutputPort()) pad.SetOutputWholeExtent(-100, 155, -100, 170, 0, 92) pad.ReleaseDataFlagOff() viewer = vtk.vtkImageViewer() viewer.SetInputConnection(pad.GetOutputPort()) viewer.SetZSlice(22) viewer.SetColorWindow(2000) viewer.SetColorLevel(1000) viewer.GetActor2D().SetDisplayPosition(150, 150) viewer.Render() # --- end of script --
#!/usr/bin/env python import vtk import sys from vtk.util.misc import vtkGetDataRoot VTK_DATA_ROOT = vtkGetDataRoot() # Image pipeline size=400 image1 = vtk.vtkImageCanvasSource2D() image1.SetNumberOfScalarComponents(3) image1.SetScalarTypeToUnsignedChar() image1.SetExtent(0,size,0,size,0,0) image1.SetDrawColor(255,255,0) image1.FillBox(0,size,0,size) pad1 = vtk.vtkImageWrapPad() pad1.SetInputConnection(image1.GetOutputPort()) pad1.SetOutputWholeExtent(0,size,0,size,0,10) pad1.Update() image2 = vtk.vtkImageCanvasSource2D() image2.SetNumberOfScalarComponents(3) image2.SetScalarTypeToUnsignedChar() image2.SetExtent(0,size,0,size,0,0) image2.SetDrawColor(0,255,255) image2.FillBox(0,size,0,size) pad2 = vtk.vtkImageWrapPad() pad2.SetInputConnection(image2.GetOutputPort()) pad2.SetOutputWholeExtent(0,size,0,size,0,10) pad2.Update() checkers = vtk.vtkImageCheckerboard() checkers.SetInput1Data(pad1.GetOutput())
#!/usr/bin/env python import vtk from vtk.test import Testing from vtk.util.misc import vtkGetDataRoot VTK_DATA_ROOT = vtkGetDataRoot() # Make an image larger by repeating the data. Tile. # Image pipeline reader = vtk.vtkImageReader() reader.ReleaseDataFlagOff() reader.SetDataByteOrderToLittleEndian() reader.SetDataExtent(0,63,0,63,1,93) reader.SetDataSpacing(3.2,3.2,1.5) reader.SetFilePrefix("" + str(VTK_DATA_ROOT) + "/Data/headsq/quarter") reader.SetDataMask(0x7fff) pad = vtk.vtkImageWrapPad() pad.SetInputConnection(reader.GetOutputPort()) pad.SetOutputWholeExtent(-100,155,-100,170,0,92) pad.ReleaseDataFlagOff() viewer = vtk.vtkImageViewer() viewer.SetInputConnection(pad.GetOutputPort()) viewer.SetZSlice(22) viewer.SetColorWindow(2000) viewer.SetColorLevel(1000) viewer.GetActor2D().SetDisplayPosition(150,150) viewer.Render() # --- end of script --
def read(self, variables, timestep): #obtain temporal information rawTimes = self._reader.GetOutputInformation(0).Get(vtk.vtkStreamingDemandDrivenPipeline.TIME_STEPS()) tunits = self._reader.GetTimeUnits() converters = attrib_to_converters(tunits) # pick particular timestep if timestep is not None and rawTimes is not None: utcconverter = attrib_to_converters("days since 1970-0-0") abs_request_time = utcconverter[0](float(timestep)/(1000*60*60*24)) local_request_time = converters[5](abs_request_time) # For now clamp to time range if float(local_request_time) < rawTimes[0]: local_request_time = rawTimes[0] elif float(local_request_time) > rawTimes[-1]: local_request_time = rawTimes[-1] sddp = self._reader.GetExecutive() sddp.SetUpdateTimeStep(0, local_request_time) # enable only chosen array(s) narrays = self._reader.GetNumberOfVariableArrays() for x in range(0,narrays): arrayname = self._reader.GetVariableArrayName(x) if arrayname in variables: #cherrypy.log("Enable " + arrayname) self._reader.SetVariableArrayStatus(arrayname, 1) else: #cherrypy.log("Disable " + arrayname) self._reader.SetVariableArrayStatus(arrayname, 0) # wrap around to get the implicit cell extent = self._reader.GetOutputInformation(0).Get(vtk.vtkStreamingDemandDrivenPipeline.WHOLE_EXTENT()) pad = vtk.vtkImageWrapPad() self._reader.Update() data = self._reader.GetOutput() da = data.GetPointData().GetArray(0).GetName(); data.GetPointData().SetActiveScalars(da) pad.SetInputData(data) pad.SetOutputWholeExtent(extent[0], extent[1]+1, extent[2], extent[3], extent[4], extent[5]); # Convert to polydata sf = vtk.vtkDataSetSurfaceFilter() sf.SetInputConnection(pad.GetOutputPort()) # Error reading file? if not sf.GetOutput(): raise IOError("Unable to load data file: " + self.filename) # Convert to GeoJSON gw = vtk.vtkGeoJSONWriter() gw.SetInputConnection(sf.GetOutputPort()) gw.SetScalarFormat(2) gw.WriteToOutputStringOn() gw.Write() gj = str(gw.RegisterAndGetOutputString()).replace('\n','') return gj
def read(filename, vars, rqstTime): ''' Read a file or files from a directory given a wild-card expression ''' # @todo Reading a single file of netcdf cf convention now #cherrypy.log("vtkread " + filename + " " + vars + " " + str(time)) reader = vtk.vtkNetCDFCFReader() #get test data reader.SphericalCoordinatesOff() reader.SetOutputTypeToImage() reader.ReplaceFillValueWithNanOn() reader.SetFileName(filename) reader.UpdateInformation() #obtain temporal information rawTimes = reader.GetOutputInformation(0).Get(vtk.vtkStreamingDemandDrivenPipeline.TIME_STEPS()) tunits = reader.GetTimeUnits() converters = attrib_to_converters(tunits) # pick particular timestep if rqstTime is not None and rawTimes is not None: utcconverter = attrib_to_converters("days since 1970-0-0") abs_request_time = utcconverter[0](float(rqstTime)/(1000*60*60*24)) local_request_time = converters[5](abs_request_time) # For now clamp to time range if float(local_request_time) < rawTimes[0]: local_request_time = rawTimes[0] elif float(local_request_time) > rawTimes[-1]: local_request_time = rawTimes[-1] sddp = reader.GetExecutive() sddp.SetUpdateTimeStep(0, local_request_time) # enable only chosen array(s) narrays = reader.GetNumberOfVariableArrays() for x in range(0,narrays): arrayname = reader.GetVariableArrayName(x) if arrayname in vars: #cherrypy.log("Enable " + arrayname) reader.SetVariableArrayStatus(arrayname, 1) else: #cherrypy.log("Disable " + arrayname) reader.SetVariableArrayStatus(arrayname, 0) # wrap around to get the implicit cell extent = reader.GetOutputInformation(0).Get(vtk.vtkStreamingDemandDrivenPipeline.WHOLE_EXTENT()) pad = vtk.vtkImageWrapPad() reader.Update() data = reader.GetOutput() da = data.GetPointData().GetArray(0).GetName(); data.GetPointData().SetActiveScalars(da) pad.SetInputData(data) pad.SetOutputWholeExtent(extent[0], extent[1]+1, extent[2], extent[3], extent[4], extent[5]); # Convert to polydata sf = vtk.vtkDataSetSurfaceFilter() sf.SetInputConnection(pad.GetOutputPort()) # Error reading file? if not sf.GetOutput(): raise IOError("Unable to load data file: " + filename) # Convert to GeoJSON gw = vtk.vtkGeoJSONWriter() gw.SetInputConnection(sf.GetOutputPort()) gw.SetScalarFormat(2) gw.WriteToOutputStringOn() gw.Write() gj = str(gw.RegisterAndGetOutputString()).replace('\n','') return gj
def VTKConvolve(im,numret=0,k=5,clip=1,x=1,y=1,wrap=0,mirror=1,constant=None, kernel=None): if type(im) == np.ndarray: i = NumToVTKImage(im) else: i = im d = i.GetDimensions() e = i.GetExtent() dtest = np.sort(d) if sum(dtest[:2]) == 2: onedim=1 else: onedim = 0 if (d[0] == 1): oned = 1 elif (d[1] == 1): oned = 2 else: oned = 0 if x and not y: oned = 2 if y and not x: oned = 1 if onedim: oned = 1 if constant is not None: ip = vtk.vtkImageConstantPad() if d[0] > 1: x0,x1=-k,d[0]+k-1 else: x0,x1=0,0 if d[1] > 1: y0,y1=-k,d[1]+k-1 else: y0,y1=0,0 ip.SetOutputWholeExtent(x0,x1,y0,y1,0,0) ip.SetConstant(constant) ip.SetInputData(i) i = ip.GetOutput() ip.Update() elif mirror: ip = vtk.vtkImageMirrorPad() if d[0] > 1: x0,x1=-k,d[0]+k-1 else: x0,x1=0,0 if d[1] > 1: y0,y1=-k,d[1]+k-1 else: y0,y1=0,0 ip.SetOutputWholeExtent(x0,x1,y0,y1,0,0) ip.SetInputData(i) i = ip.GetOutput() ip.Update() elif wrap: ip = vtk.vtkImageWrapPad() if d[0] > 1: x0,x1=-k,d[0]+k-1 else: x0,x1=0,0 if d[1] > 1: y0,y1=-k,d[1]+k-1 else: y0,y1=0,0 ip.SetOutputWholeExtent(x0,x1,y0,y1,0,0) ip.SetInputData(i) i = ip.GetOutput() ip.Update() c = vtk.vtkImageConvolve() if kernel is None: if k == 3: k1 = np.asarray([0.25,0.5,0.25]) elif k == 5: k1 = np.asarray([0.0625,0.25,0.375,0.25,0.0625]) if onedim: ke = np.ones((k,k),np.float64) * k1 elif not oned: ke = k1[::,np.newaxis]*k1[np.newaxis,::] elif oned == 1: ke = np.zeros((k,k),np.float64); ke[::,2] = k1 elif oned == 2: ke = np.zeros((k,k),np.float64); ke[2] = k1 ke = np.ravel(ke) ke = ke / np.sum(ke) if onedim: ke = len(k1)*ke else: k = kernel.shape[0] ke = np.ravel(kernel) if k == 3: c.SetKernel3x3(ke) if k == 5: c.SetKernel5x5(ke) if k == 7: c.SetKernel7x7(ke) c.SetInputData(i) o = c.GetOutput() c.Update() if clip: ic = vtk.vtkImageClip() notx = -(not x) * 0 noty = -(not y) * 0 ic.SetOutputWholeExtent(notx,d[0]-1+notx,noty,d[1]-1+noty,0,0) ic.SetInputData(o) ic.ClipDataOn() o = ic.GetOutput() ic.Update() if numret: return VTKImageToNum(o) else: return o
def VTKImageTransform(x,dx,dy,numret=False,reverse=False,origsize=None, cubic=False,interp=True,scalex=1,scaley=1,constant=0,wrap=False, mirror=False): maxdx = max([int(max(abs(dx.ravel()))+1),(dx.shape[1]-x.shape[1])]) maxdy = max([int(max(abs(dy.ravel()))+1),(dx.shape[0]-x.shape[0])]) dx = dx.astype(np.float32) dy = dy.astype(np.float32) if scalex > 1: xx = np.arange(x.shape[1]) dx = (xx[np.newaxis,::]+dx).astype(np.float32) dy = VTKGrowN(dy,scalex,1,numret=True) dx = VTKGrowN(dx,scalex,1,numret=True) dx = (dx-np.arange(scalex*x.shape[1])[np.newaxis,::]).\ astype(np.float32) if scaley > 1: yy = np.arange(x.shape[0]) dy = (yy[::,np.newaxis]+dy).astype(np.float32) dy = VTKGrowN(dy,1,scaley,numret=True) dx = VTKGrowN(dx,1,scaley,numret=True) dy = (dy-np.arange(scaley*x.shape[0])[::,np.newaxis]).\ astype(np.float32) if type(x) == np.ndarray: i = NumToVTKImage(x) else: i = x if type(dx) == np.ndarray: tx = NumToVTKImage(dx) else: tx = dx if type(dy) == np.ndarray: ty = NumToVTKImage(dy) else: ty = dy dm = ty.GetDimensions() dz = np.zeros(dy.shape,dy.dtype) tz = NumToVTKImage(dz) a = vtk.vtkImageAppendComponents() a.AddInputData(tx) a.AddInputData(ty) a.AddInputData(tz) a.Update() t = a.GetOutput() r = vtk.vtkGridTransform() r.SetDisplacementGridData(t) r.Update() s = vtk.vtkImageReslice() s.WrapOff() s.MirrorOn() if interp: s.InterpolateOn() if cubic: s.SetInterpolationModeToCubic() else: s.SetInterpolationModeToLinear() s.SetOutputDimensionality(2) if reverse: r.SetInterpolationModeToLinear() r.SetInverseTolerance(0.001) r.SetInverseIterations(1000) r.DebugOff() ir = r.GetInverse() ir.SetInterpolationModeToLinear() ir.SetInverseTolerance(0.001) ir.SetInverseIterations(1000) ir.GlobalWarningDisplayOff() s.SetResliceTransform(ir) s.AutoCropOutputOff() if origsize: s.SetOutputExtent(0,origsize[1]-1,0,origsize[0]-1,0,0) else: s.SetOutputExtent(0,scalex*dm[0]-1,0,scaley*dm[1]-1,0,0) else: r.SetInterpolationModeToCubic() r.SetInverseTolerance(0.001) r.SetInverseIterations(1000) r.GlobalWarningDisplayOff() s.SetOutputExtent(0,scalex*dm[0]-1,0,scaley*dm[1]-1,0,0) s.AutoCropOutputOff() s.SetResliceTransform(r) if mirror: ip = vtk.vtkImageMirrorPad() elif wrap: ip = vtk.vtkImageWrapPad() else: ip = vtk.vtkImageConstantPad(); ip.SetConstant(constant) ip.SetOutputWholeExtent(0-maxdx,dm[0]-1+maxdx,0-maxdy,dm[1]-1+maxdy,0,0) ip.SetInputData(i) ip.Update() s.SetInputData(ip.GetOutput()) o=s.GetOutput() s.Update() if numret: ri = VTKImageToNum(o) else: ri = o return ri
def main(): colors = vtk.vtkNamedColors() file_name, start_label, end_label = get_program_parameters() if start_label > end_label: end_label, start_label = start_label, end_label # Generate cubes from labels # 1) Read the meta file # 2) Convert point data to cell data # 3) Convert to geometry and display reader = vtk.vtkMetaImageReader() reader.SetFileName(file_name) reader.Update() # Pad the volume so that we can change the point data into cell # data. extent = reader.GetOutput().GetExtent() pad = vtk.vtkImageWrapPad() pad.SetInputConnection(reader.GetOutputPort()) pad.SetOutputWholeExtent(extent[0], extent[1] + 1, extent[2], extent[3] + 1, extent[4], extent[5] + 1) pad.Update() # Copy the scalar point data of the volume into the scalar cell data pad.GetOutput().GetCellData().SetScalars(reader.GetOutput().GetPointData().GetScalars()) selector = vtk.vtkThreshold() selector.SetInputArrayToProcess(0, 0, 0, vtk.vtkDataObject().FIELD_ASSOCIATION_CELLS, vtk.vtkDataSetAttributes().SCALARS) selector.SetInputConnection(pad.GetOutputPort()) selector.ThresholdBetween(start_label, end_label) selector.Update() # Shift the geometry by 1/2 transform = vtk.vtkTransform() transform.Translate(-0.5, -0.5, -0.5) transform_model = vtk.vtkTransformFilter() transform_model.SetTransform(transform) transform_model.SetInputConnection(selector.GetOutputPort()) geometry = vtk.vtkGeometryFilter() geometry.SetInputConnection(transform_model.GetOutputPort()) mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(geometry.GetOutputPort()) mapper.SetScalarRange(start_label, end_label) mapper.SetScalarModeToUseCellData() mapper.SetColorModeToMapScalars() actor = vtk.vtkActor() actor.SetMapper(mapper) renderer = vtk.vtkRenderer() render_window = vtk.vtkRenderWindow() render_window.AddRenderer(renderer) render_window.SetSize(640, 480) render_window.SetWindowName('GenerateCubesFromLabels') render_window_interactor = vtk.vtkRenderWindowInteractor() render_window_interactor.SetRenderWindow(render_window) renderer.AddActor(actor) renderer.SetBackground(colors.GetColor3d('DarkSlateBlue')) render_window.Render() camera = renderer.GetActiveCamera() camera.SetPosition(42.301174, 939.893457, -124.005030) camera.SetFocalPoint(224.697134, 221.301653, 146.823706) camera.SetViewUp(0.262286, -0.281321, -0.923073) camera.SetDistance(789.297581) camera.SetClippingRange(168.744328, 1509.660206) render_window_interactor.Start()