Source code for sfepy.postprocess.utils_vtk

"""Postprocessing utils based on VTK library"""

import vtk
import os
import tempfile

vtk_version = vtk.vtkVersion().GetVTKMajorVersion()

[docs]def get_vtk_from_file(filename): """ Read VTK file. Parameters ---------- filename : str Name of the VTK file. Returns ------- vtkdata : VTK object Mesh, scalar, vector and tensor data. """ reader = vtk.vtkUnstructuredGridReader() reader.SetFileName(filename) reader.ReadAllScalarsOn() reader.ReadAllVectorsOn() reader.ReadAllTensorsOn() reader.Update() return reader.GetOutput()
[docs]def write_vtk_to_file(filename, vtkdata): """ Write VTK file. Parameters ---------- filename : str Name of the VTK file. vtkdata : VTK object Mesh, scalar, vector and tensor data. """ writer = vtk.vtkGenericDataObjectWriter() writer.SetFileName(filename) if vtk_version < 6: writer.SetInput(vtkdata) else: writer.SetInputData(vtkdata) writer.Update()
[docs]def get_vtk_from_mesh(mesh, data, prefix=''): mesh_name = mesh.name[mesh.name.rfind(os.path.sep) + 1:] tmpdir = tempfile.gettempdir() vtkname = os.path.join(tmpdir, '%s%s.vtk' % (prefix, mesh_name)) mesh.write(vtkname, io='auto', out=data) vtkdata = get_vtk_from_file(vtkname) os.remove(vtkname) return vtkdata
[docs]def get_vtk_surface(vtkdata): """ Get mesh surface. Parameters ---------- vtkdata : VTK object Mesh, scalar, vector and tensor data. Returns ------- surface : VTK object Mesh, scalar, vector and tensor data. """ surface = vtk.vtkDataSetSurfaceFilter() if vtk_version < 6: surface.SetInput(vtkdata) else: surface.SetInputData(vtkdata) surface.Update() return surface.GetOutput()
[docs]def get_vtk_edges(vtkdata): """ Get mesh edges. Parameters ---------- vtkdata : VTK object Mesh, scalar, vector and tensor data. Returns ------- edges : VTK object Mesh, scalar, vector and tensor data. """ edges = vtk.vtkExtractEdges() if vtk_version < 6: edges.SetInput(vtkdata) else: edges.SetInputData(vtkdata) edges.Update() return edges.GetOutput()
[docs]def get_vtk_by_group(vtkdata, group_lower, group_upper=None): """ Get submesh by material group id. Parameters ---------- vtkdata : VTK object Mesh, scalar, vector and tensor data. group_lower : int The lower material id. group_lower : int The Upper material id. Returns ------- slection : VTK object Mesh, scalar, vector and tensor data. """ selection = vtk.vtkThreshold() if vtk_version < 6: selection.SetInput(vtkdata) else: selection.SetInputData(vtkdata) selection.SetInputArrayToProcess(0, 0, 0, vtk.vtkDataObject.FIELD_ASSOCIATION_CELLS, "mat_id") if group_upper is None: group_upper = group_lower selection.ThresholdBetween(group_lower, group_upper) selection.Update() return selection.GetOutput()
[docs]def tetrahedralize_vtk_mesh(vtkdata): """ 3D cells are converted to tetrahedral meshes, 2D cells to triangles. Parameters ---------- vtkdata : VTK object Mesh, scalar, vector and tensor data. Returns ------- tetra : VTK object Mesh, scalar, vector and tensor data. """ tetra = vtk.vtkDataSetTriangleFilter() if vtk_version < 6: tetra.SetInput(vtkdata) else: tetra.SetInputData(vtkdata) tetra.Update() return tetra.GetOutput()