maybe there are easier ways, but this facilitated what I needed it for
def bmesh_from_pydata(verts=[], edges=[], faces=[]):
"""
Return a BMesh built from verts, edges, and faces.
:arg verts: The verts to use (required).
:type context: list
:arg edges: The verts to use (optional).
:type context: list
:arg faces: The verts to use (optional).
:type context: list
:return: a BMesh.
:rtype: :class:`bmesh.types.BMesh`
"""
if not verts:
print("verts data seems empty")
return
bm = bmesh.new()
[bm.verts.new(co) for co in verts]
bm.verts.index_update()
if faces:
for face in faces:
bm.faces.new(tuple(bm.verts[i] for i in face))
bm.faces.index_update()
if edges:
for edge in edges:
edge_seq = tuple(bm.verts[i] for i in edge)
try:
bm.edges.new(edge_seq)
except ValueError:
# edge exists!
pass
bm.edges.index_update()
return bm