Source code for ogstools.meshlib.vtk_pyvista

# Copyright (c) 2012-2025, OpenGeoSys Community (http://www.opengeosys.org)
#            Distributed under a Modified BSD License.
#            See accompanying file LICENSE.txt or
#            http://www.opengeosys.org/project/license
#

import numpy as np
import vtk


[docs] def cell_points(cell_type: int) -> int: """ Return the number of points for a given VTK fixed-size cell type. Parameters ---------- cell_type : int VTK cell type ID (e.g., vtk.VTK_LINE, vtk.VTK_TRIANGLE, etc.) Returns ------- int Number of points for this cell type. Raises ------ AttributeError If the cell type is variable-sized (e.g., POLY_LINE, POLYGON), since their number of points is not fixed. Example ------- >>> import vtk >>> cell_points(vtk.VTK_LINE) 2 >>> cell_points(vtk.VTK_TRIANGLE) 3 """ # Get the VTK class name for the cell type classname = vtk.vtkCellTypes().GetClassNameFromTypeId(cell_type) # Get the actual VTK class vtk_class = getattr(vtk, classname) # Create an instance of the cell cell = vtk_class() # Get number of points number_of_points = cell.GetNumberOfPoints() if number_of_points <= 0: msg = f"Cell type {classname} ({cell_type}) is variable-sized (only fixed-sized is supported)." raise AttributeError(msg) return number_of_points
[docs] def construct_cells(connectivity: list, cell_types: list) -> np.array: """ Construct a VTK cells array from connectivity + cell types. Only supports fixed-size cell types. Parameters ---------- connectivity : Concatenated point indices for all cells. VTK convention. cell_types : VTK cell types (same length as number of cells). Returns ------- cells : Flattened VTK-style cell array [npts, id0, id1, ...]. Pyvista convention """ connectivity = np.asarray(connectivity, dtype=int) cell_types = np.asarray(cell_types, dtype=np.uint8) cells = [] offset = 0 for ctype in cell_types: npts = cell_points(ctype) ids = connectivity[offset : offset + npts] offset += npts cells.extend([npts, *ids]) return np.array(cells, dtype=int)