繁体   English   中英

在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

选择它,但似乎没有用。

当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的示例,并在此处找到更详细的编辑bmesh 数据的示例。

因此,在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()

看来您需要切换回OBJECT模式才能执行... polygons [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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM