def from_unstructuredGrid(nodes, connectivity, cell_type): """ Create VTK of type vtk.vtkUnstructuredGrid. This is the common type for results from FEM solvers. Parameters ---------- nodes : numpy.ndarray of shape (:,3) Spatial position of the nodes. connectivity : numpy.ndarray of np.dtype = int Cell connectivity (0-based), first dimension determines #Cells, second dimension determines #Nodes/Cell. cell_type : str Name of the vtk.vtkCell subclass. Tested for TRIANGLE, QUAD, TETRA, and HEXAHEDRON. """ vtk_nodes = vtk.vtkPoints() vtk_nodes.SetData(np_to_vtk(nodes)) cells = vtk.vtkCellArray() cells.SetNumberOfCells(connectivity.shape[0]) T = np.concatenate((np.ones( (connectivity.shape[0], 1), dtype=np.int64) * connectivity.shape[1], connectivity), axis=1).ravel() cells.SetCells(connectivity.shape[0], np_to_vtkIdTypeArray(T, deep=True)) geom = vtk.vtkUnstructuredGrid() geom.SetPoints(vtk_nodes) geom.SetCells( eval('vtk.VTK_{}'.format(cell_type.split('_', 1)[-1].upper())), cells) return VTK(geom)
def from_poly_data(points: np.ndarray) -> 'VTK': """ Create VTK of type vtk.polyData. This is the common type for point-wise data. Parameters ---------- points : numpy.ndarray of shape (:,3) Spatial position of the points. Returns ------- new : damask.VTK VTK-based geometry without nodal or cell data. """ N = points.shape[0] vtk_points = vtk.vtkPoints() vtk_points.SetData(np_to_vtk(np.ascontiguousarray(points))) vtk_cells = vtk.vtkCellArray() vtk_cells.SetNumberOfCells(N) vtk_cells.SetCells( N, np_to_vtkIdTypeArray(np.stack( (np.ones(N, dtype=np.int64), np.arange(N, dtype=np.int64)), axis=1).ravel(), deep=True)) vtk_data = vtk.vtkPolyData() vtk_data.SetPoints(vtk_points) vtk_data.SetVerts(vtk_cells) return VTK(vtk_data)
def from_poly_data(points): """ Create VTK of type vtk.polyData. This is the common type for point-wise data. Parameters ---------- points : numpy.ndarray of shape (:,3) Spatial position of the points. """ N = points.shape[0] vtk_points = vtk.vtkPoints() vtk_points.SetData(np_to_vtk(points)) vtk_cells = vtk.vtkCellArray() vtk_cells.SetNumberOfCells(N) vtk_cells.SetCells(N,np_to_vtkIdTypeArray(np.stack((np.ones (N,dtype=np.int64), np.arange(N,dtype=np.int64)),axis=1).ravel(),deep=True)) vtk_data = vtk.vtkPolyData() vtk_data.SetPoints(vtk_points) vtk_data.SetVerts(vtk_cells) return VTK(vtk_data)
def from_unstructured_grid(nodes: np.ndarray, connectivity: np.ndarray, cell_type: str) -> 'VTK': """ Create VTK of type vtk.vtkUnstructuredGrid. This is the common type for mesh solver results. Parameters ---------- nodes : numpy.ndarray of shape (:,3) Spatial position of the nodes. connectivity : numpy.ndarray of np.dtype = int Cell connectivity (0-based), first dimension determines #Cells, second dimension determines #Nodes/Cell. cell_type : str Name of the vtk.vtkCell subclass. Tested for TRIANGLE, QUAD, TETRA, and HEXAHEDRON. Returns ------- new : damask.VTK VTK-based geometry without nodal or cell data. """ vtk_nodes = vtk.vtkPoints() vtk_nodes.SetData(np_to_vtk(np.ascontiguousarray(nodes))) cells = vtk.vtkCellArray() cells.SetNumberOfCells(connectivity.shape[0]) T = np.concatenate((np.ones( (connectivity.shape[0], 1), dtype=np.int64) * connectivity.shape[1], connectivity), axis=1).ravel() cells.SetCells(connectivity.shape[0], np_to_vtkIdTypeArray(T, deep=True)) vtk_data = vtk.vtkUnstructuredGrid() vtk_data.SetPoints(vtk_nodes) cell_types = { 'TRIANGLE': vtk.VTK_TRIANGLE, 'QUAD': vtk.VTK_QUAD, 'TETRA': vtk.VTK_TETRA, 'HEXAHEDRON': vtk.VTK_HEXAHEDRON } vtk_data.SetCells(cell_types[cell_type.split("_", 1)[-1].upper()], cells) return VTK(vtk_data)