def __init__(self, module_manager):
     SimpleVTKClassModuleBase.__init__(
         self, module_manager,
         vtk.vtkRectilinearGridWriter(), 'Writing vtkRectilinearGrid.',
         ('vtkRectilinearGrid',), (),
         replaceDoc=True,
         inputFunctions=None, outputFunctions=None)
Beispiel #2
0
 def __init__(self, module_manager):
     SimpleVTKClassModuleBase.__init__(self,
                                       module_manager,
                                       vtk.vtkRectilinearGridWriter(),
                                       'Writing vtkRectilinearGrid.',
                                       ('vtkRectilinearGrid', ), (),
                                       replaceDoc=True,
                                       inputFunctions=None,
                                       outputFunctions=None)
Beispiel #3
0
def write_3d_mesh_tally_to_vtk(
        xs,
        ys,
        zs,
        tally_label: str,
        tally_data,
        error_data,
        outfile):
    try:
        import vtk
    except (ImportError, ModuleNotFoundError):
        msg = "Conversion to VTK requested," \
            "but the Python VTK module is not installed."
        raise ImportError(msg)

    vtk_box = vtk.vtkRectilinearGrid()

    vtk_box.SetDimensions(len(xs), len(ys), len(zs))

    vtk_x_array = vtk.vtkDoubleArray()
    vtk_x_array.SetName('x-coords')
    vtk_x_array.SetArray(xs, len(xs), True)
    vtk_box.SetXCoordinates(vtk_x_array)

    vtk_y_array = vtk.vtkDoubleArray()
    vtk_y_array.SetName('y-coords')
    vtk_y_array.SetArray(ys, len(ys), True)
    vtk_box.SetYCoordinates(vtk_y_array)

    vtk_z_array = vtk.vtkDoubleArray()
    vtk_z_array.SetName('z-coords')
    vtk_z_array.SetArray(zs, len(zs), True)
    vtk_box.SetZCoordinates(vtk_z_array)

    tally = np.array(tally_data)
    tally_data = vtk.vtkDoubleArray()
    tally_data.SetName(tally_label)
    tally_data.SetArray(tally, tally.size, True)

    error = np.array(error_data)
    error_data = vtk.vtkDoubleArray()
    error_data.SetName("error_tag")
    error_data.SetArray(error, error.size, True)

    vtk_box.GetCellData().AddArray(tally_data)
    vtk_box.GetCellData().AddArray(error_data)

    writer = vtk.vtkRectilinearGridWriter()

    writer.SetFileName(outfile)

    writer.SetInputData(vtk_box)

    print('Writing %s' % outfile)

    writer.Write()
def WriteVtkFile(grid, filename, time=None, xml=False, binary=False):
    """Writes a vtk Grid object to a file.
    
    Parameters:
        grid -- vtk Grid Object
        filename -- the filename for the vtk file
        xml -- write the vtk in xml format
        binary -- writes in binary format; xml should be True
    """
    if binary: xml=True
    
    if not xml:
        #write to .vtk file
        writer = vtkRectilinearGridWriter();
        writer.SetFileName(filename)
        if binary:
            print 
        writer.SetInputData(grid)
        writer.Write()
        
        if time:
            #manually add the time data
            vtk_file = open(filename, 'r+').read().split('\n')
            line_index = 0
            line = ''
            _pos = []
            while 'CELL_DATA' not in line:
                line = vtk_file[line_index]
                line_index += 1
            vtk_file.insert(line_index-1,'FIELD FieldData 1\nTime 1 1 double\n' + str(time))
            with open(filename, 'w+') as fo:
                fo.writelines('\n'.join(vtk_file))
    
    else:
        if time:
            #insert time data; this has a bug on the vtk legacy writer, manually insert time field instead for vtk legacy files.
            timeArray = vtkDoubleArray()
            timeArray.SetName('Time')
#            print time, type(time)
            timeArray.InsertNextValue(time)
            grid.GetFieldData().AddArray(timeArray)
    
        writer = vtkXMLRectilinearGridWriter();   
        if binary:
            writer.SetDataModeToBinary()
        else: writer.SetDataModeToAscii()
        print filename
        writer.SetFileName(filename)
        writer.SetInputData(grid)
        writer.Write()
