Mostly functional again after imagepipeline module refactor
This commit is contained in:
parent
1435752a30
commit
f02313da39
3 changed files with 118 additions and 105 deletions
54
shapes.py
Normal file
54
shapes.py
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
class Rect:
|
||||
def __init__(self, *args, label=None, **kwargs):
|
||||
if len(args) == 4 and all([type(i) is int or type(i) is float for i in args]):
|
||||
self.x, self.y, self.w, self.h = args
|
||||
elif len(args) == 2 and all([type(i) is tuple and len(i) == 2 and all([type(j) is int or type(j) is float for j in i]) for i in args]):
|
||||
xy, wh = self.args
|
||||
self.x, self.y = xy
|
||||
self.w, self.h = wh
|
||||
elif all([k in kwargs for k in ("x", "y", "w", "h")]):
|
||||
self.x = kwargs["x"]
|
||||
self.y = kwargs["y"]
|
||||
self.w = kwargs["w"]
|
||||
self.h = kwargs["h"]
|
||||
elif all([k in kwargs for k in ("x", "y", "x2", "y2")]):
|
||||
self.x = kwargs["x"]
|
||||
self.y = kwargs["y"]
|
||||
self.w = kwargs["x2"] - self.x
|
||||
self.h = kwargs["y2"] - self.y
|
||||
elif all([k in kwargs for k in ("x1", "y1", "x2", "y2")]):
|
||||
self.x = kwargs["x1"]
|
||||
self.y = kwargs["y1"]
|
||||
self.w = kwargs["x2"] - self.x
|
||||
self.h = kwargs["y2"] - self.y
|
||||
else:
|
||||
raise RuntimeError("Rect requires 4 values: two coordinates or a coordinate plus width and height.")
|
||||
self.label = label
|
||||
|
||||
def __repr__(self):
|
||||
return f"<Rect label={repr(self.label)}, (({self.x}, {self.y}), ({self.w}, {self.h}))>"
|
||||
|
||||
def __iter__(self):
|
||||
yield (self.x, self.y)
|
||||
yield (self.w, self.h)
|
||||
|
||||
def __len__(self):
|
||||
return 2
|
||||
|
||||
def __getitem__(self, i):
|
||||
if i == 0: return (self.x, self.y)
|
||||
elif i == 1: return (self.w, self.h)
|
||||
else: raise IndexError("Rect only supports index of 0 or 1.")
|
||||
|
||||
def __setitem__(self, i, value):
|
||||
assert i in (0, 1) and len(value) == 2
|
||||
if not i: self.x, self.y = value
|
||||
else: self.w, self.h = value
|
||||
|
||||
@property
|
||||
def point(self):
|
||||
return (self.x, self.y)
|
||||
|
||||
@property
|
||||
def point2(self):
|
||||
return (self.x + self.w, self.y + self.h)
|
||||
Loading…
Add table
Add a link
Reference in a new issue