4
4
from typing import Optional , Union , Literal , List , Sequence
5
5
6
6
import numpy as np
7
+
8
+ from vtkmodules .vtkIOXML import vtkXMLReader , vtkXMLWriter
9
+
7
10
from vtkmodules .vtkCommonCore import (
8
11
vtkPoints ,
9
12
vtkStringArray ,
@@ -79,7 +82,7 @@ def __init__(self,
79
82
vtkPolyData, and vtkRectilinearGrid.
80
83
81
84
"""
82
- self .vtk_data = vtk_data
85
+ self .vtk_data : vtkDataSet = vtk_data
83
86
84
87
85
88
def __repr__ (self ) -> str :
@@ -89,7 +92,7 @@ def __repr__(self) -> str:
89
92
Give short, human-readable summary.
90
93
91
94
"""
92
- info = [self .vtk_data .__vtkname__ ]
95
+ info = [self .vtk_data .__vtkname__ ] # type: ignore
93
96
94
97
for data in ['Cell Data' , 'Point Data' ]:
95
98
if data == 'Cell Data' : info .append (f'\n # cells: { self .N_cells } ' )
@@ -351,39 +354,34 @@ def load(fname: Union[str, Path],
351
354
if not Path (fname ).expanduser ().is_file (): # vtk has a strange error handling
352
355
raise FileNotFoundError (f'file "{ fname } " not found' )
353
356
if (ext := Path (fname ).suffix ) == '.vtk' or dataset_type is not None :
354
- reader = vtkGenericDataObjectReader ()
355
- reader .SetFileName (str (Path (fname ).expanduser ()))
357
+ vtk_reader = vtkGenericDataObjectReader ()
358
+ vtk_reader .SetFileName (str (Path (fname ).expanduser ()))
356
359
if dataset_type is None :
357
360
raise TypeError ('dataset type for *.vtk file not given' )
358
- elif dataset_type .lower ().endswith (('imagedata' ,'image_data' )):
359
- reader .Update ()
360
- vtk_data = reader .GetStructuredPointsOutput ()
361
- elif dataset_type .lower ().endswith (('unstructuredgrid' ,'unstructured_grid' )):
362
- reader .Update ()
363
- vtk_data = reader .GetUnstructuredGridOutput ()
364
- elif dataset_type .lower ().endswith (('polydata' ,'poly_data' )):
365
- reader .Update ()
366
- vtk_data = reader .GetPolyDataOutput ()
367
- elif dataset_type .lower ().endswith (('rectilineargrid' ,'rectilinear_grid' )):
368
- reader .Update ()
369
- vtk_data = reader .GetRectilinearGridOutput ()
361
+ vtk_reader .Update ()
362
+ if dataset_type .lower ().endswith (('imagedata' , 'image_data' )):
363
+ vtk_data = vtk_reader .GetStructuredPointsOutput ()
364
+ elif dataset_type .lower ().endswith (('unstructuredgrid' , 'unstructured_grid' )):
365
+ vtk_data = vtk_reader .GetUnstructuredGridOutput ()
366
+ elif dataset_type .lower ().endswith (('polydata' , 'poly_data' )):
367
+ vtk_data = vtk_reader .GetPolyDataOutput ()
368
+ elif dataset_type .lower ().endswith (('rectilineargrid' , 'rectilinear_grid' )):
369
+ vtk_data = vtk_reader .GetRectilinearGridOutput ()
370
370
else :
371
371
raise TypeError (f'unknown dataset type "{ dataset_type } " for vtk file' )
372
372
else :
373
- if ext == '.vti' :
374
- reader = vtkXMLImageDataReader ()
375
- elif ext == '.vtu' :
376
- reader = vtkXMLUnstructuredGridReader ()
377
- elif ext == '.vtp' :
378
- reader = vtkXMLPolyDataReader ()
379
- elif ext == '.vtr' :
380
- reader = vtkXMLRectilinearGridReader ()
381
- else :
373
+ xml_reader : Optional [vtkXMLReader ] = (
374
+ vtkXMLImageDataReader () if ext == '.vti' else
375
+ vtkXMLUnstructuredGridReader () if ext == '.vtu' else
376
+ vtkXMLPolyDataReader () if ext == '.vtp' else
377
+ vtkXMLRectilinearGridReader () if ext == '.vtr' else
378
+ None
379
+ )
380
+ if xml_reader is None :
382
381
raise TypeError (f'unknown file extension "{ ext } "' )
383
-
384
- reader .SetFileName (str (Path (fname ).expanduser ()))
385
- reader .Update ()
386
- vtk_data = reader .GetOutput ()
382
+ xml_reader .SetFileName (str (Path (fname ).expanduser ()))
383
+ xml_reader .Update ()
384
+ vtk_data = xml_reader .GetOutputAsDataSet ()
387
385
388
386
return VTK (vtk_data )
389
387
@@ -421,14 +419,15 @@ def save(self,
421
419
Compress with zlib algorithm. Defaults to True.
422
420
423
421
"""
424
- if isinstance (self .vtk_data ,vtkImageData ):
425
- writer = vtkXMLImageDataWriter ()
426
- elif isinstance (self .vtk_data ,vtkUnstructuredGrid ):
427
- writer = vtkXMLUnstructuredGridWriter ()
428
- elif isinstance (self .vtk_data ,vtkPolyData ):
429
- writer = vtkXMLPolyDataWriter ()
430
- elif isinstance (self .vtk_data ,vtkRectilinearGrid ):
431
- writer = vtkXMLRectilinearGridWriter ()
422
+ writer : Optional [vtkXMLWriter ] = (
423
+ vtkXMLImageDataWriter () if isinstance (self .vtk_data , vtkImageData ) else
424
+ vtkXMLUnstructuredGridWriter () if isinstance (self .vtk_data , vtkUnstructuredGrid ) else
425
+ vtkXMLPolyDataWriter () if isinstance (self .vtk_data , vtkPolyData ) else
426
+ vtkXMLRectilinearGridWriter () if isinstance (self .vtk_data , vtkRectilinearGrid ) else
427
+ None
428
+ )
429
+ if writer is None :
430
+ raise TypeError (f'unknown vtk_data type "{ type (self .vtk_data )} "' )
432
431
433
432
default_ext = '.' + writer .GetDefaultFileExtension ()
434
433
ext = Path (fname ).suffix
@@ -656,8 +655,8 @@ def show(self,
656
655
for i ,c in enumerate (colormap_ .colors ):
657
656
lut .SetTableValue (i ,c if len (c )== 4 else np .append (c ,1.0 ))
658
657
lut .Build ()
659
-
660
- self .vtk_data .GetCellData ().SetActiveScalars (label )
658
+ if label is not None :
659
+ self .vtk_data .GetCellData ().SetActiveScalars (label )
661
660
mapper = vtkDataSetMapper ()
662
661
mapper .SetInputData (self .vtk_data )
663
662
mapper .SetLookupTable (lut )
0 commit comments