boxespy/boxes/extents.py

44 lines
1.3 KiB
Python
Raw Normal View History

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})'