Ah, crud. I’ve Gotta Declare this One, Don’t I?
I realized that I should declare I file that I am using from another project.
Contents of the file follow the break.
Here it is:
## # Rectangle container with collision methods # # @author Henry Mclaughlin # # This is a generic rectangle container that has some # collision methods, a couple of boolean methods, and # properties for many points in itself. # # It has the following collision methods: # # \li Check overlap # \li Clamp in # \li Clamp off # # It has the following boolean methods: # # \li Union # \li Intersection # # It has properties for the following points: # # \li Left, right, top, and bottom edges (single coordinate) # \li Top-left, top-right, bottom-left, and bottom-right corners # \li Left, right, top, and bottom edge mid-points # \li Horizontal center and vertical center (single coordinate) # \li Center point # \li Width and height (individually) # \li Size # # When a Rect's corners are modified, it moves without # changing size. # # \note There are a \e lot of methods here that are not # documented. This is because you are meant to # use the properties, which \e are documented. # # \todo Implement clampIn() # \todo Implement clampOff() # \todo Implement boolean functions # \todo Implement overlapList(), overlapAny(), and overlapAll() # class Rect(object): ## # Constructor # # Params are complicated... # # \todo Document the parameters # \todo Proper error messages # def __init__(self,x,y=None,w=None,h=None): super(Rect,self).__init__() if h != None and w != None: self._left = float(x) self._bottom = float(y) self._width = float(w) self._height = float(h) elif y != None: self._left, self._bottom = x self._width,self._height = y elif isinstance(x,Rect): self._left = x.left self._bottom = x.bottom self._width = x.width self._height = x.height else: x = tuple(x) self._left,self._bottom,self._width,self._height = x self._left = float(self._left) self._bottom = float(self._bottom) self._width = float(self._width) self._height = float(self._height) def getLeft(self): return self._left def setLeft(self,new_left): self._left = float(new_left) ## # The Rect's left edge (single coordinate) left = property( getLeft, setLeft ) def getRight(self): return self._left + self._width def setRight(self,new_right): self._left = float(new_right) - self._width ## # The Rect's right edge (single coordinate) right = property( getRight, setRight ) def getCenterX(self): return self._left + (self._width / 2.0) def setCenterX(self,new_centerx): self._left = float(new_centerx) - (self._width / 2.0) ## # The Rect's horizontal center (single coordinate) centerx = property( getCenterX, setCenterX ) def getBottom(self): return self._bottom def setBottom(self,new_bottom): self._bottom = float(new_bottom) ## # The Rect's bottom edge (single coordinate) bottom = property( getBottom, setBottom ) def getTop(self): return self._bottom + self._width def setTop(self,new_top): self._bottom = float(new_top) - self._width ## # The Rect's top edge (single coordinate) top = property( getTop, setTop ) def getCenterY(self): return self._bottom + (self._width / 2.0) def setCenterY(self,new_centery): self._bottom = float(new_centery) - (self._width / 2.0) ## # The Rect's vertical center (single coordinate) centery = property( getCenterY, setCenterY ) def getWidth(self): return self._width def setWidth(self,new_width): self._width = float(new_width) ## # The Rect's width width = property( getWidth, setWidth ) def getHeight(self): return self._height def setHeight(self,new_height): self._height = float(new_height) ## # The Rect's height height = property( getHeight, setHeight ) def getBottomLeft(self): return (self.left,self.bottom) def setBottomLeft(self,new_bottomleft): self.left,self.bottom = tuple(new_bottomleft) ## # The Rect's bottom-left corner bottomleft = property( getBottomLeft, setBottomLeft ) def getBottomRight(self): return (self.right,self.bottom) def setBottomRight(self,new_bottomright): self.right,self.bottom = tuple(new_bottomright) ## # The Rect's bottom-right corner bottomright = property( getBottomRight, setBottomRight ) def getTopLeft(self): return (self.left,self.top) def setTopLeft(self,new_topleft): self.left,self.top = tuple(new_topleft) ## # The Rect's top-left corner topleft = property( getTopLeft, setTopLeft ) def getTopRight(self): return (self.right,self.top) def setTopRight(self,new_topright): self.right,self.top = tuple(new_topright) ## # The Rect's top-right corner topright = property( getTopRight, setTopRight ) def getMidLeft(self): return (self.left,self.centery) def setMidLeft(self,new_midleft): self.left,self.centery = tuple(new_midleft) ## # The midpoint of the Rect's left edge midleft = property( getMidLeft, setMidLeft ) def getMidRight(self): return (self.right,self.centery) def setMidRight(self,new_midright): self.right,self.centery = tuple(new_midright) ## # The midpoint of the Rect's right edge midright = property( getMidRight, setMidRight ) def getMidBottom(self): return (self.centerx,self.bottom) def setMidBottom(self,new_midbottom): self.centerx,self.bottom = tuple(new_midbottom) ## # The midpoint of the Rect's bottom edge midbottom = property( getMidBottom, setMidBottom ) def getMidTop(self): return (self.centerx,self.top) def setMidTop(self,new_midtop): self.centerx,self.top = tuple(new_midtop) ## # The midpoint of the Rect's top edge midtop = property( getMidTop, setMidTop ) def getCenter(self): return (self.centerx,self.centery) def setCenter(self,new_center): self.centerx,self.centery = tuple(new_center) ## # The Rect's center point center = property( getCenter, setCenter ) def getSize(self): return (self.width,self.height) def setSize(self,new_size): self.width,self.height = tuple(new_size) ## # The Rect's size size = property( getSize, setSize ) ## # Check whether the caller overlaps another Rect # # @param other The Rect to check for an overlap with # # @return Whether the caller overlaps with \e other # # \note If \e other is not a Rect, then this method # will attempt to construct a Rect using \e other # def overlap(self,other): if not isinstance(other,Rect): other = Rect(other) coll_x, coll_y = True, True coll_x = coll_x and self.left <= other.right coll_x = coll_x and other.left <= self.right coll_y = coll_y and self.bottom <= other.top coll_y = coll_y and other.bottom <= self.top return coll_x and coll_y