clipping routines

This commit is contained in:
Michael Krayer 2021-08-06 20:35:27 +02:00
parent 00128cc24e
commit 4c84ea6adc
1 changed files with 29 additions and 0 deletions

View File

@ -214,6 +214,35 @@ class Field3d:
data = self.data[sl] data = self.data[sl]
return Field3d(data,origin,spacing,deep=deep) return Field3d(data,origin,spacing,deep=deep)
def clip(self,position,axis,invert=False,deep=False):
idx_clip = self.nearest_gridpoint(coord,axis=axis,lower=True)
sl = 3*[slice(None)]
origin_ = self.origin
spacing_ = self.spacing
if invert:
sl[axis] = slice(idx_clip+1,None)
origin_[axis] = self.origin[axis]+idx_clip*self.spacing[axis]
else:
sl[axis] = slice(0,idx_clip+1)
data_ = self.data[tuple(sl)]
return Field3d(data_,origin_,spacing_,deep=deep)
def clip_box(self,bounds,deep=False,is_relative=False):
if is_relative:
bounds = tuple(self.origin[ii//2] + bounds[ii]*self.dim(ii//2)*self.spacing[ii//2] for ii in range(6))
print(bounds)
idx_lo = self.nearest_gridpoint((bounds[0],bounds[2],bounds[4]),lower=True)
idx_hi = self.nearest_gridpoint((bounds[1],bounds[3],bounds[5]),lower=True)
origin_ = self.origin
spacing_ = self.spacing
idx_lo = tuple(0 if idx_lo[axis]<0 else idx_lo[axis] for axis in range(3))
idx_hi = tuple(0 if idx_hi[axis]<0 else idx_hi[axis] for axis in range(3))
sl_ = tuple([slice(idx_lo[0],idx_hi[0]+1),
slice(idx_lo[1],idx_hi[1]+1),
slice(idx_lo[2],idx_hi[2]+1)])
data_ = self.data[sl_]
return Field3d(data_,origin_,spacing_,deep=deep)
def coordinate(self,idx,axis=None): def coordinate(self,idx,axis=None):
if axis is None: if axis is None:
assert len(idx)==3, "If 'axis' is None, 'idx' must be a tuple/list of length 3." assert len(idx)==3, "If 'axis' is None, 'idx' must be a tuple/list of length 3."