boxespy/boxes/extents.py

44 lines
1.2 KiB
Python
Raw Normal View History

class Extents:
__slots__ = "xmin ymin xmax ymax".split()
2023-01-08 19:41:02 +01:00
def __init__(self,xmin=float('inf'),ymin=float('inf'),xmax=float('-inf'),ymax=float('-inf')) -> None:
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)
2023-01-23 00:46:17 +01:00
@property
def width(self) -> float:
return self.xmax - self.xmin
2023-01-23 00:46:17 +01:00
@property
def height(self) -> float:
return self.ymax - self.ymin
2023-01-08 19:41:02 +01:00
def __repr__(self) -> str:
return f'Extents ({self.xmin},{self.ymin})-({self.xmax},{self.ymax})'