# knife_project in python

I am a blender noob trying to use bpy.ops.mesh.knife_project() in my script. It fails with the message:

RuntimeError: Operator bpy.ops.mesh.knife_project.poll() expected a view3d region & editmesh

Already tried this method. It fails with the same message

Here is the relevant part of my code. insulator is the active mesh object. knife is the curve object to be used as knife.

knife.select = True
insulator.select = True

override = context.copy()
for area in bpy.context.screen.areas:
if area.type == 'VIEW_3D':
override['area'] = area
override['space'] = area.spaces[0]
for region in area.regions:
if region.type == 'WINDOW':
override['region'] = region
break
break

bpy.ops.view3d.viewnumpad(override, type = 'BOTTOM', align_active = True)
bpy.ops.view3d.view_persportho(override)

#bpy.ops.object.mode_set(mode = 'EDIT', toggle = False)
#bpy.ops.mesh.select_all(action='DESELECT')
bpy.ops.mesh.knife_project(override, cut_through = True)


The view changes to bottom and orthographic view, but the script halts at knife_project.

Any ideas?

• I couldn't get it to fully work, but after selecting, you need to set the active object (bpy.context.scene.objects.active = insulator) and set it to edit mode. However, I could only get it to work when the object to be cut was selected in the viewport before running the script. In general though, it is better to avoid bpy.ops see: blender.stackexchange.com/questions/2848/why-avoid-bpy-ops Apr 15 '16 at 22:30
• I would love to avoid bpy.ops in this case, but was unable to find a bmesh alternative to knife_project. Do you know of one?
– John
Apr 15 '16 at 23:53
• Sorry, I'm not too knowledgeable in the bmesh area, all I was able to find was bisect_edges, here: blender.stackexchange.com/questions/39540/cut-bmesh-with-python Apr 16 '16 at 0:10