45 lines
1.3 KiB
Python
45 lines
1.3 KiB
Python
class Extents:
|
|
__slots__ = "xmin ymin xmax ymax".split()
|
|
|
|
def __init__(self,xmin=float('inf'),ymin=float('inf'),xmax=float('-inf'),ymax=float('-inf')):
|
|
self.xmin = xmin
|
|
self.ymin = ymin
|
|
self.xmax = xmax
|
|
self.ymax = ymax
|
|
|
|
def add(self,x,y):
|
|
self.xmin = min(self.xmin,x)
|
|
self.xmax = max(self.xmax,x)
|
|
self.ymin = min(self.ymin,y)
|
|
self.ymax = max(self.ymax,y)
|
|
|
|
def extend(self,l):
|
|
for x,y in l:
|
|
self.add(x,y)
|
|
|
|
def __add__(self,extent):
|
|
#todo: why can this happen?
|
|
if extent == 0:
|
|
return Extents(self.xmin,self.ymin,self.xmax,self.ymax)
|
|
return Extents(
|
|
min(self.xmin,extent.xmin),min(self.ymin,extent.ymin),
|
|
max(self.xmax,extent.xmax),max(self.ymax,extent.ymax)
|
|
)
|
|
|
|
def __radd__(self,extent):
|
|
if extent == 0:
|
|
return Extents(self.xmin,self.ymin,self.xmax,self.ymax)
|
|
return self.__add__(extent)
|
|
|
|
def get_width(self):
|
|
return self.xmax-self.xmin
|
|
|
|
def get_height(self):
|
|
return self.ymax-self.ymin
|
|
|
|
width = property(get_width)
|
|
height = property(get_height)
|
|
|
|
def __repr__(self):
|
|
return f'Extents ({self.xmin},{self.ymin})-({self.xmax},{self.ymax})'
|