Python 中带有修改器的 Blender 3.0

Blender 3.0 with Modifiers in Python

来自 https://b3d.interplanety.org/en/how-to-apply-modifier-on-selected-objects/ 的以下脚本不起作用。我在 Python API 中使用 Blender 3.0。我尝试 运行 它创建了多维数据集,但没有创建任何内容。

我做错了什么?

import bpy
 
for obj in bpy.context.selected_objects:
    bpy.context.view_layer.objects.active = obj
    for modifier in obj.modifiers:
        if modifier.type == 'SUBSURF':
            bpy.ops.object.modifier_apply(
                modifier=modifier.name
            )
            

谢谢任何帮助将不胜感激。这是图片中的代码。

22 年 4 月 24 日编辑

你需要先select边的两个顶点。

我尝试 select 默认立方体的一个边缘并将其倾斜 python

    import bpy
    import bmesh
    
    obj = bpy.context.active_object  # Get selected object
    
    epsilon = 1e-5  # Threshold to account for floating point precision
    
    if obj:
        bpy.ops.object.mode_set(mode='EDIT')  # Go into edit mode
        bpy.ops.mesh.select_mode(type="EDGE")  # Switch to edge select mode
    
       
        bm = bmesh.from_edit_mesh(obj.data)  # Create bmesh object for easy mesh evaluation
        obj = bpy.context.active_object
        obj.data.polygons[2].select = True
        for e in bm.edges:  # Check all edges
        
            if e.index  == 0:
                print ("abc")
                first_pos = e.verts[0].co  # Get first vert position of this edge
                other_pos = e.verts[1].co  # Get second vert position of this edge
    
                e.select_set(abs(first_pos.x - other_pos.x) <= epsilon and abs(first_pos.y - other_pos.y) <= epsilon)
            
        bmesh.update_edit_mesh(obj.data)  # Update the mesh in edit mode
        bpy.ops.object.modifier_set_active(modifier="Bevel")
        bpy.ops.object.modifier_add(type='BEVEL')
    
        bpy.context.object.modifiers["Bevel"].segments = 10
        bpy.context.object.modifiers["Bevel"].width = 0.37
    

也许我应该再问一个问题。

Blender bevel selected edge of a default cube with python

您的脚本运行良好... 您确定在启动脚本之前已经 select 所有对象了吗?

也许您希望它适用于场景中的所有对象,因此将 context.selectd_objects 替换为 context.scene.objects