创建一个具有给定数量的顶点的段,并挂钩并清空该段中的每个顶点

Create a a segment with the given number of verts and hook and empty to every verts in the segment

我如何创建一个具有例如 30 个顶点的线段,然后通过 Blender 3d 中的 Python 将带有 Hook 父级的空连接到线段中的每个顶点?

我要说这很令人沮丧,但在尝试了几种不同的方法之后,这是我开始工作的一种方式。

import bpy
import bmesh

num_verts = 30

scn = bpy.context.scene
D = bpy.data.objects

verts = []
edges = []
for i in range(num_verts):
    verts += [(i, 0.0, 0.0)]
    if i > 0:
        edges += [(i, i-1)]

mesh_data = bpy.data.meshes.new("hooked verts")
mesh_data.from_pydata(verts, edges, [])
mesh_data.update()
obj = D.new("Hooked line", mesh_data)
obj.select = True
scn.objects.link(obj)
scn.objects.active = obj

bpy.ops.object.mode_set(mode='EDIT')

for i in range(len(obj.data.vertices)):
    bm = bmesh.from_edit_mesh(obj.data)
    bpy.ops.mesh.select_all(action='DESELECT')
    bm.verts.ensure_lookup_table()
    bm.verts[i].select = True
    bpy.ops.object.hook_add_newob()
    bpy.context.selected_objects[0].name = 'Hook'
    bm.free()

bpy.ops.object.mode_set(mode='OBJECT')

要将挂钩分配给顶点,对象需要处于具有所需顶点的编辑模式 selected。添加钩子操作符似乎把编辑网格数据弄得一团糟,因此在创建第一个钩子修改器后,网格数据不再有效。解决方案 - 在创建每个挂钩后重新创建 bmesh 数据和 select 一个顶点。