def translate_query(self, q): if type(q) == str: q = literal_eval(q) assert type(q) == dict # be sure all params have a value in the new query query = {} for param in self.fs.parameter_list.keys(): default = [self.fs.get_parameter(param)["default"]] query[param] = q.get(param, default) layers = self.qt.translateQuery(query) # convert layers to image data layer = layers[0] img = vtk.vtkImageData() dims = [0, 0, 0] if layer.hasColorArray(): ncolors = layer.getColorArray() # now, the numpy array's shape matches the 2D image dims[0] = ncolors.shape[1] dims[1] = ncolors.shape[0] img.SetDimensions(dims[0], dims[1], 1) ncolors = ncolors.reshape((dims[0]*dims[1], -1)) vcolors = dsa.numpyTovtkDataArray(ncolors, "Colors") img.GetPointData().SetScalars(vcolors) nluminance = layer.getLuminance() if nluminance is not None: nluminance = nluminance.reshape((dims[0]*dims[1], -1)) vluminance = dsa.numpyTovtkDataArray(nluminance, "Luminance") img.GetPointData().AddArray(vluminance) return [img]
def coprocess(time, timeStep, grid, attributes): global coProcessor import vtk from paraview.modules import vtkPVCatalyst as catalyst import paraview from paraview.vtk.util import numpy_support dataDescription = catalyst.vtkCPDataDescription() dataDescription.SetTimeData(time, timeStep) dataDescription.AddInput("input") if coProcessor.RequestDataDescription(dataDescription): import fedatastructures imageData = vtk.vtkImageData() imageData.SetExtent(grid.XStartPoint, grid.XEndPoint, 0, grid.NumberOfYPoints - 1, 0, grid.NumberOfZPoints - 1) imageData.SetSpacing(grid.Spacing) velocity = numpy_support.numpy_to_vtk(attributes.Velocity) velocity.SetName("velocity") imageData.GetPointData().AddArray(velocity) pressure = numpy_support.numpy_to_vtk(attributes.Pressure) pressure.SetName("pressure") imageData.GetCellData().AddArray(pressure) dataDescription.GetInputDescriptionByName("input").SetGrid(imageData) dataDescription.GetInputDescriptionByName("input").SetWholeExtent( 0, grid.NumberOfGlobalXPoints - 1, 0, grid.NumberOfYPoints - 1, 0, grid.NumberOfZPoints - 1) coProcessor.CoProcess(dataDescription)
def computeAveragesAndBuildImgData(): imgDims = [1440, 720, 10] imgData = vtk.vtkImageData() imgData.SetDimensions(imgDims[0] + 1, imgDims[1] + 1, imgDims[2] + 1) imgData.SetSpacing(1, 1, 1) imgData.SetOrigin(0, 0, 0) imgData.SetExtent(0, imgDims[0], 0, imgDims[1], 0, imgDims[2]) imgData.AllocateScalars(vtk.VTK_FLOAT, 1) flattenedArrays = [] for fileName in fileNames: fpath = os.path.join(basepath, fileName) print('processing %s' % fpath) year = fileName.split('_')[-1][:-4] dataset = gdal.Open(fpath) sumArray = ma.zeros((dataset.RasterYSize, dataset.RasterXSize)) total = 0 count = 0 numBands = dataset.RasterCount for bandId in range(numBands): band = ma.masked_outside(dataset.GetRasterBand(bandId + 1).ReadAsArray(), VALUE_RANGE[0], VALUE_RANGE[1]) sumArray += band sumArray /= numBands total = ma.sum(ma.sum(sumArray)) count = sumArray.count() minCell = ma.min(sumArray) maxCell = ma.max(sumArray) imgDims = [dataset.RasterXSize, dataset.RasterYSize] # flattenedArrays.append(np.ndarray.flatten(sumArray[::-1,:], 0).astype(np.dtype(np.float32))) flattenedArrays.append(np.ndarray.flatten(sumArray[::-1,:], 0)) allYearsAvgs = np.ma.concatenate(flattenedArrays) cellData = imgData.GetCellData() dataArray = numpy_support.numpy_to_vtk(np.ndarray.flatten(allYearsAvgs, 0), deep = 1) dataArray.SetName('Annual Avg Temp') cellData.SetScalars(dataArray) imgWriter = vtkIOXML.vtkXMLImageDataWriter() imgWriter.SetFileName('/data/scott/Documents/tasmax.vti') imgWriter.SetInputData(imgData) imgWriter.Write() print('\nFinished writing image data\n')
def computeAveragesUsingNumpy(): for fileName in fileNames: fpath = os.path.join(basepath, fileName) print('processing %s' % fpath) year = fileName.split('_')[-1][:-4] dataset = gdal.Open(fpath) sumArray = ma.zeros((dataset.RasterYSize, dataset.RasterXSize)) total = 0 count = 0 numBands = dataset.RasterCount for bandId in range(numBands): band = ma.masked_outside( dataset.GetRasterBand(bandId + 1).ReadAsArray(), VALUE_RANGE[0], VALUE_RANGE[1]) sumArray += band sumArray /= numBands total = ma.sum(ma.sum(sumArray)) count = sumArray.count() minCell = ma.min(sumArray) maxCell = ma.max(sumArray) imgDims = [dataset.RasterXSize, dataset.RasterYSize] print(' finished computing averge for %s, writing image data' % year) imgData = vtk.vtkImageData() imgData.SetDimensions(imgDims[0], imgDims[1], 0) imgData.SetSpacing(1, 1, 1) imgData.SetOrigin(0, 0, 0) imgData.SetExtent(0, imgDims[0] - 1, 0, imgDims[1] - 1, 0, 0) imgData.AllocateScalars(vtk.VTK_FLOAT, 1) pointData = imgData.GetPointData() dataArray = numpy_support.numpy_to_vtk(np.ndarray.flatten( sumArray[::-1, :], 0).astype(np.dtype(np.int32)), deep=1) dataArray.SetName('Annual Avg Temp') pointData.SetScalars(dataArray) imgWriter = vtkIOXML.vtkXMLImageDataWriter() imgWriter.SetFileName('tasmax_%s.vti' % (year)) imgWriter.SetInputData(imgData) imgWriter.Write() print(' finished writing image data for %s' % year)
def layer2img(layer): """converts a layer to vtkImageData.""" if not layer: return None img = vtk.vtkImageData() dims = [0, 0, 0] if layer.hasValueArray(): nvalues = layer.getValueArray() # now, the numpy array's shape matches the 2D image dims[0] = nvalues.shape[1] dims[1] = nvalues.shape[0] img.SetDimensions(dims[0], dims[1], 1) nvalues = nvalues.reshape(dims[0]*dims[1]) vvalues = dsa.numpyTovtkDataArray(nvalues, "Values") img.GetPointData().SetScalars(vvalues) elif layer.hasColorArray(): ncolors = layer.getColorArray() # now, the numpy array's shape matches the 2D image dims[0] = ncolors.shape[1] dims[1] = ncolors.shape[0] img.SetDimensions(dims[0], dims[1], 1) ncolors = ncolors.reshape((dims[0]*dims[1],-1)) vcolors = dsa.numpyTovtkDataArray(ncolors, "Colors") img.GetPointData().SetScalars(vcolors) ndepth = layer.getDepth() if ndepth is None: raise RuntimeError("Missing 'depth'") ndepth = ndepth.reshape(dims[0]*dims[1]) vdepth = dsa.numpyTovtkDataArray(ndepth, "Depth"); img.GetPointData().AddArray(vdepth) nluminance = layer.getLuminance() if nluminance is not None: nluminance = nluminance.reshape((dims[0]*dims[1], -1)) vluminance = dsa.numpyTovtkDataArray(nluminance, "Luminance") img.GetPointData().AddArray(vluminance) #from paraview.vtk.vtkIOLegacy import vtkDataSetWriter #writer = vtkDataSetWriter() #writer.SetInputDataObject(img) #writer.SetFileName("/tmp/layer.vtk") #writer.Update() #del writer return img
def layer2img(layer): """converts a layer to vtkImageData.""" if not layer: return None img = vtk.vtkImageData() dims = [0, 0, 0] if layer.hasValueArray(): nvalues = layer.getValueArray() # now, the numpy array's shape matches the 2D image dims[0] = nvalues.shape[1] dims[1] = nvalues.shape[0] img.SetDimensions(dims[0], dims[1], 1) nvalues = nvalues.reshape(dims[0]*dims[1]) vvalues = dsa.numpyTovtkDataArray(nvalues, "Values") img.GetPointData().SetScalars(vvalues) elif layer.hasColorArray(): ncolors = layer.getColorArray() # now, the numpy array's shape matches the 2D image dims[0] = ncolors.shape[1] dims[1] = ncolors.shape[0] img.SetDimensions(dims[0], dims[1], 1) ncolors = ncolors.reshape((dims[0]*dims[1], -1)) vcolors = dsa.numpyTovtkDataArray(ncolors, "Colors") img.GetPointData().SetScalars(vcolors) ndepth = layer.getDepth() if ndepth is None: raise RuntimeError("Missing 'depth'") ndepth = ndepth.reshape(dims[0]*dims[1]) vdepth = dsa.numpyTovtkDataArray(ndepth, "Depth") img.GetPointData().AddArray(vdepth) nluminance = layer.getLuminance() if nluminance is not None: nluminance = nluminance.reshape((dims[0]*dims[1], -1)) vluminance = dsa.numpyTovtkDataArray(nluminance, "Luminance") img.GetPointData().AddArray(vluminance) # from paraview.vtk.vtkIOLegacy import vtkDataSetWriter # writer = vtkDataSetWriter() # writer.SetInputDataObject(img) # writer.SetFileName("/tmp/layer.vtk") # writer.Update() # del writer return img
def numpy_to_image(numpy_array): """Convert a numpy 2D or 3D array to a vtkImageData object. numpy_array 2D or 3D numpy array containing image data return vtkImageData with the numpy_array content """ try: import numpy except: paraview.print_error("Error: Cannot import numpy") shape = numpy_array.shape if len(shape) < 2: raise Exception('numpy array must have dimensionality of at least 2') h, w = shape[0], shape[1] c = 1 if len(shape) == 3: c = shape[2] # Reshape 2D image to 1D array suitable for conversion to a # vtkArray with numpy_support.numpy_to_vtk() linear_array = numpy.reshape(numpy_array, (w*h, c)) try: from paraview.vtk.util import numpy_support except: paraview.print_error("Error: Cannot import vtk.util.numpy_support") vtk_array = numpy_support.numpy_to_vtk(linear_array) image = vtk.vtkImageData() image.SetDimensions(w, h, 1) image.AllocateScalars(vtk_array.GetDataType(), 4) image.GetPointData().GetScalars().DeepCopy(vtk_array) return image
def processFile(directory, filename): # junk = raw_input('blah') fpath = os.path.join(directory, filename) print('Processing %s' % filename) year = filename.split('_')[-1][:-4] dataset = gdal.Open(fpath) numBands = dataset.RasterCount imgDims = [dataset.RasterXSize, dataset.RasterYSize] for bandId in range(numBands): # for bandId in [0, 89, 179, 269]: imgData = vtk.vtkImageData() imgData.SetDimensions(imgDims[0], imgDims[1], 0) imgData.SetSpacing(1, 1, 1) imgData.SetOrigin(0, 0, 0) imgData.SetExtent(0, imgDims[0] - 1, 0, imgDims[1] - 1, 0, 0) imgData.AllocateScalars(vtk.VTK_FLOAT, 1) band = dataset.GetRasterBand(bandId + 1).ReadAsArray() pointData = imgData.GetPointData() dataArray = numpy_support.numpy_to_vtk(np.ndarray.flatten( band[::-1, :], 0).astype(np.dtype(np.int32)), deep=1) dataArray.SetName('Daily Max') pointData.SetScalars(dataArray) imgWriter = vtkIOXML.vtkXMLImageDataWriter() outputFileName = '%s_%d.vti' % (filename, (bandId + 1)) imgWriter.SetFileName(outputFileName) imgWriter.SetInputData(imgData) imgWriter.Write() print(' wrote to %s' % outputFileName)
def processFile(fileName): # junk = raw_input('blah') print('Processing %s' % fileName) year = fileName.split('_')[-1][:-4] dataset = gdal.Open(fileName) numBands = dataset.RasterCount imgDims = [dataset.RasterXSize, dataset.RasterYSize] imgData = vtk.vtkImageData() imgData.SetDimensions(imgDims[0], imgDims[1], 0) imgData.SetSpacing(1, 1, 1) imgData.SetOrigin(0, 0, 0) imgData.SetExtent(0, imgDims[0] - 1, 0, imgDims[1] - 1, 0, 0) pointData = imgData.GetPointData() # for bandId in range(numBands): for bandId in [0, 89, 179, 269]: print(' band %d' % (bandId + 1)) band = dataset.GetRasterBand(bandId + 1).ReadAsArray() dataArray = numpy_support.numpy_to_vtk(np.ndarray.flatten( band[::-1, :], 0).astype(np.dtype(np.int32)), deep=1) dataArray.SetName('Daily Max (%d)' % (bandId + 1)) pointData.AddArray(dataArray) pointData.SetActiveScalars('Daily Max (0)') imgWriter = vtkIOXML.vtkXMLImageDataWriter() imgWriter.SetFileName('tasmax_%s.vti' % (year)) imgWriter.SetInputData(imgData) imgWriter.Write()