I’m trying to figure out how multiple shape keys can be created preferably by using bmesh, while also generating geometry by creating vertices. My goal is to have 10 shape keys and each generated vertex is controlled by just one of the shape keys, essentially assigning each vertex into one of the shape keys, depending on the index of the said vertex.
This was my simplified attempt:
import bpy import bmesh # Create mesh. me = bpy.data.meshes.new('TestMesh') # Create object. ob = bpy.data.objects.new('TestObject',me) # Bmesh. bm = bmesh.new() # Add default shape key. ob.shape_key_add('Basis') # List of shape keys to loop through after creation. ShapeKeys =  # Base name for shape keys. KeyBaseStr = 'Shape' # Create 20 vertices. for iVert in range(1,21): # Index of shape key to add the vertex to. iGroup = (iVert-1) % 10 # Check if group shape key has already been created. if len(ShapeKeys) < (iGroup + 1): # Name of new shape key. SetName = KeyBaseStr + '_Set_' + str(iVert) # Create shape key and append to list. ShapeKeys.append(bm.verts.layers.shape.new(SetName)) # Shorthand for new key. sk = ShapeKeys[-1] print('created shape key #',len(ShapeKeys)) else: # Select existing shape key. sk = ShapeKeys[iGroup] print('using existing shape key #',iGroup+1) # Add vertex. bv = bm.verts.new(tuple([iVert, 0, 1])) # Assign vertex coordinates in selected shape key. bv[sk] = tuple([0, iVert, 2]) # Bind bmesh to mesh. bm.to_mesh(me) # Link object to scene. scene = bpy.context.scene scene.objects.link(ob) # Set as active and selected. scene.objects.active = ob ob.select = True
However, running the code results in an object with just one shape key rather than 10. All ten still appear to be created, but seem to not get binded to the mesh or the object. Any suggestions appreciated!