I'm trying to approach the beziers, but I'm still not able to understand the situations, so I based myself on a part of this code coming from Getting the list of points that describe a Curve without converting to mesh
In this case as a test I am trying to place a series of cubes in the positions of resolution_u, without success, since when I modify the bezier, the points are always the same, in addition they do not match with the global space, I am not sure that they should be converted with a matrix operation, I don't understand how. In addition I would like to take into account the rotation of these points, so that the cubes actually follow the trend of the curve with the related twists
import bpy ,bmesh ,mathutils
spline = bpy.data.curves[0].splines[0]
if len(spline.bezier_points) >= 2:
r = spline.resolution_u + 1
segments = len(spline.bezier_points)
if not spline.use_cyclic_u:
segments -= 1
points = []
for i in range(segments):
inext = (i + 1) % len(spline.bezier_points)
knot1 = spline.bezier_points[i].co
handle1 = spline.bezier_points[i].handle_right
handle2 = spline.bezier_points[inext].handle_left
knot2 = spline.bezier_points[inext].co
_points = mathutils.geometry.interpolate_bezier(knot1, handle1, handle2, knot2, r)
points.extend(_points)
for v in points:
mesh = bpy.data.meshes.new('Cube')
cube = bpy.data.objects.new('Cube', mesh)
bm = bmesh.new()
bmesh.ops.create_cube(bm, size=0.1)
bm.to_mesh(mesh)
bm.free()
bpy.context.scene.collection.objects.link(cube)
bpy.context.view_layer.objects.active = cube
cube.location = v
The result I get is this, I am completely in the dark with this type of operation, I hope you have patience.
