def combine(self, merge_points=False, tolerance=0.0): """Combine all blocks into a single unstructured grid. Parameters ---------- merge_points : bool, optional Merge coincidental points. tolerance : float, optional The absolute tolerance to use to find coincident points when ``merge_points=True``. Returns ------- pyvista.UnstructuredGrid Combined blocks. Examples -------- Combine blocks within a multiblock without merging points. >>> import pyvista >>> block = pyvista.MultiBlock([ ... pyvista.Cube(clean=False), ... pyvista.Cube(center=(1, 0, 0), clean=False) ... ]) >>> merged = block.combine() >>> merged.n_points 48 Combine blocks and merge points >>> merged = block.combine(merge_points=True) >>> merged.n_points 12 """ alg = _vtk.vtkAppendFilter() for block in self: if isinstance(block, _vtk.vtkMultiBlockDataSet): block = CompositeFilters.combine(block, merge_points=merge_points, tolerance=tolerance) alg.AddInputData(block) alg.SetMergePoints(merge_points) alg.SetTolerance(tolerance) alg.Update() return wrap(alg.GetOutputDataObject(0))
def cast_to_unstructured_grid(self) -> 'pyvista.UnstructuredGrid': """Get a new representation of this object as an :class:`pyvista.UnstructuredGrid`.""" alg = _vtk.vtkAppendFilter() alg.AddInputData(self) alg.Update() return _get_output(alg)
def __init__(self, *args, **kwargs) -> None: """Initialize the unstructured grid.""" super().__init__() deep = kwargs.pop('deep', False) if not len(args): return if len(args) == 1: if isinstance(args[0], _vtk.vtkUnstructuredGrid): if deep: self.deep_copy(args[0]) else: self.shallow_copy(args[0]) elif isinstance(args[0], (str, pathlib.Path)): self._from_file(args[0]) elif isinstance(args[0], _vtk.vtkStructuredGrid): vtkappend = _vtk.vtkAppendFilter() vtkappend.AddInputData(args[0]) vtkappend.Update() self.shallow_copy(vtkappend.GetOutput()) else: itype = type(args[0]) raise TypeError(f'Cannot work with input type {itype}') #Cell dictionary creation elif len(args) == 2 and isinstance(args[0], dict) and isinstance(args[1], np.ndarray): self._from_cells_dict(args[0], args[1], deep) self._check_for_consistency() elif len(args) == 3: # and VTK9: arg0_is_arr = isinstance(args[0], np.ndarray) arg1_is_arr = isinstance(args[1], np.ndarray) arg2_is_arr = isinstance(args[2], np.ndarray) if all([arg0_is_arr, arg1_is_arr, arg2_is_arr]): self._from_arrays(None, args[0], args[1], args[2], deep) self._check_for_consistency() else: raise TypeError('All input types must be np.ndarray') elif len(args) == 4: arg0_is_arr = isinstance(args[0], np.ndarray) arg1_is_arr = isinstance(args[1], np.ndarray) arg2_is_arr = isinstance(args[2], np.ndarray) arg3_is_arr = isinstance(args[3], np.ndarray) if all([arg0_is_arr, arg1_is_arr, arg2_is_arr, arg3_is_arr]): self._from_arrays(args[0], args[1], args[2], args[3], deep) self._check_for_consistency() else: raise TypeError('All input types must be np.ndarray') else: err_msg = 'Invalid parameters. Initialization with arrays ' +\ 'requires the following arrays:\n' if _vtk.VTK9: raise TypeError(err_msg + '`cells`, `cell_type`, `points`') else: raise TypeError(err_msg + '(`offset` optional), `cells`, `cell_type`, `points`')