使用给定数量的顶点创建一个段并挂钩并清空段

时间:2016-09-17 15:29:32

标签: python blender segment vertices

如何创建一个包含例如30个谓词的段,然后将一个空的Hook父项连接到段中的每个verit,所有这些都通过Blender 3d中的Python?

1 个答案:

答案 0 :(得分:0)

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

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')

要为顶点指定一个钩子,该对象需要处于编辑模式,并选择所需的顶点。似乎add钩子操作符使编辑网格数据变得混乱,因此在创建第一个钩子修改器之后,网格数据不再有效。解决方案 - 重新创建bmesh数据并在创建每个钩子后选择一个顶点。