1
$\begingroup$

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:
    print(v.co)

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:
    print(v.co)

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.

$\endgroup$

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.