it promat me knife project.poll() expected a view3d region & edit mesh.
I want to use Python script to import 2 blender files, then switch to the top perspective and use edit mode grid projection cutting to achieve the effect? But when I am prompted at runtime with 'know project. poll() expected a view3d region&edit mesh', how should I handle this issue? The following is the script I ran.
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')
Thank you in advance!