pmdエクスポートその1
pmdエクスポートの原型を作成。頂点、面、マテリアル、ボーンまで。
http://sourceforge.jp/projects/meshio/wiki/FrontPage
(まだ、IK、表情その他諸々が未実装です)
途中swigのstd::vectorに頂点情報を充填するところで罠にはまった件について。
std::vector<Vertex> vertices;
のような元ソースをラップしたswigの頂点配列に対してpythonで
for v in blender_vertices: vertex=swig.Vertex() vertex.x=v.x vertex.y=v.y vertex.z=v.z vertices.append(vertex)
というようなコードを書いたところ2回目にエクスポータを実行したときに常にクラッシュするようになってしまった。swig.Vertex()のところでnewを呼ぶことは承知のうえだったのだがよろしくないようだ。なんとなくswig.Vertexのインスタンスが開放されずに延々と溜まっていると推測。
回避策としてswigインターフェースで
%extend meshio::pmd::IO {
meshio::pmd::Vertex * addVertex()
{
$self->vertices.push_back(meshio::pmd::Vertex());
return &($self->vertices.back());
}
}
というようにポインタを返す追加メソッドを書いてみたところクラッシュはしなくなった。
swigによるstlのエクスポートは一筋縄ではいかんな。