如何在Blender 4.0中使用knife_project与Python脚本?提示knife project.poll()预期view3d区域和编辑网格

0 投票
0 回答
19 浏览
提问于 2025-04-12 03:16

它提示我,knife project.poll() 需要一个视图3D区域和编辑网格。

我想用Python脚本导入两个Blender文件,然后切换到顶部视角,使用编辑模式下的网格投影切割来实现效果。但是在运行时我收到提示“know project.poll() 需要一个视图3D区域和编辑网格”,我该如何处理这个问题?以下是我运行的脚本。

import bpy
from bpy import context

scene = bpy.context.scene

bpy.ops.object.mode_set(mode='OBJECT')

bpy.ops.object.select_all(action='SELECT')
bpy.ops.object.delete()

file_path1 = 'C:/Users/aaa/Desktop/CD171/test/CD4.blend'
file_path2 = 'C:/Users/aaa/Desktop/CD171/test/CD2.blend'

target_name = 'button'
cutter_name = 'piece'

def import_blender_object(file_path, object_name):
    directory = file_path + "/Object/"
    bpy.ops.wm.append(filename=object_name, directory=directory)


import_blender_object(file_path1, target_name)
import_blender_object(file_path2, cutter_name)
button_obj = bpy.data.objects.get(target_name)
piece_obj = bpy.data.objects.get(cutter_name)

# assure button_obj and piece_obj exits
if not button_obj or not piece_obj:
    raise ValueError("can't find button obj。")

# select button as active object
bpy.ops.object.select_all(action='DESELECT')  # cancel choose all object
piece_obj.select_set(True)
bpy.context.view_layer.objects.active = piece_obj
button_obj.select_set(True)
bpy.context.view_layer.objects.active = button_obj
bpy.ops.object.mode_set(mode='EDIT')

# Maximize 3d view in all windows.
for window in context.window_manager.windows:
    screen = window.screen
    for area in screen.areas:
        if area.type == 'VIEW_3D':
            # get active space
            space = area.spaces.active       
            # set top view
            space.region_3d.view_perspective = 'ORTHO'
            space.region_3d.view_rotation = (1.0, 0.0, 0.0, 0.0)

            with context.temp_override(window=window, area=area):
                #bpy.ops.screen.screen_full_area()
                bpy.ops.mesh.knife_project()
            break

bpy.ops.object.mode_set(mode='OBJECT')

提前谢谢你!

0 个回答

暂无回答

撰写回答