【问题标题】:How to edit information in edit mode via object mode如何通过对象模式在编辑模式下编辑信息
【发布时间】:2018-02-02 16:52:00
【问题描述】:

我发现这段代码在对象模式下选择具有给定索引的面: bpy.data.objects['Cube.001'].data.polygons[0].select

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

我试图在官方 api 中查找有关 .data.polygons[0].select 的信息,但没有成功。

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

【问题讨论】:

    标签: python blender


    【解决方案1】:

    data.polygons[0].select 是一个人脸的布尔属性,它是一个MeshPolygon 对象。它存储一个真值或假值,您无法了解它。

    选择相似操作符只是简单地遍历面,如果匹配条件则将选择设置为真。

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

    如果对象处于编辑模式,您将使用from_edit_meshupdate_edit_mesh。您可以找到有关 bmesh.ops.delete() here 的上下文参数的一些信息。

    【讨论】:

    • 非常感谢!这真的很有帮助。没有考虑bmesh,需要研究它:)但我不明白如何渲染编辑过的网格。我正在使用带有 python 脚本的动画节点,如果我要渲染,我会得到 'Context' 对象没有属性 'object'
    • 那是动画节点树中的脚本节点吗?你有Contextcontext - 全部小写吗?用失败的脚本问另一个问题。你会发现blender.stackexchange.com 对搅拌机特定的脚本更有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-13
    相关资源
    最近更新 更多