Ejemplo n.º 1
0
def draw_agent(canvas, agent):
    """エージェントの描画"""
    column = agent.location[0]
    row = agent.location[1]
    draw_color_circle(canvas, column, row, AGENT_COLOR)
    draw_jp(canvas, '@', ((column + 0.5) * GRID_UNIT, (row + 0.5) * GRID_UNIT),
            TRUE_TYPE_FONT, GRID_UNIT, FONT_COLOR)
Ejemplo n.º 2
0
def draw_board(canvas, board):
    """盤の描画"""

    # 方眼紙
    # 水平線
    for i in range(0, board.height + 1):
        y_num = GRID_UNIT * i
        cv2.line(canvas,
                 point_for_cv2((0, y_num)),
                 point_for_cv2((board.width * GRID_UNIT, y_num)),
                 color_for_cv2(GRID_COLOR),
                 thickness=1)
    # 垂直線
    for i in range(0, board.width + 1):
        x_num = GRID_UNIT * i
        cv2.line(canvas,
                 point_for_cv2((x_num, 0)),
                 point_for_cv2((x_num, board.height * GRID_UNIT)),
                 color_for_cv2(GRID_COLOR),
                 thickness=1)

    # 文字 または 図形
    for (row, columns) in enumerate(board.rows):
        for (column, cell) in enumerate(columns):

            cell = cell.strip()
            ligature = False
            # Ligature(合字;リガチャ)
            if cell == '..':
                # '..' 半角スペース
                draw_space(canvas, column, row)
                ligature = True
            elif cell == 'Start':
                draw_color_circle(canvas, column, row, START_COLOR)
                draw_jp(canvas, 'S',
                        ((column + 0.5) * GRID_UNIT, (row + 0.5) * GRID_UNIT),
                        TRUE_TYPE_FONT, GRID_UNIT, FONT_COLOR)
                board.start_location = (column, row)
                ligature = True
            elif cell == 'Goal':
                draw_color_circle(canvas, column, row, GOAL_COLOR)
                draw_jp(canvas, 'G',
                        ((column + 0.5) * GRID_UNIT, (row + 0.5) * GRID_UNIT),
                        TRUE_TYPE_FONT, GRID_UNIT, FONT_COLOR)
                ligature = True
            elif cell == '┌r':
                draw_left_top_round_corner(canvas, column, row)
                ligature = True
            elif cell == '┐r':
                draw_right_top_round_corner(canvas, column, row)
                ligature = True
            elif cell == '┘r':
                draw_right_bottom_round_corner(canvas, column, row)
                ligature = True
            elif cell == '└r':
                draw_left_bottom_round_corner(canvas, column, row)
                ligature = True
            elif cell == '└r':
                draw_left_bottom_round_corner(canvas, column, row)
                ligature = True
            elif cell == '┘└':
                draw_left_bottom_round_corner(canvas, column, row)
                draw_right_bottom_round_corner(canvas, column, row)
                ligature = True
            elif cell in ('└┌', '┌└'):
                draw_left_bottom_round_corner(canvas, column, row)
                draw_left_top_round_corner(canvas, column, row)
                ligature = True
            elif cell == '┐┌':
                draw_right_top_round_corner(canvas, column, row)
                draw_left_top_round_corner(canvas, column, row)
                ligature = True
            elif cell in ('┘┐', '┐┘'):
                draw_right_bottom_round_corner(canvas, column, row)
                draw_right_top_round_corner(canvas, column, row)
                ligature = True
            elif cell == '│┌':
                draw_vertical_line(canvas, column, row)
                draw_left_top_round_corner(canvas, column, row)
                ligature = True
            elif cell == '┐│':
                draw_vertical_line(canvas, column, row)
                draw_right_top_round_corner(canvas, column, row)
                ligature = True
            elif cell == '┘│':
                draw_vertical_line(canvas, column, row)
                draw_right_bottom_round_corner(canvas, column, row)
                ligature = True
            elif cell == '│└':
                draw_vertical_line(canvas, column, row)
                draw_left_bottom_round_corner(canvas, column, row)
                ligature = True
            elif cell == '─┌':
                draw_horizontal_line(canvas, column, row)
                draw_left_top_round_corner(canvas, column, row)
                ligature = True
            elif cell == '─┌':
                draw_horizontal_line(canvas, column, row)
                draw_right_top_round_corner(canvas, column, row)
                ligature = True
            elif cell == '┘─':
                draw_horizontal_line(canvas, column, row)
                draw_right_bottom_round_corner(canvas, column, row)
                ligature = True
            elif cell == '─└':
                draw_horizontal_line(canvas, column, row)
                draw_left_bottom_round_corner(canvas, column, row)
                ligature = True

            if not ligature:
                for (_, char) in enumerate(cell):
                    if char == '↑':
                        draw_up_arrow(canvas, column, row)
                    elif char == '→':
                        draw_right_arrow(canvas, column, row)
                    elif char == '↓':
                        draw_down_arrow(canvas, column, row)
                    elif char == '←':
                        draw_left_arrow(canvas, column, row)
                    elif char == '─':
                        draw_horizontal_line(canvas, column, row)
                    elif char == '│':
                        draw_vertical_line(canvas, column, row)
                    elif char == '┌':
                        draw_left_top_corner(canvas, column, row)
                    elif char == '┐':
                        draw_right_top_corner(canvas, column, row)
                    elif char == '┘':
                        draw_right_bottom_corner(canvas, column, row)
                    elif char == '└':
                        draw_left_bottom_corner(canvas, column, row)
                    elif char == '┴':
                        draw_up_tee(canvas, column, row)
                    elif char == '├':
                        draw_right_tee(canvas, column, row)
                    elif char == '┬':
                        draw_down_tee(canvas, column, row)
                    elif char == '┤':
                        draw_left_tee(canvas, column, row)
                    else:
                        draw_jp(canvas, char, ((column + 0.5) * GRID_UNIT,
                                               (row + 0.5) * GRID_UNIT),
                                TRUE_TYPE_FONT, GRID_UNIT, FONT_COLOR)

            # チェック済みマーク
            if board.checked_table[row][column] == 'f':
                draw_color_cross(canvas, column, row, CHECKED_FORWARD_COLOR)
            elif board.checked_table[row][column] == 'b':
                draw_color_cross(canvas, column, row, CHECKED_BACKWARD_COLOR)