Beispiel #5
0
    def save(self, filename, binary=True):
        """
        Writes a rectilinear grid to disk.

        Parameters
        ----------
        filename : str
            Filename of grid to be written.  The file extension will select the
            type of writer to use.  ".vtk" will use the legacy writer, while
            ".vtr" will select the VTK XML writer.

        binary : bool, optional
            Writes as a binary file by default.  Set to False to write ASCII.


        Notes
        -----
        Binary files write much faster than ASCII, but binary files written on
        one system may not be readable on other systems.  Binary can be used
        only with the legacy writer.

        """
        filename = os.path.abspath(os.path.expanduser(filename))
        # Use legacy writer if vtk is in filename
        if '.vtk' in filename:
            writer = vtk.vtkRectilinearGridWriter()
            legacy = True
        elif '.vtr' in filename:
            writer = vtk.vtkXMLRectilinearGridWriter()
            legacy = False
        else:
            raise Exception('Extension should be either ".vtr" (xml) or' +
                            '".vtk" (legacy)')
        # Write
        writer.SetFileName(filename)
        writer.SetInputData(self)
        if binary and legacy:
            writer.SetFileTypeToBinary()
        writer.Write()
Beispiel #6
0
    def output(self):
        """Save superposition results to npy for plotting & Write superposition result to vtk if SUPERPOSITION_MESH = True.
        """
        if cfg.PLOT_2D:
            plot_eval_depth(self.results_eval, cfg.DEPTH_COORDS, cfg.PATH_2D,
                            cfg.FILE_SUFFIX_2D)
            print(
                "> [Plot] Response at evaluation points plotted in eval_x_2d.png"
            )

        print("> Writing evaluation results to NPY")
        np.save(
            os.path.join(cfg.PATH_2D, 'evals' + cfg.FILE_SUFFIX_2D + '.npy'),
            self.results_eval)
        np.save(
            os.path.join(cfg.PATH_2D, 'depths' + cfg.FILE_SUFFIX_2D + '.npy'),
            cfg.DEPTH_COORDS)

        if cfg.SUPERPOSITION_MESH:
            print("> Writing 2D superposition results to VTK")

            fields = cfg.FEM_FIELDS_3D
            grid = self.queryMesh
            for i, field in enumerate(fields):
                array = numpy_to_vtk(self.results_grid[:, i],
                                     array_type=vtk.VTK_DOUBLE)
                array.SetName(field)
                grid.GetPointData().AddArray(array)  # add field values

            writer = vtk.vtkRectilinearGridWriter()
            writer.SetInputData(grid)
            writer.SetFileName(
                os.path.join(cfg.PATH_2D,
                             'input' + cfg.FILE_SUFFIX_2D + '_final.vtk'))
            writer.Write()
            """Old version
Beispiel #7
0
    assert(r.GetOutput().GetExtent() == (5,10,5,10,5,10))
    assert(r.GetOutput().GetOrigin() == (0, 0, 0))

    rg = vtk.vtkRectilinearGrid()
    extents = (1, 3, 1, 3, 1, 3)
    rg.SetExtent(extents)
    pts = vtk.vtkFloatArray()
    pts.InsertNextTuple1(0)
    pts.InsertNextTuple1(1)
    pts.InsertNextTuple1(2)
    rg.SetXCoordinates(pts)
    rg.SetYCoordinates(pts)
    rg.SetZCoordinates(pts)

    w = vtk.vtkRectilinearGridWriter()
    w.SetInputData(rg)
    w.SetFileName("test-dim.vtk")
    w.Write()

    r = vtk.vtkRectilinearGridReader()
    r.SetFileName("test-dim.vtk")
    r.Update()

    os.remove("test-dim.vtk")

    assert(r.GetOutput().GetExtent() == (0,2,0,2,0,2))

    w.SetInputData(rg)
    w.SetFileName("test-dim.vtk")
    w.SetWriteExtent(True)
Beispiel #8
0
    assert (r.GetOutput().GetExtent() == (5, 10, 5, 10, 5, 10))
    assert (r.GetOutput().GetOrigin() == (0, 0, 0))

    rg = vtk.vtkRectilinearGrid()
    extents = (1, 3, 1, 3, 1, 3)
    rg.SetExtent(extents)
    pts = vtk.vtkFloatArray()
    pts.InsertNextTuple1(0)
    pts.InsertNextTuple1(1)
    pts.InsertNextTuple1(2)
    rg.SetXCoordinates(pts)
    rg.SetYCoordinates(pts)
    rg.SetZCoordinates(pts)

    w = vtk.vtkRectilinearGridWriter()
    w.SetInputData(rg)
    w.SetFileName("test-dim.vtk")
    w.Write()

    r = vtk.vtkRectilinearGridReader()
    r.SetFileName("test-dim.vtk")
    r.Update()

    os.remove("test-dim.vtk")

    assert (r.GetOutput().GetExtent() == (0, 2, 0, 2, 0, 2))

    w.SetInputData(rg)
    w.SetFileName("test-dim.vtk")
    w.SetWriteExtent(True)
Beispiel #9
0
def write_polydata(input_data, filename, datatype=None, file_type="ascii"):
    """
    Write the given input data based on the file name extension.

    Args:
        file_type (string): Filetype of output
        input_data (vtkSTL/vtkPolyData/vtkXMLStructured/
                    vtkXMLRectilinear/vtkXMLPolydata/vtkXMLUnstructured/
                    vtkXMLImage/Tecplot): Input data.
        filename (str): Save path location.
        datatype (str): Additional parameter for vtkIdList objects.
    """
    # Check filename format
    fileType = filename.split(".")[-1]
    if fileType == '':
        raise RuntimeError('The file does not have an extension')

    # Get writer
    if fileType == 'stl':
        writer = vtk.vtkSTLWriter()

    elif fileType == 'vtk':
        # Set reader based on data type
        if isinstance(input_data, vtk.vtkUnstructuredGrid):
            writer = vtk.vtkUnstructuredGridWriter()
        elif isinstance(input_data, vtk.vtkStructuredGrid):
            writer = vtk.vtkStructuredGridWriter()
        elif isinstance(input_data, vtk.vtkRectilinearGrid):
            writer = vtk.vtkRectilinearGridWriter()
        elif isinstance(input_data, vtk.vtkStructuredPoints) or \
                isinstance(input_data, vtk.vtkImageData):
            writer = vtk.vtkStructuredPointsWriter()
        elif isinstance(input_data, vtk.vtkPolyData):
            writer = vtk.vtkPolyDataWriter()

        if file_type.lower() == "ascii":
            writer.SetFileType(1)
        elif file_type.lower() == "binary":
            writer.SetFileType(0)
        else:
            raise ValueError("Invalid file type, can only be ascii or binary")

    elif fileType == 'vts':
        writer = vtk.vtkXMLStructuredGridWriter()
    elif fileType == 'vtr':
        writer = vtk.vtkXMLRectilinearGridWriter()
    elif fileType == 'vtp':
        writer = vtk.vtkXMLPolyDataWriter()
    elif fileType == 'vtu':
        writer = vtk.vtkXMLUnstructuredGridWriter()
    elif fileType == "vti":
        writer = vtk.vtkXMLImageDataWriter()
    elif fileType == "np" and datatype == "vtkIdList":
        output_data = np.zeros(input_data.GetNumberOfIds())
        for i in range(input_data.GetNumberOfIds()):
            output_data[i] = input_data.GetId(i)
        output_data.dump(filename)
        return
    else:
        raise RuntimeError('Unknown file type %s' % fileType)

    # Set filename and input
    writer.SetFileName(filename)
    writer.SetInputData(input_data)
    writer.Update()

    # Write
    writer.Write()
Beispiel #10
0
            for ifield in range(len(grfields)):
                try:
                    dummy = griddata[grfields[ifield]]
                except:
                    # variable does not exist in output
                    continue
                grid_array = vtk.vtkDoubleArray()
                grid_array.SetNumberOfComponents(1)
                grid_array.SetNumberOfTuples(N)

                for i in range(len(grid[IZ])):
                    for j in range(len(grid[IX])):
                        grid_array.SetTuple1(i * len(grid[IX]) + j,
                                             griddata[grfields[ifield]][i, j])

                grid_array.SetName(grfieldnames[ifield])

                vtkgrid.GetPointData().AddArray(grid_array)

            grid_writer = vtk.vtkRectilinearGridWriter()
            grid_writer.SetFileName(griddatafile + ".vtk")
            if vtk.VTK_MAJOR_VERSION <= 5:
                grid_writer.SetInput(vtkgrid)
            else:
                grid_writer.SetInputData(vtkgrid)
            grid_writer.Write()

    else:
        raise Exception("Undefined plot type")