我如何在 Blender 中为操作员访问由索引给出的多边形?
How can I in Blender acces a polygon, which is given by indices, for an operator?
在 Blender 2.77
我有一个多边形,引用为:
bpy.data.objects['Cube.001'].data.polygons[0]
和一个操作员:
bpy.ops.transform.resize(value=(0, 0, 1), constraint_axis=(False, False, False), constraint_orientation='GLOBAL', mirror=False, proportional='DISABLED', proportional_edit_falloff='SMOOTH', proportional_size=1)
如何让运算符在多边形上执行?
我试过:
bpy.data.objects['Cube.001'].data.polygons[0].select = True
选择它,但它似乎没有用。
看来您需要切换回对象模式才能执行...多边形[0]。select
# assume in EDIT... mode now
bpy.data.objects['Cube.001'].data.polygons[0]
bpy.ops.object.editmode_toggle()
bpy.data.objects['Cube.001'].data.polygons[0].select = True
bpy.ops.object.editmode_toggle()
bpy.ops.transform.resize(value=(0, 0, 1),
constraint_axis=(False, False, False),
constraint_orientation='GLOBAL',
mirror=False,
proportional='DISABLED',
proportional_edit_falloff='SMOOTH',
proportional_size=1)
虽然 blender 将网格数据存储在 object.data
内,但此数据仅在对象模式下有效,当您切换到编辑模式时,将创建网格数据的 bmesh 副本,它会替换 object.data
离开编辑模式时的内容。当您在编辑时使用重复网格时,您使用 python 对 object.data
所做的任何选择更改都不会影响编辑网格,并且在退出编辑模式时将被覆盖。
当您使用 bpy.ops.transform.resize()
它适用于活动项目,这意味着要调整多边形的大小,您需要处于编辑模式。在对象模式下,相同的运算符将调整对象的大小。
所以你可以使用
bpy.data.objects['Cube.001'].data.polygons[0].select = True
bpy.ops.object.mode_set(mode='EDIT')
bpy.ops.transform.resize(value=(0, 0, 1))
bpy.ops.object.mode_set(mode='OBJECT')
但使用 bmesh 是使用 python 编辑网格数据的首选方法。您可以找到使用 bmesh here and a more detailed example of editing the bmesh data here.
的示例
所以一个在 z 轴上缩放 face[0]
的简单示例是 -
import bpy
import bmesh
bm = bmesh.new()
bm.from_mesh(obj.data)
bm.faces.ensure_lookup_table()
bmesh.ops.scale(bm, verts=bm.faces[0].verts, vec=(0.0, 0.0, 1.0))
bm.to_mesh(obj.data)
bm.free()
在 Blender 2.77
我有一个多边形,引用为:
bpy.data.objects['Cube.001'].data.polygons[0]
和一个操作员:
bpy.ops.transform.resize(value=(0, 0, 1), constraint_axis=(False, False, False), constraint_orientation='GLOBAL', mirror=False, proportional='DISABLED', proportional_edit_falloff='SMOOTH', proportional_size=1)
如何让运算符在多边形上执行? 我试过:
bpy.data.objects['Cube.001'].data.polygons[0].select = True
选择它,但它似乎没有用。
看来您需要切换回对象模式才能执行...多边形[0]。select
# assume in EDIT... mode now
bpy.data.objects['Cube.001'].data.polygons[0]
bpy.ops.object.editmode_toggle()
bpy.data.objects['Cube.001'].data.polygons[0].select = True
bpy.ops.object.editmode_toggle()
bpy.ops.transform.resize(value=(0, 0, 1),
constraint_axis=(False, False, False),
constraint_orientation='GLOBAL',
mirror=False,
proportional='DISABLED',
proportional_edit_falloff='SMOOTH',
proportional_size=1)
虽然 blender 将网格数据存储在 object.data
内,但此数据仅在对象模式下有效,当您切换到编辑模式时,将创建网格数据的 bmesh 副本,它会替换 object.data
离开编辑模式时的内容。当您在编辑时使用重复网格时,您使用 python 对 object.data
所做的任何选择更改都不会影响编辑网格,并且在退出编辑模式时将被覆盖。
当您使用 bpy.ops.transform.resize()
它适用于活动项目,这意味着要调整多边形的大小,您需要处于编辑模式。在对象模式下,相同的运算符将调整对象的大小。
所以你可以使用
bpy.data.objects['Cube.001'].data.polygons[0].select = True
bpy.ops.object.mode_set(mode='EDIT')
bpy.ops.transform.resize(value=(0, 0, 1))
bpy.ops.object.mode_set(mode='OBJECT')
但使用 bmesh 是使用 python 编辑网格数据的首选方法。您可以找到使用 bmesh here and a more detailed example of editing the bmesh data here.
的示例所以一个在 z 轴上缩放 face[0]
的简单示例是 -
import bpy
import bmesh
bm = bmesh.new()
bm.from_mesh(obj.data)
bm.faces.ensure_lookup_table()
bmesh.ops.scale(bm, verts=bm.faces[0].verts, vec=(0.0, 0.0, 1.0))
bm.to_mesh(obj.data)
bm.free()