With this simple script you can "track" selected vertex. Script make an empty object that follows selected vertex position. This script work also with armature animation and that's the main reason why I made this simple experimental script.
About & Preview
I face some problems with my experimental CoinRig while trying "Bake Action" to my object and move data to After Effects. I do not get this to work with "Bake Action" or neither Collada format methods, becase rig's x,y,z doesn't work properly at this case. So I want to achieve other method to get my position data from that object. More precisely in this case I just want to select couple vertices and use their position data. So, I made this simple script for that process and it works! There could be already similar scripts, but I want to make my own and learn some more Blender Python API.
And here is that simple "FollowVertexPos.py" script that I have used in this case.
import bpy # Set active scene and object activeScene = bpy.context.scene currentObj = bpy.context.active_object # Set custom empty name emptyName = 'VertexTarget' # Get selected vertex index number vertexIndex = [i.index for i in bpy.context.active_object.data.vertices if i.select] # Create empty if emptyName not in bpy.data.objects: bpy.ops.object.empty_add(type='PLAIN_AXES') bpy.context.active_object.name = emptyName targetEmpty = bpy.data.objects.get(emptyName) # Run only if mesh is selected if currentObj.type == 'MESH': # Loop current frame range for frame in range(activeScene.frame_end + 1): # Set active frame activeScene.frame_set(frame) # Make meshdata meshdata = currentObj.to_mesh( scene=activeScene, apply_modifiers=True, settings='PREVIEW' ) # Loop meshdata vertices for vertex in meshdata.vertices: # Selected vertex only if vertex.index == vertexIndex: # Calculate world coords for the empty newCoord = meshdata.vertices[vertex.index].co newCoord = currentObj.matrix_world * newCoord # Set new location for empty and make keyframe targetEmpty.location = newCoord targetEmpty.keyframe_insert(data_path='location', frame=(frame)) # Remove meshdata data bpy.data.meshes.remove(meshdata) else: print('SELECT MESH OBJECT!')
Download this script here:Blender Script FollowVertexPos.zip (991 downloads)
How To Use Script
- Load Script to Blender.
- Select one vertex from object.
- Run script.
- Thats it. It makes empty object automatically for you and keyframe position to every frame.
You can select only one vertex with this script version. It's not big deal to make it possible to use with multi selection, but I do not need it in this case.
If you make your own custom script based this one or find this script useful, please drop a comment below...
Links that I found useful in this case: