def _save_structured_grid(file_name, vtkStructGrid, directory=""): """Saves a VTK structured grid file (vtk) for an already generated :class:`pyvista.StructuredGrid` object. Parameters ---------- file_name : str path to the output vtk file or just its name if directory is specified directory : str directory where the UBC GIF file lives """ if not isinstance(vtkStructGrid, _vtk.vtkStructuredGrid): raise RuntimeError( "`_save_structured_grid` can only handle `vtkStructuredGrid` objects. `{}` is not supported.".format( vtkStructGrid.__class__ ) ) # Check the extension of the file_name fname = os.path.join(directory, file_name) ext = os.path.splitext(fname)[1] if ext == "": fname = fname + ".vts" elif ext not in ".vts": raise IOError("{:s} is an incorrect extension, has to be .vts".format(ext)) # Make the writer writer = _vtkStrucWriter() if float(_vtk_version.split(".")[0]) >= 6: writer.SetInputDataObject(vtkStructGrid) else: writer.SetInput(vtkStructGrid) writer.SetFileName(fname) # Write the file writer.Update()
def _save_rectilinear_grid(filename, vtkRectGrid, directory=''): """Saves a VTK rectilinear file (vtr) ffor an already generated :class:`pyvista.RectilinearGrid` object. Parameters ---------- filename : str path to the output vtk file or just its name if directory is specified directory : str directory where the UBC GIF file lives """ if not isinstance(vtkRectGrid, _vtk.vtkRectilinearGrid): raise RuntimeError('`_save_rectilinear_grid` can only handle `vtkRectilinearGrid` objects. `{}` is not supported.'.format(vtkRectGrid.__class__)) # Check the extension of the filename fname = os.path.join(directory, filename) ext = os.path.splitext(fname)[1] if ext is '': fname = fname + '.vtr' elif ext not in '.vtr': raise IOError('{:s} is an incorrect extension, has to be .vtr'.format(ext)) # Write the file. vtrWriteFilter = _vtkRectWriter() if float(_vtk_version.split('.')[0]) >= 6: vtrWriteFilter.SetInputDataObject(vtkRectGrid) else: vtuWriteFilter.SetInput(vtuObj) vtrWriteFilter.SetFileName(fname) vtrWriteFilter.Update()
def _save_unstructured_grid(filename, vtkUnstructGrid, directory=''): """Saves a VTK unstructured grid file (vtu) for an already generated :class:`pyvista.UnstructuredGrid` object. Parameters ---------- filename : str path to the output vtk file or just its name if directory is specified directory : str directory where the UBC GIF file lives """ if not isinstance(vtkUnstructGrid, vtk.vtkUnstructuredGrid): raise RuntimeError( '`_save_unstructured_grid` can only handle `vtkUnstructuredGrid` objects. `%s` is not supported.' % vtkUnstructGrid.__class__) # Check the extension of the filename fname = os.path.join(directory, filename) ext = os.path.splitext(fname)[1] if ext is '': fname = fname + '.vtu' elif ext not in '.vtu': raise IOError( '{:s} is an incorrect extension, has to be .vtu'.format(ext)) # Make the writer vtuWriteFilter = vtkXMLUnstructuredGridWriter() if float(VTK_VERSION.split('.')[0]) >= 6: vtuWriteFilter.SetInputDataObject(vtkUnstructGrid) else: vtuWriteFilter.SetInput(vtkUnstructGrid) vtuWriteFilter.SetFileName(fname) # Write the file vtuWriteFilter.Update()
def _saveStructuredGrid(fileName, vtkStructGrid, directory=''): """Saves a VTK structured grid file (vtk) for an already generated ``vtkStructuredGrid`` object. Input: :param str fileName: path to the output vtk file or just its name if directory is specified :param str directory: directory where the UBC GIF file lives """ if not isinstance(vtkStructGrid, vtk.vtkStructuredGrid): raise RuntimeError( '`_saveStructuredGrid` can only handle `vtkStructuredGrid` objects. `{}` is not supported.' .format(vtkStructGrid.__class__)) # Check the extension of the fileName fname = os.path.join(directory, fileName) ext = os.path.splitext(fname)[1] if ext is '': fname = fname + '.vts' elif ext not in '.vts': raise IOError( '{:s} is an incorrect extension, has to be .vts'.format(ext)) # Make the writer writer = vtkXMLStructuredGridWriter() if float(VTK_VERSION.split('.')[0]) >= 6: writer.SetInputDataObject(vtkStructGrid) else: writer.SetInput(vtkStructGrid) writer.SetFileName(fname) # Write the file writer.Update()
def writeVTK(mesh, fileName, models=None): """ Makes and saves a VTK rectilinear file (vtr) for a simpeg Tensor mesh and model. Input: :param str, path to the output vtk file :param mesh, SimPEG TensorMesh object - mesh to be transfer to VTK :param models, dictionary of numpy.array - Name('s) and array('s). Match number of cells """ # Import from vtk import vtkRectilinearGrid as rectGrid, vtkXMLRectilinearGridWriter as rectWriter, VTK_VERSION from vtk.util.numpy_support import numpy_to_vtk # Deal with dimensionalities if mesh.dim >= 1: vX = mesh.vectorNx xD = mesh.nNx yD,zD = 1,1 vY, vZ = np.array([0,0]) if mesh.dim >= 2: vY = mesh.vectorNy yD = mesh.nNy if mesh.dim == 3: vZ = mesh.vectorNz zD = mesh.nNz # Use rectilinear VTK grid. # Assign the spatial information. vtkObj = rectGrid() vtkObj.SetDimensions(xD,yD,zD) vtkObj.SetXCoordinates(numpy_to_vtk(vX,deep=1)) vtkObj.SetYCoordinates(numpy_to_vtk(vY,deep=1)) vtkObj.SetZCoordinates(numpy_to_vtk(vZ,deep=1)) # Assign the model('s) to the object if models is not None: for item in models.iteritems(): # Convert numpy array vtkDoubleArr = numpy_to_vtk(item[1],deep=1) vtkDoubleArr.SetName(item[0]) vtkObj.GetCellData().AddArray(vtkDoubleArr) # Set the active scalar vtkObj.GetCellData().SetActiveScalars(models.keys()[0]) # vtkObj.Update() # Check the extension of the fileName ext = os.path.splitext(fileName)[1] if ext is '': fileName = fileName + '.vtr' elif ext not in '.vtr': raise IOError('{:s} is an incorrect extension, has to be .vtr') # Write the file. vtrWriteFilter = rectWriter() if float(VTK_VERSION.split('.')[0]) >=6: vtrWriteFilter.SetInputData(vtkObj) else: vtuWriteFilter.SetInput(vtuObj) vtrWriteFilter.SetFileName(fileName) vtrWriteFilter.Update()
def writeVTK(mesh, fileName, models=None): """ Makes and saves a VTK rectilinear file (vtr) for a simpeg Tensor mesh and model. Input: :param str, path to the output vtk file :param mesh, SimPEG TensorMesh object - mesh to be transfer to VTK :param models, dictionary of numpy.array - Name('s) and array('s). Match number of cells """ # Import from vtk import vtkRectilinearGrid as rectGrid, vtkXMLRectilinearGridWriter as rectWriter, VTK_VERSION from vtk.util.numpy_support import numpy_to_vtk # Deal with dimensionalities if mesh.dim >= 1: vX = mesh.vectorNx xD = mesh.nNx yD, zD = 1, 1 vY, vZ = np.array([0, 0]) if mesh.dim >= 2: vY = mesh.vectorNy yD = mesh.nNy if mesh.dim == 3: vZ = mesh.vectorNz zD = mesh.nNz # Use rectilinear VTK grid. # Assign the spatial information. vtkObj = rectGrid() vtkObj.SetDimensions(xD, yD, zD) vtkObj.SetXCoordinates(numpy_to_vtk(vX, deep=1)) vtkObj.SetYCoordinates(numpy_to_vtk(vY, deep=1)) vtkObj.SetZCoordinates(numpy_to_vtk(vZ, deep=1)) # Assign the model('s) to the object if models is not None: for item in models.iteritems(): # Convert numpy array vtkDoubleArr = numpy_to_vtk(item[1], deep=1) vtkDoubleArr.SetName(item[0]) vtkObj.GetCellData().AddArray(vtkDoubleArr) # Set the active scalar vtkObj.GetCellData().SetActiveScalars(models.keys()[0]) # vtkObj.Update() # Check the extension of the fileName ext = os.path.splitext(fileName)[1] if ext is '': fileName = fileName + '.vtr' elif ext not in '.vtr': raise IOError('{:s} is an incorrect extension, has to be .vtr') # Write the file. vtrWriteFilter = rectWriter() if float(VTK_VERSION.split('.')[0]) >= 6: vtrWriteFilter.SetInputData(vtkObj) else: vtuWriteFilter.SetInput(vtuObj) vtrWriteFilter.SetFileName(fileName) vtrWriteFilter.Update()
def writeVTK(mesh, fileName, models=None): """ Function to write a VTU file from a SimPEG TreeMesh and model. """ import vtk from vtk import vtkXMLUnstructuredGridWriter as Writer, VTK_VERSION from vtk.util.numpy_support import numpy_to_vtk, numpy_to_vtkIdTypeArray if str(type(mesh)).split()[-1][1:-2] not in 'SimPEG.Mesh.TreeMesh.TreeMesh': raise IOError('mesh is not a SimPEG TreeMesh.') # Make the data parts for the vtu object # Points mesh.number() ptsMat = mesh._gridN + mesh.x0 vtkPts = vtk.vtkPoints() vtkPts.SetData(numpy_to_vtk(ptsMat,deep=True)) # Cells cellConn = np.array([c.nodes for c in mesh],dtype=np.int64) cellsMat = np.concatenate((np.ones((cellConn.shape[0],1),dtype=np.int64)*cellConn.shape[1],cellConn),axis=1).ravel() cellsArr = vtk.vtkCellArray() cellsArr.SetNumberOfCells(cellConn.shape[0]) cellsArr.SetCells(cellConn.shape[0],numpy_to_vtkIdTypeArray(cellsMat,deep=True)) # Make the object vtuObj = vtk.vtkUnstructuredGrid() vtuObj.SetPoints(vtkPts) vtuObj.SetCells(vtk.VTK_VOXEL,cellsArr) # Add the level of refinement as a cell array cellSides = np.array([np.array(vtuObj.GetCell(i).GetBounds()).reshape((3,2)).dot(np.array([-1, 1])) for i in np.arange(vtuObj.GetNumberOfCells())]) uniqueLevel, indLevel = np.unique(np.prod(cellSides,axis=1),return_inverse=True) refineLevelArr = numpy_to_vtk(indLevel.max() - indLevel,deep=1) refineLevelArr.SetName('octreeLevel') vtuObj.GetCellData().AddArray(refineLevelArr) # Assign the model('s) to the object if models is not None: for item in models.iteritems(): # Convert numpy array vtkDoubleArr = numpy_to_vtk(item[1],deep=1) vtkDoubleArr.SetName(item[0]) vtuObj.GetCellData().AddArray(vtkDoubleArr) # Make the writer vtuWriteFilter = Writer() if float(VTK_VERSION.split('.')[0]) >=6: vtuWriteFilter.SetInputData(vtuObj) else: vtuWriteFilter.SetInput(vtuObj) vtuWriteFilter.SetFileName(fileName) # Write the file vtuWriteFilter.Update()
def writeVTK(mesh, fileName, models=None): """ Function to write a VTU file from a SimPEG TreeMesh and model. """ import vtk from vtk import vtkXMLUnstructuredGridWriter as Writer, VTK_VERSION from vtk.util.numpy_support import numpy_to_vtk, numpy_to_vtkIdTypeArray if str(type(mesh)).split()[-1][1:-2] not in 'SimPEG.Mesh.TreeMesh.TreeMesh': raise IOError('mesh is not a SimPEG TreeMesh.') # Make the data parts for the vtu object # Points mesh.number() ptsMat = mesh._gridN + mesh.x0 vtkPts = vtk.vtkPoints() vtkPts.SetData(numpy_to_vtk(ptsMat,deep=True)) # Cells cellConn = np.array([c.nodes for c in mesh],dtype=np.int64) cellsMat = np.concatenate((np.ones((cellConn.shape[0],1),dtype=np.int64)*cellConn.shape[1],cellConn),axis=1).ravel() cellsArr = vtk.vtkCellArray() cellsArr.SetNumberOfCells(cellConn.shape[0]) cellsArr.SetCells(cellConn.shape[0],numpy_to_vtkIdTypeArray(cellsMat,deep=True)) # Make the object vtuObj = vtk.vtkUnstructuredGrid() vtuObj.SetPoints(vtkPts) vtuObj.SetCells(vtk.VTK_VOXEL,cellsArr) # Add the level of refinement as a cell array cellSides = np.array([np.array(vtuObj.GetCell(i).GetBounds()).reshape((3,2)).dot(np.array([-1, 1])) for i in np.arange(vtuObj.GetNumberOfCells())]) uniqueLevel, indLevel = np.unique(np.prod(cellSides,axis=1),return_inverse=True) refineLevelArr = numpy_to_vtk(indLevel.max() - indLevel,deep=1) refineLevelArr.SetName('octreeLevel') vtuObj.GetCellData().AddArray(refineLevelArr) # Assign the model('s) to the object if models is not None: for item in six.iteritems(models): # Convert numpy array vtkDoubleArr = numpy_to_vtk(item[1],deep=1) vtkDoubleArr.SetName(item[0]) vtuObj.GetCellData().AddArray(vtkDoubleArr) # Make the writer vtuWriteFilter = Writer() if float(VTK_VERSION.split('.')[0]) >=6: vtuWriteFilter.SetInputData(vtuObj) else: vtuWriteFilter.SetInput(vtuObj) vtuWriteFilter.SetFileName(fileName) # Write the file vtuWriteFilter.Update()