Playing with SolidPython

Most of my 3D models are for industrial use and therefore made with VariCAD. I have done some "artistic" things in Blender, but I am to old to learn Blender properly. Today I was looking for a 3D modell of a pencil holder to organize my physical desktop. There was nothing of the shelf that fullfills my needs, but some honeycomb designs were promising. So I liked to tweak them, but how?

One of the honeycomb designs I stumbled over was https://www.thingiverse.com/thing:1978711.

The author not only offered its STL or G-Code but also an OpenSCAD file.

I already knew that openSCAD is a declarative language to design 3D-Models. But the openSCAD language was never appealing to me.

On the other hand I have looked out for a paramtetric 3D modelling language for some time:

One can use Blender from Python.

One an use openSCAD from Python

Blender is great but too heavy for my purpose.

SolidPython is an API to openSCAD that generates SCAD-Files from Python Code.

Today I gave it a try.

On a quarter hours work I was able to translate the SCAD-Code of https://www.thingiverse.com/stuffperson into SolidPython code.

`import mathfrom solid import *from subprocess import runimport numpy as npRADIUS = 10WALL_THICKNESS = 0.2HORIZONTAL_STEP = math.sqrt(3) * RADIUSVERTICAL_STEP = 6 / 4. * RADIUSV = np.array((0, HORIZONTAL_STEP, 0))U = np.array((VERTICAL_STEP, 1 / 2. * HORIZONTAL_STEP, 0))HEXES = [    [ 3, 0],[ 2, 1],[ 1, 2],[ 0, 3],    [ 3,-1],[ 2, 0],[ 1, 1],[ 0, 2],[-1, 3],    [ 3,-2],[ 2,-1],[ 1, 0],[ 0, 1],[-1, 2],[-2, 3],    [ 3,-3],[ 2,-2],[ 1,-1],[ 0, 0],[-1, 1],[-2, 2],[-3, 3],    [ 2,-3],[ 1,-2],[ 0,-1],[-1, 0],[-2, 1],[-3, 2],    [ 1,-3],[ 0,-2],[-1,-1],[-2, 0],[-3, 1],    [ 0,-3],[-1,-2],[-2,-1],[-3, 0]]def hex(r):    result = circle(r = r, segments = 6)    return resultdef hexcomb(r):    result =difference()(        hex(r),        hex(r-WALL_THICKNESS),    )    return resultdef hexgrid(primitive=None):    shapes = []    hc = primitive(RADIUS)    for x,y in HEXES:        translation = x*V + y*U        shapes.append(translate(translation)(hc))    result = union()(*shapes)    return resultdef main():    base_shape = hexgrid(hex)    base = linear_extrude(height = 1, slices = 1, twist = 0, scale=1)(base_shape)    combs_shape = hexgrid(hexcomb)    extrusion = linear_extrude(height = 60, slices = 80, twist = 20, scale=1.5)(combs_shape)    model = union()(            base,            extrusion    )    out = intersection()(        model,        sphere(r=80)    )    scad_render_to_file(out, 'out.scad')    run(["openscad", "-o",  "out.stl", "out.scad"])main()`

And the 3dModel renders quite nicely

SolidPython is good way for working with openSCAD to generate STL models.

But openSCAD lacks an export to STEP or other Voluminal 3D formats. This places openSCAD and SolidPython at an deserted position.