Flat - Grid

Imports

# If bezmerizing is not installed, run
!pip install https://github.com/aparrish/bezmerizing/archive/master.zip
from flat import document, shape, rgb, rgba
from bezmerizing import Path, Polyline
from IPython.display import SVG, display
import numpy as np
import random
import itertools
from sympy.utilities.iterables import multiset_permutations

Functions

This section defines functions that will be used later.

# Display a flat page here in the notebook
def show(page):
    display(SVG(page.svg()))
       
# Draw a grid of horizontal and vertical lines based on 
# given coordinates
def draw_grid(page, x_coords, y_coords, color=rgb(200, 200, 200)):
    
    # Get minimum and maximum values 
    min_x, max_x = min(x_coords), max(x_coords)
    min_y, max_y = min(y_coords), max(y_coords)
    
    # Draw vertical lines
    for x in list(x_coords):
        line = shape().stroke(color).line(x, min_y, x, max_y)
        page.place(line)

    # Draw horizontal lines
    for y in list(y_coords):
        line = shape().stroke(color).line(min_x, y, max_x, y)
        page.place(line)

Flat Document

The following code defines the general setup of the document. It has width and height and a margin. The size of the grid is calculated as the size of the document minus the margin on all sides of the document.

# Width and height of the document
width, height = 400, 400

# Margin between border of the document and
# border of the grid
margin = 10

# Size of the grid
grid_width = width - 2*margin
grid_height = height - 2*margin

# Create the document
d = document(width, height, 'pt')

Grid Definition

The grid is defined through the number of points on the x and y axis. In the next step the coordinates for each point are calculated. This is done with the linspace() function from Numpy (np). It distributes the points on a given range, in this case the size of the grid. It also takes the margin into account.

# Number of points per row 
# (number of cells = row -1)
grid_x = 6
grid_y = 6

# Create coordinates
coords_x = np.linspace(margin, margin+grid_width, grid_x)
coords_y = np.linspace(margin, margin+grid_height, grid_y)

# Print the coordinates to check they are correct
print(coords_x)
print(coords_y)
[ 10.  86. 162. 238. 314. 390.]
[ 10.  86. 162. 238. 314. 390.]

Draw the grid

# Add a page to the document
page = d.addpage()

# Call the function to draw a grid
# As input it takes the list of coordinates defined above
draw_grid(page, coords_x, coords_y)

# Feed the page into the show() function to display it inside the notebook
show(page)
_images/flat_01_grid_11_0.svg