class BBTree(object): class TItem(object): def __init__(self,bb,payload): self.bb=bb self.payload=payload def __repr__(self): return "TItem(%s,%s)"%(self.bb,self.payload) class Adapter(object): def __init__(self,vec): self.vec=vec self.val=[] def overlapping(self,box): result=[] for bspitem in self.bsp.items_whose_dominating_area_overlaps(box): for item in bspitem.val: if item.bb.overlaps(box): result.append(item) return result def __init__(self,items,epsilon): itarr=[] for item in items: bb=item.bb itarr.append(BBTree.Adapter((bb.x1,bb.y1))) itarr.append(BBTree.Adapter((bb.x2,bb.y2))) self.bsp=BspTree(itarr) for item in items: bb=item.bb.expanded(epsilon) dom=self.bsp.find_item_dominating(bb) dom.val.append(item)