Source code for geos.mesh.utils.multiblockModifiers

# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright 2023-2024 TotalEnergies.
# SPDX-FileContributor: Martin Lemay
from typing import Union
from vtkmodules.vtkCommonDataModel import ( vtkCompositeDataSet, vtkDataObjectTreeIterator, vtkMultiBlockDataSet,
                                            vtkUnstructuredGrid )
from vtkmodules.vtkFiltersCore import vtkAppendDataSets
from geos.mesh.utils.arrayModifiers import fillAllPartialAttributes

__doc__ = """Contains a method to merge blocks of a VTK multiblock dataset."""


# TODO : fix function for keepPartialAttributes = True
[docs] def mergeBlocks( input: Union[ vtkMultiBlockDataSet, vtkCompositeDataSet ], keepPartialAttributes: bool = False, ) -> vtkUnstructuredGrid: """Merge all blocks of a multi block mesh. Args: input (vtkMultiBlockDataSet | vtkCompositeDataSet ): composite object to merge blocks keepPartialAttributes (bool): if True, keep partial attributes after merge. Defaults to False. Returns: vtkUnstructuredGrid: merged block object """ if keepPartialAttributes: fillAllPartialAttributes( input, False ) fillAllPartialAttributes( input, True ) af = vtkAppendDataSets() af.MergePointsOn() iter: vtkDataObjectTreeIterator = vtkDataObjectTreeIterator() iter.SetDataSet( input ) iter.VisitOnlyLeavesOn() iter.GoToFirstItem() while iter.GetCurrentDataObject() is not None: block: vtkUnstructuredGrid = vtkUnstructuredGrid.SafeDownCast( iter.GetCurrentDataObject() ) af.AddInputData( block ) iter.GoToNextItem() af.Update() return af.GetOutputDataObject( 0 )