コード例 #1
0
class Scrapings:
    def __init__(self, graphics_scene):
        self.graphics_scene = graphics_scene
        self.polyline = list()
        self.point_items = list()
        self.line_items = list()
        self.direction_is_confirmed = True
        self.ball = None
        self.chain = None

    def add_point(self, point):
        if not self.direction_is_confirmed:
            self.determine_direction(point)

        self.polyline.append(point)
        info = "scrapings"
        graphics_item = self.graphics_scene.draw_point(point,
                                                       color=QtCore.Qt.red,
                                                       info=info)
        graphics_item.is_selectable = False
        self.point_items.append(graphics_item)

        self.add_line()
        self.set_ball_and_chain()

    def add_polyline(self, polyline):
        if len(self.polyline) == 0:
            for point in polyline:
                self.add_point(point)
            self.direction_is_confirmed = False
            return

        if not self.direction_is_confirmed:
            self.set_both_directions(polyline)
        else:
            set_direction(polyline, self.polyline[-1])
        for point in polyline:
            self.add_point(point)

    def add_line(self):
        if len(self.polyline) == 1:
            return

        info = "scrapings"
        graphics_item = self.graphics_scene.draw_line(self.polyline[-2:],
                                                      color=QtCore.Qt.red,
                                                      info=info)
        graphics_item.is_selectable = False
        self.line_items.append(graphics_item)

    def determine_direction(self, point):
        if set_direction(self.polyline, point):
            self.point_items.reverse()
        self.direction_is_confirmed = True

    def set_both_directions(self, polyline):
        if set_direction(self.polyline, polyline[0], False):
            self.point_items.reverse()
        set_direction(polyline, self.polyline[-1])
        self.direction_is_confirmed = True

    def set_ball_and_chain(self):
        if len(self.polyline) == 1:
            point = self.polyline[0]
            self.ball = Ball(point.x, point.y)
            self.ball.is_selectable = False
            #self.graphics_scene.addItem(self.ball)
            self.chain = Chain(self.ball, None)
            self.chain.is_selectable = False
            self.graphics_scene.addItem(self.chain)
            return
        self.set_fixed_end(self.polyline[-1])

    def set_fixed_end(self, point):
        self.ball.setPos(point.x, point.y)

    def adjust(self, x, y):
        self.chain.adjust_free_end(x, y)

    def finish(self):
        #self.graphics_scene.removeItem(self.ball)
        self.graphics_scene.removeItem(self.chain)

        edge = Lane_edge(self.polyline, 'e')
        lane_edge_dialog = dialog.Dialogs.lane_edge_dialog
        lane_edge_dialog.set_lane_edge(edge)
        result = None
        if lane_edge_dialog.exec_():
            lane_edge_dialog.update(edge)
            result = edge

        for item in self.point_items:
            self.graphics_scene.removeItem(item)
        for item in self.line_items:
            self.graphics_scene.removeItem(item)

        return result