Иногда бывает необходимо сохранить данные для создания меша (массивы его вертексов и индексов полигонов) в текст, например, для дальнейшего использования в скрипте или аддоне.
Можно экспортировать меш в один из открытых форматов, например в *.obj, но если нужны только данные по вертексам и полигонам, можно использовать следующий несложный скрипт:
1 2 3 4 5 6 7 8 9 10 11 |
import bpy save_to_file = 'd:/file.txt' vertices = [(vert.co.x, vert.co.y, vert.co.z) for vert in bpy.context.object.data.vertices] faces = [[vert for vert in polygon.vertices] for polygon in bpy.context.object.data.polygons] with open(save_to_file, 'w') as file: file.write('verts = ' + str(vertices) + '\n' + 'faces = ' + str(faces) + '\n') file.close() |
Здесь мы задаем имя файла для сохранения данных, собираем два массива с данными по вертексам и по полигонам и сохраняем их в указанный файл.
Например для дефолтного куба мы получим следующий результат:
1 2 3 4 5 6 7 8 9 |
verts = [ (-1.0, -1.0, -1.0), (-1.0, -1.0, 1.0), (-1.0, 1.0, -1.0), (-1.0, 1.0, 1.0), (1.0, -1.0, -1.0), (1.0, -1.0, 1.0), (1.0, 1.0, -1.0), (1.0, 1.0, 1.0) ] faces = [ [0, 1, 3, 2], [2, 3, 7, 6], [6, 7, 5, 4], [4, 5, 1, 0], [2, 6, 4, 0], [7, 3, 1, 5] ] |
Сохраненные данные мы теперь можем использовать, например, скопировав в скрипт.
Следующий скрипт создаст в сцене дефолтный куб:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
verts = [ (-1.0, -1.0, -1.0), (-1.0, -1.0, 1.0), (-1.0, 1.0, -1.0), (-1.0, 1.0, 1.0), (1.0, -1.0, -1.0), (1.0, -1.0, 1.0), (1.0, 1.0, -1.0), (1.0, 1.0, 1.0) ] faces = [ [0, 1, 3, 2], [2, 3, 7, 6], [6, 7, 5, 4], [4, 5, 1, 0], [2, 6, 4, 0], [7, 3, 1, 5] ] import bpy mesh_data = bpy.data.meshes.new("new_mesh") mesh_data.from_pydata(verts, [], faces) mesh_data.update() mesh = bpy.data.objects.new("new_mesh", mesh_data) bpy.context.scene.collection.objects.link(mesh) |