def makeFromVTK3(fileName,units, time=0,forceVersion2=False): ''' Create fields from a VTK unstructured grid file (``.vtu``, format version 3, or ``.vtp`` with *forceVersion2*); the mesh is shared between fields. ``vtk.vtkXMLGenericDataObjectReader`` is used to open the file (unless *forceVersion2* is set), but it is checked that contained dataset is a ``vtk.vtkUnstructuredGrid`` and an error is raised if not. .. note:: Units are not supported when loading from VTK, all fields will have ``None`` unit assigned. :param str fileName: VTK (``*.vtu``) file :param PhysicalUnit units: units of read values :param float time: time value for created fields (time is not saved in VTK3, thus cannot be recovered) :param bool forceVersion2: if ``True``, ``vtk.vtkGenericDataObjectReader`` (for VTK version 2) will be used to open the file, isntead of ``vtk.vtkXMLGenericDataObjectReader``; this also supposes *fileName* ends with ``.vtk`` (not checked, but may cause an error). :return: list of new :obj:`Field` instances :rtype: [Field,Field,...] ''' import vtk from . import fieldID #rr=vtk.vtkXMLUnstructuredGridReader() if forceVersion2 or fileName.endswith('.vtk'): rr=vtk.vtkGenericDataObjectReader() else: rr=vtk.vtkXMLGenericDataObjectReader() rr.SetFileName(fileName) rr.Update() ugrid=rr.GetOutput() if not isinstance(ugrid,vtk.vtkUnstructuredGrid): raise RuntimeError("vtkDataObject read from '%s' must be a vtkUnstructuredGrid (not a %s)"%(fileName,ugrid.__class__.__name__)) #import sys #sys.stderr.write(str((ugrid,ugrid.__class__,vtk.vtkUnstructuredGrid))) # make mesh -- implemented separately mesh=Mesh.UnstructuredMesh.makeFromVtkUnstructuredGrid(ugrid) # fields which will be returned ret=[] # get cell and point data cd,pd=ugrid.GetCellData(),ugrid.GetPointData() for data,fieldType in (pd,FieldType.FT_vertexBased),(cd,FieldType.FT_cellBased): for idata in range(data.GetNumberOfArrays()): aname,arr=pd.GetArrayName(idata),pd.GetArray(idata) nt=arr.GetNumberOfTuples() if nt==0: raise RuntimeError("Zero values in field '%s', unable to determine value type."%aname) t0=arr.GetTuple(0) valueType=ValueType.fromNumberOfComponents(len(arr.GetTuple(0))) # this will raise KeyError if fieldID with that name not defined fid=fieldID.FieldID[aname] # get actual values as tuples values=[arr.GetTuple(t) for t in range(nt)] ret.append(Field( mesh=mesh, fieldID=fid, units=units, # not stored at all time=time, # not stored either, set by caller valueType=valueType, values=values, fieldType=fieldType )) return ret
def makeFromVTK3(fileName,time=0,forceVersion2=False): ''' Create fields from a VTK unstructured grid file (``.vtu``, format version 3, or ``.vtp`` with *forceVersion2*); the mesh is shared between fields. ``vtk.vtkXMLGenericDataObjectReader`` is used to open the file (unless *forceVersion2* is set), but it is checked that contained dataset is a ``vtk.vtkUnstructuredGrid`` and an error is raised if not. .. note:: Units are not supported when loading from VTK, all fields will have ``None`` unit assigned. :param str fileName: VTK (``*.vtu``) file :param float time: time value for created fields (time is not saved in VTK3, thus cannot be recovered) :param bool forceVersion2: if ``True``, ``vtk.vtkGenericDataObjectReader`` (for VTK version 2) will be used to open the file, isntead of ``vtk.vtkXMLGenericDataObjectReader``; this also supposes *fileName* ends with ``.vtk`` (not checked, but may cause an error). :return: list of new :obj:`Field` instances :rtype: [Field,Field,...] ''' import vtk from . import fieldID #rr=vtk.vtkXMLUnstructuredGridReader() if forceVersion2 or fileName.endswith('.vtk'): rr=vtk.vtkGenericDataObjectReader() else: rr=vtk.vtkXMLGenericDataObjectReader() rr.SetFileName(fileName) rr.Update() ugrid=rr.GetOutput() if not isinstance(ugrid,vtk.vtkUnstructuredGrid): raise RuntimeError("vtkDataObject read from '%s' must be a vtkUnstructuredGrid (not a %s)"%(fileName,ugrid.__class__.__name__)) #import sys #sys.stderr.write(str((ugrid,ugrid.__class__,vtk.vtkUnstructuredGrid))) # make mesh -- implemented separately mesh=mupif.Mesh.UnstructuredMesh.makeFromVtkUnstructuredGrid(ugrid) # fields which will be returned ret=[] # get cell and point data cd,pd=ugrid.GetCellData(),ugrid.GetPointData() for data,fieldType in (pd,FieldType.FT_vertexBased),(cd,FieldType.FT_cellBased): for idata in range(data.GetNumberOfArrays()): aname,arr=pd.GetArrayName(idata),pd.GetArray(idata) nt=arr.GetNumberOfTuples() if nt==0: raise RuntimeError("Zero values in field '%s', unable to determine value type."%aname) t0=arr.GetTuple(0) valueType=ValueType.fromNumberOfComponents(len(arr.GetTuple(0))) # this will raise KeyError if fieldID with that name not defined fid=fieldID.FieldID[aname] # get actual values as tuples values=[arr.GetTuple(t) for t in range(nt)] ret.append(Field( mesh=mesh, fieldID=fid, units=None, # not stored at all time=time, # not stored either, set by caller valueType=valueType, values=values, fieldType=fieldType )) return ret
def open(self, k): """ Open a file for reading.""" rdr = vtk.vtkXMLGenericDataObjectReader() Debug.logger.info('loading %s', self.data[k][1]) rdr.SetFileName(self.data[k][1]) rdr.Update() self.data[k][2] = rdr.GetOutput() cloc = vtk.vtkCellLocator() cloc.SetDataSet(self.data[k][2]) cloc.BuildLocator() self.data[k][3] = cloc
def main(): filename = get_program_parameters() # Get all data from the file reader = vtk.vtkXMLGenericDataObjectReader() reader.SetFileName(filename) reader.Update() # All of the standard data types can be checked and obtained like this: if isinstance(reader.GetOutput(), vtk.vtkPolyData): print("File is a polydata") elif isinstance(reader.GetOutput(), vtk.vtkUnstructuredGrid): print("File is an unstructured grid") # Visualize colors = vtk.vtkNamedColors() mapper = vtk.vtkDataSetMapper() mapper.SetInputConnection(reader.GetOutputPort()) actor = vtk.vtkActor() actor.SetMapper(mapper) actor.GetProperty().SetColor(colors.GetColor3d("Moccasin")) renderer = vtk.vtkRenderer() render_window = vtk.vtkRenderWindow() render_window.AddRenderer(renderer) render_window_interactor = vtk.vtkRenderWindowInteractor() render_window_interactor.SetRenderWindow(render_window) renderer.AddActor(actor) renderer.SetBackground(colors.GetColor3d("SlateGray")) render_window.SetSize(640, 480) render_window.Render() render_window_interactor.Start()
def loadXMLGenericData(filename): """Read any type of vtk data object encoded in XML format.""" reader = vtk.vtkXMLGenericDataObjectReader() reader.SetFileName(filename) reader.Update() return reader.GetOutput()
def _load_file(filename, c, alpha, threshold, spacing, unpack): fl = filename.lower() ################################################################# other formats: if fl.endswith(".xml") or fl.endswith(".xml.gz") or fl.endswith(".xdmf"): # Fenics tetrahedral file actor = loadDolfin(filename) elif fl.endswith(".neutral") or fl.endswith(".neu"): # neutral tetrahedral file actor = loadNeutral(filename) elif fl.endswith(".gmsh"): # gmesh file actor = loadGmesh(filename) elif fl.endswith(".pcd"): # PCL point-cloud format actor = loadPCD(filename) actor.GetProperty().SetPointSize(2) elif fl.endswith(".off"): actor = loadOFF(filename) elif fl.endswith(".3ds"): # 3ds format actor = load3DS(filename) elif fl.endswith(".wrl"): importer = vtk.vtkVRMLImporter() importer.SetFileName(filename) importer.Read() importer.Update() actors = importer.GetRenderer().GetActors() #vtkActorCollection actors.InitTraversal() wacts = [] for i in range(actors.GetNumberOfItems()): act = actors.GetNextActor() wacts.append(act) actor = Assembly(wacts) ################################################################# volumetric: elif fl.endswith(".tif") or fl.endswith(".slc") or fl.endswith(".vti") \ or fl.endswith(".mhd") or fl.endswith(".nrrd") or fl.endswith(".nii") \ or fl.endswith(".dem"): img = loadImageData(filename, spacing) if threshold is False: if c is None and alpha == 1: c = ['b','lb','lg','y','r'] # good for blackboard background alpha = (0.0, 0.0, 0.2, 0.4, 0.8, 1) actor = Volume(img, c, alpha) else: actor = Volume(img).isosurface(threshold=threshold) actor.color(c).alpha(alpha) ################################################################# 2D images: elif fl.endswith(".png") or fl.endswith(".jpg") or fl.endswith(".bmp") or fl.endswith(".jpeg"): if ".png" in fl: picr = vtk.vtkPNGReader() elif ".jpg" in fl or ".jpeg" in fl: picr = vtk.vtkJPEGReader() elif ".bmp" in fl: picr = vtk.vtkBMPReader() picr.SetFileName(filename) picr.Update() actor = Picture() # object derived from vtk.vtkImageActor() actor.SetInputData(picr.GetOutput()) if alpha is None: alpha = 1 actor.SetOpacity(alpha) ################################################################# multiblock: elif fl.endswith(".vtm") or fl.endswith(".vtmb"): read = vtk.vtkXMLMultiBlockDataReader() read.SetFileName(filename) read.Update() mb = read.GetOutput() if unpack: acts = [] for i in range(mb.GetNumberOfBlocks()): b = mb.GetBlock(i) if isinstance(b, (vtk.vtkPolyData, vtk.vtkImageData, vtk.vtkUnstructuredGrid, vtk.vtkStructuredGrid, vtk.vtkRectilinearGrid)): acts.append(b) return acts else: return mb ################################################################# numpy: elif fl.endswith(".npy"): acts = loadNumpy(filename) if unpack == False: return Assembly(acts) return acts elif fl.endswith(".geojson") or fl.endswith(".geojson.gz"): return loadGeoJSON(fl) ################################################################# polygonal mesh: else: if fl.endswith(".vtk"): # read all legacy vtk types #output can be: # PolyData, StructuredGrid, StructuredPoints, UnstructuredGrid, RectilinearGrid reader = vtk.vtkDataSetReader() reader.ReadAllScalarsOn() reader.ReadAllVectorsOn() reader.ReadAllTensorsOn() reader.ReadAllFieldsOn() reader.ReadAllNormalsOn() reader.ReadAllColorScalarsOn() elif fl.endswith(".ply"): reader = vtk.vtkPLYReader() elif fl.endswith(".obj"): reader = vtk.vtkOBJReader() elif fl.endswith(".stl"): reader = vtk.vtkSTLReader() elif fl.endswith(".byu") or fl.endswith(".g"): reader = vtk.vtkBYUReader() elif fl.endswith(".foam"): # OpenFoam reader = vtk.vtkOpenFOAMReader() elif fl.endswith(".pvd"): reader = vtk.vtkXMLGenericDataObjectReader() elif fl.endswith(".vtp"): reader = vtk.vtkXMLPolyDataReader() elif fl.endswith(".vts"): reader = vtk.vtkXMLStructuredGridReader() elif fl.endswith(".vtu"): reader = vtk.vtkXMLUnstructuredGridReader() elif fl.endswith(".vtr"): reader = vtk.vtkXMLRectilinearGridReader() elif fl.endswith(".pvtk"): reader = vtk.vtkPDataSetReader() elif fl.endswith(".pvtr"): reader = vtk.vtkXMLPRectilinearGridReader() elif fl.endswith("pvtu"): reader = vtk.vtkXMLPUnstructuredGridReader() elif fl.endswith(".txt") or fl.endswith(".xyz"): reader = vtk.vtkParticleReader() # (format is x, y, z, scalar) elif fl.endswith(".facet"): reader = vtk.vtkFacetReader() else: return None reader.SetFileName(filename) reader.Update() routput = reader.GetOutput() if not routput: colors.printc("~noentry Unable to load", filename, c=1) return None actor = Actor(routput, c, alpha) if fl.endswith(".txt") or fl.endswith(".xyz"): actor.GetProperty().SetPointSize(4) actor.filename = filename return actor
import vtk from particle_model import vtk_extras reader = vtk.vtkXMLGenericDataObjectReader() reader.SetFileName('particle_model/tests/data/gyre_0.vtu') reader.Update() ugrid = reader.GetOutput() def test_BoundingSurface(): """Test the vtk_extras.BoundingSurface function.""" pass def test_FindCell(): """Test the vtk_extras.FindCell function.""" locator = vtk.vtkCellLocator() locator.SetDataSet(ugrid) def test_EvaluateField(): """Test the vtk_extras.EvaluateField function.""" pass def test_vInterpolate(): """Test the vtk_extras.EvaluateField function.""" pass
# Tests paraview/paraview#18391 from vtkmodules.util.misc import vtkGetDataRoot, vtkGetTempDir from vtk import vtkXMLGenericDataObjectReader, vtkDoubleArray, vtkDataSetWriter, vtkPDataSetReader from os.path import join reader = vtkXMLGenericDataObjectReader() reader.SetFileName(join(vtkGetDataRoot(), "Data/multicomb_0.vts")) reader.Update() a1 = vtkDoubleArray() a1.SetName("field-1") a1.SetNumberOfTuples(1) a1.SetValue(0, 100.0) a1.GetRange() a2 = vtkDoubleArray() a2.SetName("field-2") a2.SetNumberOfTuples(2) a2.SetValue(0, 1.0) a2.SetValue(1, 2.0) a2.GetRange() dobj = reader.GetOutputDataObject(0) dobj.GetFieldData().AddArray(a1) dobj.GetFieldData().AddArray(a2) writer = vtkDataSetWriter() writer.SetFileName(join(vtkGetTempDir(), "TestPDataSetReaderWriterWithFieldData.vtk"))
def loadXMLGenericData(filename): # not tested '''Read any type of vtk data object encoded in XML format. Return an ``Actor(vtkActor)`` object.''' reader = vtk.vtkXMLGenericDataObjectReader() reader.SetFileName(filename) reader.Update() return Actor(reader.GetOutput())