2017-08-24 95 views
0

我发现这段代码在对象模式下选择带给定索引的人脸: bpy.data.objects ['Cube.001']。data.polygons [0] .select如何通过对象模式在编辑模式下编辑信息

我想在select_similar,select_all(action'INVERT')和delete(type ='ONLY_FACE')等对象模式下做一些其他操作。

我试着找到关于.data.polygons [0]的信息。选择inicial api,但没有得到任何帮助。

我想在对象模式下执行此操作,而无需进入编辑模式。

回答

0

data.polygons[0].select是一个面的布尔属性,它是一个MeshPolygon对象。它存储了一个真实或错误的价值,没有什么可以了解的。

选择相似的运算符只是简单地遍历面并将选择设置为true(如果它与条件匹配)。

import bpy 

obj_data = bpy.context.object.data 

for f in obj_data.polygons: 
    if f.area < 0.1: 
     f.select = True 
    else: 
     f.select = False 

反选

for f in obj_data.polygons: 
    f.select = not f.select 

请注意,这只会在目标模式下工作的编辑模式使用bmesh并覆盖在退出编辑模式的任何改变。您会发现bmesh是编辑网格数据的更好选择,您不必将对象置于编辑模式即可使用它。

import bpy 
import bmesh 

obj_data = bpy.context.object.data 

bm = bmesh.new() 
bm.from_mesh(obj_data) 

bm.faces.ensure_lookup_table() 
bad_faces = [f for f in bm.faces if f.calc_area() < 0.1] 

bmesh.ops.delete(bm, geom=bad_faces, context=5) 

bm.to_mesh(obj_data) 
bm.free() 
obj_data.update() 

如果obect是在编辑模式下,你会用from_edit_meshupdate_edit_mesh。你可以在bmesh.ops.delete()here的环境参数中找到一些信息。

+0

非常感谢!这真的有帮助。没有考虑bmesh,需要研究它:)但我不明白如何执行编辑的网格渲染。我正在使用Python脚本使用动画节点,如果我将渲染,我得到'上下文'对象没有属性'对象' –

+0

是否是动画节点树中的脚本节点?你有'上下文'或'上下文' - 全部小写?用失败的脚本询问另一个问题。您会发现[blender.stackexchange.com](https://blender.stackexchange.com)对混合器特定脚本更有帮助。 – sambler