For mesh objects with shape keys, you can access the vertex coordinates of the shape key using:

obj = C.scene.objects["Suzanne"]
for v in obj.data.shape_keys.key_blocks["My Shape Key"].data:

For mesh objects with a subsurf modifier, you can access the vertex coordinates of the mesh with the modifier applied using:

obj = C.scene.objects["Suzanne"]
m = obj.to_mesh(C.scene, True, "RENDER")
for v in m.vertices:

However, what do you do if a mesh object contains both a subsurf modifier and a shape key? I need to access the vertex coordinates of the shape key after the subsurf modifier is applied from python.

I tried to use the first way, but key_blocks["..."].data only holds the vertex coordinates of the mesh without the subsurf modifier. If use m = obj.to_mesh(...) instead, the shape_keys attribute of m is None.

I found an article that explains what you do in the blender GUI to create a new object with both modifiers and shape keys applied: Shape keys and applying subdivision surface modifier. Do I need to reproduce all these steps in python? It seems rather complicated and I find it strange that to_mesh is not able to do this.

Note: I am using Blender 2.79.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.