Source code for rubix_cube.plot_cube_2d

# -*- coding: utf-8 -*-
"""2-D :class:`Rubix Cube <Cube>` plot rendering Module.

Module Description
==================

    *   :func:`plot_cube_2D` method for plotting the :class:`Rubix Cube <Cube>`
        on a :class:`matplotlib Axes <matplotlib.axes.Axes>`.

        .. figure:: ./../../misc/plot_cube_2D.png
           :name: plot_cube_2d_img
           :align: center
           :width: 75%

           All 6 faces of the :class:`Rubix Cube <Cube>` are visible in this 2D
           rendering.

Module Contents
===============

.. moduleauthor:: David Grethlein <djg329@drexel.edu>

"""

import os
import sys
import json

import warnings

from typing import List, Tuple, Dict

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as patches

from .cube import Cube


FACE_COORDS = {'FRONT_FACE' : (-150,50),
               'LEFT_FACE'  : (-450,50),
               'RIGHT_FACE' : (150,50),
               'BACK_FACE'  : (450,50),
               'UP_FACE'    : (-150,350),
               'DOWN_FACE'  : (-150,-250)}


[docs]def plot_cube_2D(ax : plt.Axes , cube : Cube): """Plots the :class:`Rubix Cube <Cube>` on a :class:`matplotlib Axes <matplotlib.axes.Axes>` on a flattened 2-D representation. Args: ax (plt.Axes): The :class:`matplotlib Axes <matplotlib.axes.Axes>` on which the plotting will be done. cube (Cube): :class:`Rubix Cube <Cube>` that will be plotted in a flattened 2-D representation of all 6 sides. Returns: None. """ # Ensures the arguments are well-formed. if cube.is_well_formed()\ and isinstance(ax , plt.Axes): for face_name in cube.faces: # Grabs the local coordinates for each face face_local_coords = FACE_COORDS[face_name] # Grabs the face values for filling in the plot for each tile # in the 2-D representation. face_values = cube.faces[face_name] #print(f"{face_name} : ") for row_idx , row in enumerate(face_values): for col_idx , color_val in enumerate(row): tile_coords = (face_local_coords[0] + 100*col_idx, face_local_coords[1] - 100*row_idx) #print(f"\t[{row_idx},{col_idx}] : {tile_coords}") rect = patches.Rectangle(xy=tile_coords, width=100, height=100, facecolor=str(color_val), lw=2, edgecolor='black') ax.add_patch(rect)