Ejemplo n.º 3
0
def main():
    """画像を出力します"""

    # カンマ区切り テキスト
    #    text = """\
    #  ,  ,┌ ,─ ,あ,─ ,┐
    #  ,  ,├ ,─ ,い,─ ,┤
    #  ,  ,├ ,─ ,う,─ ,┤
    # ─ ,─ ,┤ ,  ,  ,  ,├ ,─ ,─
    #  ,  ,├ ,─ ,え,─ ,┤
    #  ,  ,└ ,─ ,お,─ ,┘
    # """
    with open(FILE_PATH, encoding='utf8') as file:
        text = file.read()

    # 最大列、最大行を求めます
    lines = text.split('\n')
    max_row = len(lines)
    max_column = 0
    for (row, line) in enumerate(lines):
        cells = len(line.split(','))
        if max_column < cells:
            max_column = cells

    canvas_rows = max_row
    canvas_columns = max_column

    # キャンバス生成
    canvas = np.full(
        (canvas_rows * GRID_UNIT, canvas_columns * GRID_UNIT, CANVAS_CHANNELS),
        color_for_cv2(PALE_GRAY)[0],
        dtype=np.uint8)

    # 方眼紙
    # 水平線
    for i in range(0, canvas_rows + 1):
        y_num = GRID_UNIT * i
        cv2.line(canvas,
                 point_for_cv2((0, y_num)),
                 point_for_cv2((canvas_columns * GRID_UNIT, y_num)),
                 color_for_cv2(GRID_COLOR),
                 thickness=1)
    # 垂直線
    for i in range(0, canvas_columns + 1):
        x_num = GRID_UNIT * i
        cv2.line(canvas,
                 point_for_cv2((x_num, 0)),
                 point_for_cv2((x_num, canvas_rows * GRID_UNIT)),
                 color_for_cv2(GRID_COLOR),
                 thickness=1)

    # 文字 または 図形
    for (row, line) in enumerate(text.split('\n')):
        for (column, cell) in enumerate(line.split(',')):

            cell = cell.strip()
            # Ligature(合字;リガチャ)
            if cell == '..':
                # '..' 半角スペース
                draw_space(canvas, column, row)
                continue
            elif cell == '┌r':
                draw_left_top_round_corner(canvas, column, row)
                continue
            elif cell == '┐r':
                draw_right_top_round_corner(canvas, column, row)
                continue
            elif cell == '┘r':
                draw_right_bottom_round_corner(canvas, column, row)
                continue
            elif cell == '└r':
                draw_left_bottom_round_corner(canvas, column, row)
                continue
            elif cell == '└r':
                draw_left_bottom_round_corner(canvas, column, row)
                continue
            elif cell == '┘└':
                draw_left_bottom_round_corner(canvas, column, row)
                draw_right_bottom_round_corner(canvas, column, row)
                continue
            elif cell in ('└┌', '┌└'):
                draw_left_bottom_round_corner(canvas, column, row)
                draw_left_top_round_corner(canvas, column, row)
                continue
            elif cell == '┐┌':
                draw_right_top_round_corner(canvas, column, row)
                draw_left_top_round_corner(canvas, column, row)
                continue
            elif cell in ('┘┐', '┐┘'):
                draw_right_bottom_round_corner(canvas, column, row)
                draw_right_top_round_corner(canvas, column, row)
                continue
            elif cell == '│┌':
                draw_vertical_line(canvas, column, row)
                draw_left_top_round_corner(canvas, column, row)
                continue
            elif cell == '┐│':
                draw_vertical_line(canvas, column, row)
                draw_right_top_round_corner(canvas, column, row)
                continue
            elif cell == '┘│':
                draw_vertical_line(canvas, column, row)
                draw_right_bottom_round_corner(canvas, column, row)
                continue
            elif cell == '│└':
                draw_vertical_line(canvas, column, row)
                draw_left_bottom_round_corner(canvas, column, row)
                continue
            elif cell == '─┌':
                draw_horizontal_line(canvas, column, row)
                draw_left_top_round_corner(canvas, column, row)
                continue
            elif cell == '─┌':
                draw_horizontal_line(canvas, column, row)
                draw_right_top_round_corner(canvas, column, row)
                continue
            elif cell == '┘─':
                draw_horizontal_line(canvas, column, row)
                draw_right_bottom_round_corner(canvas, column, row)
                continue
            elif cell == '─└':
                draw_horizontal_line(canvas, column, row)
                draw_left_bottom_round_corner(canvas, column, row)
                continue

            for (_, char) in enumerate(cell):
                if char == '↑':
                    draw_up_arrow(canvas, column, row)
                elif char == '→':
                    draw_right_arrow(canvas, column, row)
                elif char == '↓':
                    draw_down_arrow(canvas, column, row)
                elif char == '←':
                    draw_left_arrow(canvas, column, row)
                elif char == '─':
                    draw_horizontal_line(canvas, column, row)
                elif char == '│':
                    draw_vertical_line(canvas, column, row)
                elif char == '┌':
                    draw_left_top_corner(canvas, column, row)
                elif char == '┐':
                    draw_right_top_corner(canvas, column, row)
                elif char == '┘':
                    draw_right_bottom_corner(canvas, column, row)
                elif char == '└':
                    draw_left_bottom_corner(canvas, column, row)
                elif char == '┴':
                    draw_up_tee(canvas, column, row)
                elif char == '├':
                    draw_right_tee(canvas, column, row)
                elif char == '┬':
                    draw_down_tee(canvas, column, row)
                elif char == '┤':
                    draw_left_tee(canvas, column, row)
                else:
                    draw_jp(canvas, char, ((column + 0.5) * GRID_UNIT,
                                           (row + 0.5) * GRID_UNIT),
                            TRUE_TYPE_FONT, GRID_UNIT, FONT_COLOR)

    # 書出し
    canvas = cv2.cvtColor(canvas, cv2.COLOR_BGR2RGB)  # BGRをRGBにする
    cv2.imwrite(f"./@share/out-istep1.png", canvas)

    cv2.imshow("make_image.py", canvas)
    cv2.waitKey(0)
    cv2.destroyAllWindows()