Flat - Points


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


This section defines functions that will be used later.

# Display a flat page here in the notebook
def show(page):
# 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)

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

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)

[ 10.  86. 162. 238. 314. 390.]
[ 10.  86. 162. 238. 314. 390.]

Draw points (circles) on the grid

The coordinates of the points are defined in the lists coords_x and coords_y. These can be accessed via their index, starting from 0. This means the point in the top left corner has the coordinates coords_x[0], coords_y[0], and the point in the bottom right corner has the coordinates coords_x[5], coords_y[5] (in a grid with 6 lines / 5 cells).

# 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)

# Draw circles
fig = shape().fill(rgb(255, 0, 0)).nostroke().circle(coords_x[0], coords_y[1], 5)

fig = shape().fill(rgb(0, 255, 0)).nostroke().circle(coords_x[2], coords_y[0], 5)

fig = shape().fill(rgb(0, 0, 255)).nostroke().circle(coords_x[5], coords_y[4], 5)

# Feed the page into the show() function to display it inside the notebook