スポンサーリンク
当然だが、File → Export → Stanford(.ply)でply出力できる。
しかしその時、出力されたPLYファイルを見ると、頂点が重複している。
重複頂点を削除するオプションがどうも見つからなかったので、別の方法を考える。最も確実な方法は、おそらくMeshLab等の有名どころを使って重複頂点削除コマンドを実行すること。
MeshLab → [Filters] → [Cleaning and Repairing] → [Remove Duplicate Vertices]
あるいは、plyは比較的わかりやすいフォーマットなので出力プログラムを自力で書いてもいいかもしれない。
import bpy msh = bpy.context.active_object fname = 'C:/test/' + msh.name + '.ply' with open(fname, 'w') as myf: print( "ply" ,file=myf ) print( "format ascii 1.0" ,file=myf ) print( "element vertex",len(msh.data.vertices) ,file=myf ) print( "property float x" ,file=myf ) print( "property float y" ,file=myf ) print( "property float z" ,file=myf ) print( "property float nx" ,file=myf ) print( "property float ny" ,file=myf ) print( "property float nz" ,file=myf ) print( "element face",len(msh.data.polygons) ,file=myf ) print( "property list uchar int vertex_index" ,file=myf ) print( "end_header" ,file=myf ) for vt in msh.data.vertices: print(vt.co[0],vt.co[1],vt.co[2], " " ,end="",file=myf ) #頂点座標出力 print(vt.normal[0],vt.normal[1],vt.normal[2],file=myf ) #頂点法線出力 for f in msh.data.polygons: print( len(f.vertices) ," ", end="",file=myf ) #各面の頂点数出力 for v in f.vertices: print( v ," ", end="" ,file=myf ) #各面を構成する頂点の頂点番号を出力 print( "" ,file=myf )
MeshLabで頂点数の確認をする。Verticesが減っているのがわかる
以下のように、結果がやや異なる。頂点数の違いは重複と見なす距離の差だと思う(想像)。四角形以上のNgonの扱いも異なっている面法線の再計算の有無あたりかとも思うが不明。