def draw_text(text, y, color=im.color.yellow): im.drawtext(self.show_img, text, self.map_img.width + 30, y, font=im.font.small, color=color)
def draw_selected(self, canvas, x, y): building = self.get_clicked_building(x, y) encode_int = building.bid X, Y = building.center_of_mass area = building.area ble, bt, br, bb = building.bbox label = building.name # draw cv.Rectangle(canvas, (ble, bt), (br, bb), color=im.color.yellow, thickness=2) building.fillme(canvas) building.draw_contour(canvas) im.drawtext(canvas, ("(" + "%g, " * 5) % ( float(x), float(y), float(encode_int), X, Y, ), x + 10, y + 10, font=im.font.small, color=im.color.darkgreen) im.drawtext(canvas, ("%g, " * 5 + "%s)") % (area, ble, bt, br, bb, label), x + 10, y + 40, font=im.font.small, color=im.color.darkgreen)
def handle_clicked_nonbuilding(self, x, y): def equivalent_region_nearest(nearest_building): ''' find the equivalent class region via nearest building ''' equ_class_region = cv.CreateImage( (self.map_img.width, self.map_img.height), cv.IPL_DEPTH_8U, 1) bid = nearest_building.bid cv.CmpS(self.buildingMgr.empty_img, bid, equ_class_region, cv.CV_CMP_EQ) return equ_class_region def draw_region(equ_class_region, color=im.color.red): c = im.find_contour(equ_class_region) while c: cv.FillPoly(self.show_img, [list(c)], color) c = c.h_next() blds = self.buildingMgr.get_near_buildings(x, y) if not blds: blds = [self.buildingMgr.get_nearest_building(x, y)] # update clicked states if self.click_state == 'START': self.click_state = 'FROM_CLICKED' elif self.click_state == 'FROM_CLICKED': if self.last_clicked != set(blds): self.click_state = 'TO_CLICKED' else: # click_state == 'TO_CLICKED' self.click_state = 'FROM_CLICKED' reg_color = { 'FROM_CLICKED': im.color.red, 'TO_CLICKED': im.color.blue }[self.click_state] fill_bld_color = { 'FROM_CLICKED': im.color.pink, 'TO_CLICKED': im.color.lightblue }[self.click_state] # equivalent class region equ_class_region = self.buildingMgr.get_near_region_mask(blds) if len(blds) == 1: cv.Or(equ_class_region, equivalent_region_nearest(blds[0]), equ_class_region) draw_region(equ_class_region, color=reg_color) # fill nearby buildings for bd in blds: bd.fillme(self.show_img, fill_bld_color) self.generate_position_desc(blds) im.drawtext(self.show_img, "(%g, %g, 0)" % (x, y), x + 10, y + 10, font=self.font, color=self.fontcolor) self.last_clicked = set(blds)