added deep copy option

This commit is contained in:
Michael Krayer 2021-05-27 23:40:47 +02:00
parent e2fe40c460
commit 6025421d3b
1 changed files with 9 additions and 6 deletions

View File

@ -267,27 +267,30 @@ class Field3d:
self.data.setflags(write=flag) self.data.setflags(write=flag)
return return
def to_vtk(self): def to_vtk(self,deep=False):
import pyvista as pv import pyvista as pv
mesh = pv.UniformGrid() mesh = pv.UniformGrid()
mesh.dimensions = self.dim(axis=None) mesh.dimensions = self.dim(axis=None)
mesh.origin = self.origin mesh.origin = self.origin
mesh.spacing = self.spacing mesh.spacing = self.spacing
# order needs to be F no matter how array is stored in memory # order needs to be F no matter how array is stored in memory
mesh.point_arrays['data'] = self.data.ravel(order='F') if deep:
mesh.point_arrays['data'] = self.data.flatten(order='F')
else:
mesh.point_arrays['data'] = self.data.ravel(order='F')
return mesh return mesh
def vtk_contour(self,val): def vtk_contour(self,val,deep=False):
if not isinstance(val,(tuple,list)): if not isinstance(val,(tuple,list)):
val = [val] val = [val]
return self.to_vtk().contour(val) return self.to_vtk(deep=deep).contour(val)
def vtk_slice(self,normal,origin): def vtk_slice(self,normal,origin,deep=False):
assert (normal in ('x','y','z') or (isinstance(normal,(tuple,list)) assert (normal in ('x','y','z') or (isinstance(normal,(tuple,list))
and len(normal)==3)), "'normal' must be 'x','y','z' or tuple of length 3." and len(normal)==3)), "'normal' must be 'x','y','z' or tuple of length 3."
assert isinstance(origin,(tuple,list)) and len(origin)==3,\ assert isinstance(origin,(tuple,list)) and len(origin)==3,\
"'origin' must be tuple of length 3." "'origin' must be tuple of length 3."
return self.to_vtk().slice(normal=normal,origin=origin) return self.to_vtk(deep=deep).slice(normal=normal,origin=origin)
class ChunkIterator: class ChunkIterator:
'''Iterates through all chunks. 'snapshot' must be an instance '''Iterates through all chunks. 'snapshot' must be an instance