2
$\begingroup$

I'm trying to override the context, in order to run this Delaunay Triangulation add-on. I'm using the approach suggested in this answer:

for area in bpy.context.screen.areas:
    if area.type == 'VIEW_3D':
        override = bpy.context.copy()
        override['area'] = area
        bpy.ops.delaunay.triangulation(override)
        break

However the add-on still fails when it tries to create a mesh, due to incorrect context:

Error: Traceback (most recent call last):
  File    "/Applications/Blender/blender.app/Contents/Resources/2.74/scripts/addons/delaunay_voronoi/delaunayVoronoiBlender.py", line 97, in execute
    bpy.ops.view3d.snap_cursor_to_selected()#move 3d-cursor
  File "/Applications/Blender/blender.app/Contents/MacOS/../Resources/2.74/scripts/modules/bpy/ops.py", line 189, in __call__
    ret = op_call(self.idname_py(), None, kw)
RuntimeError: Operator bpy.ops.view3d.snap_cursor_to_selected.poll() failed, context is incorrect

The same error message appears four or five times, but always relating to line 97 of the add-on's script (bpy.ops.view3d.snap_cursor_to_selected()).

Am I overriding the context correctly? Is there anything else I could try?

$\endgroup$

1 Answer 1

1
$\begingroup$

The simplest remedy is to make the script not depend on the 3d cursor at all. The add-on in this case seems to use the 3d cursor somewhat arbitrarily to store the location of the selected object.

# replace these two lines
bpy.ops.view3d.snap_cursor_to_selected() # move 3d-cursor
tinObj.location = bpy.context.scene.cursor_location #position object at 3d-cursor

# with this line
tinObj.location = obj.location.copy()

it will do the triangulation as desired.

>>> bpy.ops.delaunay.triangulation()
0 duplicates points ignored
0 z colinear points excluded
Triangulate 6 points...
4 triangles
Create mesh...
Info: Mesh created (4 triangles)
{'FINISHED'}
$\endgroup$
0

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .