【Blender】をPythonで試してみた4
はじめに
こんにちは、がんがんです。
【Blender】をPythonで試してみた3にてcsvファイルに出力してみました。
そのときの出力が微妙だったので、配列周りを少しいじってみました。そのときの備忘録です。
問題点
まずは前回出力したcsvファイルについてみてみます。
X,Y,Zのそれぞれの座標が出力されています。
このままでもいい気はしますが、この座標を別のところで用いるためにはX,Y,Zが別々に分かれている必要があります。
ですので、以下のように分割していきます(以下は最終的な結果)。
参考記事
改善点
改善したところは
・1次元配列を多次元配列に ・csvのファイル出力を多次元配列に対応
コード
コードは以下の通りです。
変更点
import csv def output_csv(): verts = [ bpy.context.object.matrix_world * v.co \ for v in bpy.context.object.data.vertices ] csvLines = [[str(v) for v in co] for co in verts] with open("mesh.csv", mode="w") as f: writer = csv.writer(f, lineterminator="\n") writer.writerows( csvLines )
全体
import bpy from pathlib import Path import csv def delete_all(): for item in bpy.context.scene.objects: bpy.context.scene.objects.unlink(item) for item in bpy.data.objects: bpy.data.objects.remove(item) for item in bpy.data.meshes: bpy.data.meshes.remove(item) for item in bpy.data.materials: bpy.data.materials.remove(item) def add_cone(): bpy.ops.mesh.primitive_cone_add() output_csv() def output_csv(): verts = [ bpy.context.object.matrix_world * v.co \ for v in bpy.context.object.data.vertices ] csvLines = [[str(v) for v in co] for co in verts] with open("mesh.csv", mode="w") as f: writer = csv.writer(f, lineterminator="\n") writer.writerows( csvLines ) if __name__ == '__main__': delete_all() add_cone()