Example #1
0
 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)
Example #2
0
    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)
Example #3
0
    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)