I am new to Blender. I have been wondering how to draw a parametric column or cylinder with varying radius using a python script. The radius is a function of cylinder height (polynomial function). Could anyone provide examples for me to look at? Thank you.

I also wonder if the add_mesh_3d_function_surface.py will help. Thanks.


Using bmesh and screw

Make a simple bmesh edge on zx plane using poly function, then spin it around the z axis. I've added a screw modifier to do the spinning, and commented out the bmesh spin operator.

enter image description here

import bpy
import bmesh
from math import radians

def poly(x):
    return   0.2 * x * x - x + 1.3

bm = bmesh.new()

# draw on zx plane
v0 = bm.verts.new((poly(0), 0, 0))
for dz in range(1, 100):
    z = dz / 50
    v = bm.verts.new((poly(z), 0, z))
    edge = bm.edges.new((v0, v))
    v0 = v
# could spin here I've added screw mod instead
#bmesh.ops.spin(bm, geom=bm.edges, axis=(0, 0, 1), angle=radians(360), steps=16) 

ob = bpy.context.object
me = ob.data
# default screw modifier spins 360 on z
screw = ob.modifiers.new("Screw", 'SCREW')
  • $\begingroup$ Wow, nice. Thank you so much for the solution! Do you think I can do it with bezier curve? I found this smooth curve function in Blender but it looks much more intricate. $\endgroup$ – HSChan Jul 17 '18 at 21:13

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.