def test_cells_dict_utils(): # No pyvista object with pytest.raises(ValueError): cells.get_mixed_cells(None) with pytest.raises(ValueError): cells.get_mixed_cells(np.zeros(shape=[3, 3])) cells_arr = np.array([3, 0, 1, 2, 3, 3, 4, 5]) cells_types = np.array([vtk.VTK_TRIANGLE] * 2) assert np.all( cells.generate_cell_offsets(cells_arr, cells_types) == cells.generate_cell_offsets(cells_arr, cells_types)) # Non-integer type with pytest.raises(ValueError): cells.generate_cell_offsets(cells_arr, cells_types.astype(np.float32)) with pytest.raises(ValueError): cells.generate_cell_offsets_loop(cells_arr, cells_types.astype(np.float32)) # Inconsistency of cell array lengths with pytest.raises(ValueError): cells.generate_cell_offsets(np.array(cells_arr.tolist() + [6]), cells_types) with pytest.raises(ValueError): cells.generate_cell_offsets_loop(np.array(cells_arr.tolist() + [6]), cells_types) with pytest.raises(ValueError): cells.generate_cell_offsets( cells_arr, np.array(cells_types.tolist() + [vtk.VTK_TRIANGLE])) with pytest.raises(ValueError): cells.generate_cell_offsets_loop( cells_arr, np.array(cells_types.tolist() + [vtk.VTK_TRIANGLE])) # Unknown cell type np.all( cells.generate_cell_offsets(cells_arr, cells_types) == cells.generate_cell_offsets(cells_arr, np.array([255, 255])))
def _from_arrays(self, offset, cells, cell_type, points, deep=True): """Create VTK unstructured grid from numpy arrays. Parameters ---------- offset : np.ndarray dtype=np.int64 Array indicating the start location of each cell in the cells array. Set to ``None`` when using VTK 9+. cells : np.ndarray dtype=np.int64 Array of cells. Each cell contains the number of points in the cell and the node numbers of the cell. cell_type : np.uint8 Cell types of each cell. Each cell type numbers can be found from vtk documentation. See example below. points : np.ndarray Numpy array containing point locations. Examples -------- >>> import numpy >>> import vtk >>> import pyvista >>> offset = np.array([0, 9]) >>> cells = np.array([8, 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 10, 11, 12, 13, 14, 15]) >>> cell_type = np.array([vtk.VTK_HEXAHEDRON, vtk.VTK_HEXAHEDRON], np.int8) >>> cell1 = np.array([[0, 0, 0], ... [1, 0, 0], ... [1, 1, 0], ... [0, 1, 0], ... [0, 0, 1], ... [1, 0, 1], ... [1, 1, 1], ... [0, 1, 1]]) >>> cell2 = np.array([[0, 0, 2], ... [1, 0, 2], ... [1, 1, 2], ... [0, 1, 2], ... [0, 0, 3], ... [1, 0, 3], ... [1, 1, 3], ... [0, 1, 3]]) >>> points = np.vstack((cell1, cell2)) >>> grid = pyvista.UnstructuredGrid(offset, cells, cell_type, points) """ # Convert to vtk arrays vtkcells = CellArray(cells, cell_type.size, deep) if cell_type.dtype != np.uint8: cell_type = cell_type.astype(np.uint8) cell_type_np = cell_type cell_type = _vtk.numpy_to_vtk(cell_type, deep=deep) # Convert points to vtkPoints object points = pyvista.vtk_points(points, deep=deep) self.SetPoints(points) # vtk9 does not require an offset array if _vtk.VTK9: if offset is not None: warnings.warn('VTK 9 no longer accepts an offset array', stacklevel=3) self.SetCells(cell_type, vtkcells) else: if offset is None: offset = generate_cell_offsets(cells, cell_type_np) self.SetCells(cell_type, numpy_to_idarr(offset), vtkcells)