CORRUGATED BEAD, Making Stippled Pen Plotter Art and Simple Blender Generative Art

Corrugated Bead, plotted on paper



A simple shape such as a sphere can be beautiful, e.g. the earth, the sun or a peach.   I decided to make some compositions out of a simple corrugated or fluted bead.   I designed the bead in Fusion 360 and exported the STL. 

Corrugated Bead in Fusion360

 I then imported a single copy of this STL into Blender, adjusted the scale and rotated it slightly,  and   rendered it.


Corrugated Bead Imported in Blender and Rendered


I created a python script with PIL and svgwrite, and the corrugated bead png that takes the blue layer of RGB, looks at 10x10 pixel areas gets the average pixel value (0-255) and rounds to nearest 50, then draws concentric circles at center of 10x10 in proportion to the rounded pixel value, to create a stippled version of corrugated bead that is an SVG.
bead1.stl the stl file of the fluted bead I created

I used vpype to scale the image, rotate it 90 degrees, give 2cm margins on a4 size and line sort.  I translated by 8mm to the right to center because the paper is actually 9 in x 12 in.

Screenshot of Corrugated Bead in Inkscape


I had to replace the servo on the plotter.  Since doing this I am using M280P0S40 for pen down and M280P0S55 for pen up.  The paper I am using has a slight curvature, if the paper placed in the "convex up" orientation the pen will sometimes hit the paper even when in the pen up state, so I try to put the paper in a "concave up" orientation and tape the edges down.  

Next, I created a simple python script in blender that helped me generate the kind of scenes I was envisioning. 

I create a plane at the base of the scene.  I add 10 fluted beads randomly on the plane, scale the size down and then rotate them randomly on each axis.  I rendered several iterations of this scene. 

Here is the python script:


import bpy

import random


bpy.ops.mesh.primitive_plane_add(size=2, enter_editmode=False, align='WORLD', location=(0, 0, -1), scale=(1, 1, 1))

bpy.ops.transform.resize(value=(15, 15, 1), orient_type='GLOBAL', orient_matrix=((1, 0, 0), (0, 1, 0), (0, 0, 1)), orient_matrix_type='GLOBAL', mirror=False, use_proportional_edit=False, proportional_edit_falloff='SMOOTH', proportional_size=1, use_proportional_connected=False, use_proportional_projected=False)



#bpy.ops.mesh.primitive_ico_sphere_add(location=(0, 0, 0))

for x in range(10):

    rand_x = random.randint(-10, 10)

    rand_y = random.randint(-10, 10)

    rand_x_rotate = random.uniform(-1, 1)

    rand_y_rotate = random.uniform(-1, 1)

    rand_z_rotate = random.uniform(-1, 1)    

    location = (rand_x, rand_y, 0)

    bpy.ops.import_mesh.stl(filepath="/Users/kevinlease/desktop/bead1.stl")

    bpy.ops.transform.resize(value=(0.1, 0.1, 0.1), orient_type='GLOBAL', orient_matrix=((1, 0, 0), (0, 1, 0), (0, 0, 1)), orient_matrix_type='GLOBAL', mirror=False, use_proportional_edit=False, proportional_edit_falloff='SMOOTH', proportional_size=1, use_proportional_connected=False, use_proportional_projected=False)

    bpy.ops.transform.translate(value=(rand_x, rand_y, 0), orient_axis_ortho='X', orient_type='GLOBAL', orient_matrix=((1, 0, 0), (0, 1, 0), (0, 0, 1)), orient_matrix_type='GLOBAL', constraint_axis=(False, True, False), mirror=False, use_proportional_edit=False, proportional_edit_falloff='SMOOTH', proportional_size=1, use_proportional_connected=False, use_proportional_projected=False)

    bpy.ops.transform.rotate(value=rand_z_rotate, orient_axis='Z', orient_type='VIEW', orient_matrix=((-0.158019, 0.987402, -0.00819312), (-0.667753, -0.100744, 0.737534), (0.727418, 0.122015, 0.67526)), orient_matrix_type='VIEW', mirror=False, use_proportional_edit=False, proportional_edit_falloff='SMOOTH', proportional_size=1, use_proportional_connected=False, use_proportional_projected=False)

    bpy.ops.transform.rotate(value=rand_y_rotate, orient_axis='Y', orient_type='VIEW', orient_matrix=((-0.158019, 0.987402, -0.00819312), (-0.667753, -0.100744, 0.737534), (0.727418, 0.122015, 0.67526)), orient_matrix_type='VIEW', mirror=False, use_proportional_edit=False, proportional_edit_falloff='SMOOTH', proportional_size=1, use_proportional_connected=False, use_proportional_projected=False)

    bpy.ops.transform.rotate(value=rand_x_rotate, orient_axis='X', orient_type='VIEW', orient_matrix=((-0.158019, 0.987402, -0.00819312), (-0.667753, -0.100744, 0.737534), (0.727418, 0.122015, 0.67526)), orient_matrix_type='VIEW', mirror=False, use_proportional_edit=False, proportional_edit_falloff='SMOOTH', proportional_size=1, use_proportional_connected=False, use_proportional_projected=False)

Here are some of the scenes I created:

multibead3


multibead2





multibead1


Comments