# How to use script to translate, independently, all control points in a Bezier curve?

I'm writing a script to change Z, for every control point in a bezier, so the final curve will have the same initial shape, but will follow a 'descending' path, from start to end.

Steps can be either constant or heights can be read from a list/array.

With the following code, I've been unable to get bpy.ops.curve.select_nth(), inside a loop, giving me the result I was expecting (as in each control point being selected, individually, in order to be translated)...

    import bpy

segs = 5
height = 10
step = height / (segs + 1)

bpy.ops.curve.select_all()
bpy.ops.curve.subdivide(number_cuts=(segs - 1))
bpy.ops.curve.select_all()

for i in range(segs):
bpy.ops.curve.select_nth(nth=2)
bpy.ops.transform.translate(value=(0.0, 0.0, (step * i)))


Even outside the loop, it seems bpy.ops.curve.select_nth() does not work (or I'm missing something).

Any suggestion?

After some more research and tests, I got the results I wanted with

import bpy

segs = 7
alt = 1
step = alt / (segs + 1)

bpy.ops.curve.select_all()
bpy.ops.curve.subdivide(number_cuts=(segs - 1))
curve = bpy.context.object
bez_points = curve.data.splines[0].bezier_points

i = 0
for bez_point in bez_points:
bez_points[i].co.z = (i * step)
bez_points[i].handle_left.z = (i * step) - (step / 2)
bez_points[i].handle_right.z = (i * step) + (step / 2)
i += 1

for bez_point in bez_points:
bez_point.handle_left_type = 'AUTO'
bez_point.handle_right_type = 'AUTO'