def _retrieve_file(url, filename): # First check if file has already been downloaded local_path = os.path.join(pyvista.EXAMPLES_PATH, os.path.basename(filename)) local_path_no_zip = local_path.replace('.zip', '') if os.path.isfile(local_path_no_zip) or os.path.isdir(local_path_no_zip): return local_path_no_zip, None # grab the correct url retriever if sys.version_info < (3, ): import urllib urlretrieve = urllib.urlretrieve else: import urllib.request urlretrieve = urllib.request.urlretrieve # Perform download saved_file, resp = urlretrieve(url) # new_name = saved_file.replace(os.path.basename(saved_file), os.path.basename(filename)) # Make sure folder exists! if not os.path.isdir(os.path.dirname((local_path))): os.makedirs(os.path.dirname((local_path))) shutil.move(saved_file, local_path) if pyvista.get_ext(local_path) in ['.zip']: _decompress(local_path) local_path = local_path[:-4] return local_path, resp
def _load_file(self, filename): """Load a vtkMultiBlockDataSet from a file. The supported extensions are: ``.vtm`` or ``.vtmb``. """ filename = os.path.abspath(os.path.expanduser(filename)) # test if file exists if not os.path.isfile(filename): raise Exception('File %s does not exist' % filename) # Get extension ext = pyvista.get_ext(filename) # Extensions: .vtm and .vtmb # Select reader if ext in ['.vtm', '.vtmb']: reader = vtk.vtkXMLMultiBlockDataReader() else: raise IOError('File extension must be either "vtm" or "vtmb"') # Load file reader.SetFileName(filename) reader.Update() self.shallow_copy(reader.GetOutput())
def _load_file(self, filename): """Load a surface mesh from a mesh file. Mesh file may be an ASCII or binary ply, stl, or vtk mesh file. Parameters ---------- filename : str Filename of mesh to be loaded. File type is inferred from the extension of the filename Notes ----- Binary files load much faster than ASCII. """ filename = os.path.abspath(os.path.expanduser(filename)) # test if file exists if not os.path.isfile(filename): raise Exception('File %s does not exist' % filename) # Get extension ext = pyvista.get_ext(filename) # Select reader if ext == '.ply': reader = vtk.vtkPLYReader() elif ext == '.stl': reader = vtk.vtkSTLReader() elif ext == '.vtk': reader = vtk.vtkPolyDataReader() elif ext == '.vtp': reader = vtk.vtkXMLPolyDataReader() elif ext == '.obj': reader = vtk.vtkOBJReader() else: raise TypeError( 'Filetype must be either "ply", "stl", "vtk", "vtp", or "obj".' ) # Load file reader.SetFileName(filename) reader.Update() self.ShallowCopy(reader.GetOutput()) # sanity check if not np.any(self.points): raise AssertionError('Empty or invalid file')
def save(self, filename, binary=True): """ Writes a ``MultiBlock`` dataset to disk. Written file may be an ASCII or binary vtm file. Parameters ---------- filename : str Filename of mesh to be written. File type is inferred from the extension of the filename unless overridden with ftype. Can be one of the following types (.vtm or .vtmb) binary : bool, optional Writes the file as binary when True and ASCII when False. Notes ----- Binary files write much faster than ASCII and have a smaller file size. """ filename = os.path.abspath(os.path.expanduser(filename)) ext = pyvista.get_ext(filename) if ext in ['.vtm', '.vtmb']: writer = vtk.vtkXMLMultiBlockDataWriter() else: raise Exception('File extension must be either "vtm" or "vtmb"') writer.SetFileName(filename) writer.SetInputDataObject(self) if binary: writer.SetDataModeToBinary() else: writer.SetDataModeToAscii() writer.Write() return