I want to get the last selected vertex. I tried with bm.select_history.active but this don't work.
Asked
Active
Viewed 2,951 times
6
-
1That should work, can you show a small example script that fails? – ideasman42 May 08 '15 at 01:55
2 Answers
8
You can walk the select history in reverse and find the first BMVert:
import bpy
import bmesh
ob = bpy.context.object
me = ob.data
bm = bmesh.from_edit_mesh(me)
for elem in reversed(bm.select_history):
if isinstance(elem, bmesh.types.BMVert):
print("Active vertex:", elem)
break
Note that select_history does not support selection operators like box and lasso select. They don't make a geometry element active, nor do they add to the history at all.
CodeManX
- 29,298
- 3
- 89
- 128
-
1Note that if this is to match the active vertex from Blender's perspective (all tools and draw code) - This should break after the first element. – ideasman42 Oct 19 '15 at 08:11
8
This function returns the active vertex,
Note that if the last selected element isn't a vertex, Blender considers there to be no active vertex.
import bpy
import bmesh
def bmesh_vert_active(bm):
if bm.select_history:
elem = bm.select_history[-1]
if isinstance(elem, bmesh.types.BMVert):
return elem
return None
ob = bpy.context.object
me = ob.data
bm = bmesh.from_edit_mesh(me)
print(bmesh_vert_active(bm))
ideasman42
- 47,387
- 10
- 141
- 223