def manyToVTK3(fields, fileName, ascii=False, compress=True): """ Save all fields passed as argument into VTK3 Unstructured Grid file (``*.vtu``). All *fields* must be defined on the same mesh object; exception will be raised if this is not the case. :param list of Field fields: :param fileName: output file name :param bool ascii: write numbers are ASCII in the XML-based VTU file (rather than base64-encoded binary in XML) :param bool compress: apply compression to the data """ import vtk if not fields: raise ValueError('At least one field must be passed.') # check if all fields are defined on the same mesh if len(set([f.mesh for f in fields])) != 1: raise RuntimeError( 'Not all fields are sharing the same Mesh object (and could not be saved to a single .vtu file' ) # convert mesh to VTK UnstructuredGrid mesh = fields[0].getMesh() vtkgrid = mesh.asVtkUnstructuredGrid() # add fields as arrays for f in fields: arr = vtk.vtkDoubleArray() arr.SetNumberOfComponents(f.getRecordSize()) arr.SetName(f.getFieldIDName()) assert f.getFieldType() in (FieldType.FT_vertexBased, FieldType.FT_cellBased ) # other future types not handled if f.getFieldType() == FieldType.FT_vertexBased: nn = mesh.getNumberOfVertices() else: nn = mesh.getNumberOfCells() arr.SetNumberOfValues(nn) for i in range(nn): arr.SetTuple(i, f.giveValue(i)) if f.getFieldType() == FieldType.FT_vertexBased: vtkgrid.GetPointData().AddArray(arr) else: vtkgrid.GetCellData().AddArray(arr) # write the unstructured grid to file writer = vtk.vtkXMLUnstructuredGridWriter() if compress: writer.SetCompressor(vtk.vtkZLibDataCompressor()) if ascii: writer.SetDataModeToAscii() writer.SetFileName(fileName) # change between VTK5 and VTK6 if vtk.vtkVersion().GetVTKMajorVersion() == 6: writer.SetInputData(vtkgrid) else: writer.SetInputData(vtkgrid) writer.Write()
def saveUgridXML(name, ugrid, asciiorbin='binary'): """ save a VTK UntructuredGrid (.vtu) from a vtkUntructuredGrid using XML format """ writer = vtk.vtkXMLUnstructuredGridWriter() compressor = vtk.vtkZLibDataCompressor() writer.SetCompressor(compressor) if asciiorbin == 'binary': writer.SetDataModeToBinary() # marche pas... else: writer.SetDataModeToAscii() writer.SetInput(ugrid) writer.SetFileName(name) writer.Write()
def savePolyDataXML(name, image, asciiorbin='binary'): """ save a VTK PolyData (.vtp) from a vtkPolyData using XML format """ writer = vtk.vtkXMLPolyDataWriter() compressor = vtk.vtkZLibDataCompressor() writer.SetCompressor(compressor) if asciiorbin == 'binary': writer.SetDataModeToBinary() # marche pas... else: writer.SetDataModeToAscii() writer.SetInput(image) writer.SetFileName(name) writer.Write()
def saveVtkImageXML(name, image, asciiorbin='binary', coding='uchar'): """ save a VTK Image (.vti) from a vtkImageData (binary) """ name = os.path.splitext(name)[0] + '.vti' imgCast = castImage(image, coding) writer = vtk.vtkXMLImageDataWriter() compressor = vtk.vtkZLibDataCompressor() writer.SetCompressor(compressor) if asciiorbin == 'binary': writer.SetDataModeToBinary() else: writer.SetDataModeToAscii() writer.SetInput(imgCast) writer.SetFileName(name) writer.Write()
def manyToVTK3(fields,fileName,ascii=False,compress=True): ''' Save all fields passed as argument into VTK3 Unstructured Grid file (``*.vtu``). All *fields* must be defined on the same mesh object; exception will be raised if this is not the case. :param bool ascii: write numbers are ASCII in the XML-based VTU file (rather than base64-encoded binary in XML) :param bool compress: apply compression to the data ''' import vtk if not fields: raise ValueError('At least one field must be passed.') # check if all fields are defined on the same mesh if len(set([f.mesh for f in fields]))!=1: raise RuntimeError('Not all fields are sharing the same Mesh object (and could not be saved to a single .vtu file') # convert mesh to VTK UnstructuredGrid mesh=fields[0].getMesh() vtkgrid=mesh.asVtkUnstructuredGrid() # add fields as arrays for f in fields: arr=vtk.vtkDoubleArray() arr.SetNumberOfComponents(f.getRecordSize()) arr.SetName(f.getFieldIDName()) assert f.getFieldType() in (FieldType.FT_vertexBased,FieldType.FT_cellBased) # other future types not handled if f.getFieldType()==FieldType.FT_vertexBased: nn=mesh.getNumberOfVertices() else: nn=mesh.getNumberOfCells() arr.SetNumberOfValues(nn) for i in range(nn): arr.SetTuple(i,f.giveValue(i)) if f.getFieldType()==FieldType.FT_vertexBased: vtkgrid.GetPointData().AddArray(arr) else: vtkgrid.GetCellData().AddArray(arr) # write the unstructured grid to file writer=vtk.vtkXMLUnstructuredGridWriter() if compress: writer.SetCompressor(vtk.vtkZLibDataCompressor()) if ascii: writer.SetDataModeToAscii() writer.SetFileName(fileName) # change between VTK5 and VTK6 if vtk.vtkVersion().GetVTKMajorVersion()==6: writer.SetInputData(vtkgrid) else: writer.SetInput(vtkgrid) writer.Write()