예제 #1
0
    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()
예제 #2
0
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()
예제 #3
0
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()
예제 #4
0
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()
예제 #5
0
파일: Field.py 프로젝트: mmp-project/mupif
    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()