22# SPDX-FileCopyrightText: Copyright 2023-2024 TotalEnergies.
33# SPDX-FileContributor: Martin Lemay, Paloma Martinez
44from typing import Union
5+
56from vtkmodules .vtkCommonDataModel import ( vtkCompositeDataSet , vtkDataObjectTreeIterator , vtkMultiBlockDataSet ,
67 vtkUnstructuredGrid , vtkDataSet )
78from packaging .version import Version
9+ from vtkmodules .vtkCommonCore import vtkLogger
810
911# TODO: remove this condition when all codes are adapted for VTK newest version.
1012import vtk
1416 from vtkmodules .vtkFiltersCore import vtkAppendDataSets
1517
1618from geos .mesh .utils .arrayModifiers import fillAllPartialAttributes
17- from geos .utils .Logger import ( getLogger , Logger )
19+ from geos .utils .Logger import ( getLogger , Logger , VTKCaptureLog , RegexExceptionFilter )
1820
1921__doc__ = """Contains a method to merge blocks of a VTK multiblock dataset."""
2022
21-
2223def mergeBlocks (
2324 inputMesh : Union [ vtkMultiBlockDataSet , vtkCompositeDataSet ],
2425 keepPartialAttributes : bool = False ,
@@ -36,7 +37,7 @@ def mergeBlocks(
3637 vtkUnstructuredGrid: Merged dataset or input mesh if it's already a single block
3738
3839 Raises:
39- ValueError :
40+ geos.utilsVTKError () :
4041
4142 .. Note::
4243 Default filling values:
@@ -50,6 +51,9 @@ def mergeBlocks(
5051 if logger is None :
5152 logger : Logger = getLogger ( "mergeBlocks" , True )
5253
54+ vtkLogger .SetStderrVerbosity (vtkLogger .VERBOSITY_TRACE )
55+ logger .addFilter (RegexExceptionFilter ())
56+
5357 # Fill the partial attributes with default values to keep them during the merge.
5458 if keepPartialAttributes and not fillAllPartialAttributes ( inputMesh , logger ):
5559 logger .warning ( "Failed to fill partial attributes. Merging without keeping partial attributes." )
@@ -66,18 +70,24 @@ def mergeBlocks(
6670 logger .warning ( "Input mesh is already a single block." )
6771 outputMesh = inputMesh
6872 else :
69- af : vtkAppendDataSets = vtkAppendDataSets ()
70- af .MergePointsOn ()
71- iterator : vtkDataObjectTreeIterator = vtkDataObjectTreeIterator ()
72- iterator .SetDataSet ( inputMesh )
73- iterator .VisitOnlyLeavesOn ()
74- iterator .GoToFirstItem ()
75- while iterator .GetCurrentDataObject () is not None :
76- block : vtkDataSet = vtkDataSet .SafeDownCast ( iterator .GetCurrentDataObject () )
77- af .AddInputData ( block )
78- iterator .GoToNextItem ()
79- af .Update ()
80-
73+ with VTKCaptureLog () as captured_log :
74+
75+ af : vtkAppendDataSets = vtkAppendDataSets ()
76+ af .MergePointsOn ()
77+ iterator : vtkDataObjectTreeIterator = vtkDataObjectTreeIterator ()
78+ iterator .SetDataSet ( inputMesh )
79+ iterator .VisitOnlyLeavesOn ()
80+ iterator .GoToFirstItem ()
81+ while iterator .GetCurrentDataObject () is not None :
82+ block : vtkDataSet = vtkDataSet .SafeDownCast ( iterator .GetCurrentDataObject () )
83+ af .AddInputData ( block )
84+ iterator .GoToNextItem ()
85+
86+ af .Update ()
87+ captured_log .seek (0 ) #be kind let's just rewind
88+ captured = captured_log .read ().decode ()
89+
90+ logger .error (captured .strip ())
8191 outputMesh : vtkUnstructuredGrid = af .GetOutputDataObject ( 0 )
8292
8393 return outputMesh
0 commit comments