clipping routines
This commit is contained in:
parent
00128cc24e
commit
4c84ea6adc
29
field.py
29
field.py
|
|
@ -214,6 +214,35 @@ class Field3d:
|
|||
data = self.data[sl]
|
||||
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):
|
||||
if axis is None:
|
||||
assert len(idx)==3, "If 'axis' is None, 'idx' must be a tuple/list of length 3."
|
||||
|
|
|
|||
Loading…
Reference in New Issue