swig

swigサンプル

swigのサンプル。 typemap(in) char * + int lenの引数をStringとして扱う typemap(ignore)とtypemap(argout) 出力用のポインタを返り値で返す(複数あったらtupleにつめる) numpyのarray入出力 downcast などexample.h #include <string> #include <array> class String { s</array></string>…

irr::core::stringのラップ

Irrlichtはいい描画エンジンなのだが、なにもかもC++でやるとつらいのでスクリプト導入のターンとなるわけです。 そういうわけで、swigで半自動でCモジュールを作るのだがはまりポイントがある。 irr::core::stringであります。 以前、lua版作ったときも同じ…

はまりポインツ

テンプレートクラスを継承したクラス(btAxisSweep3) http://www.swig.org/Doc2.0/SWIGPlus.html#SWIGPlus_nn30 演算子オーバーロード(btVector3, btTransform...) http://www.swig.org/Doc2.0/SWIGPlus.html#SWIGPlus_nn28 Javaの方で継承してc++に渡す(btMo…

bulletのjavaラッパでHelloWorld成功

まず、bullet本体のbtRigidBody::btRigidBodyConstructionInfoと、btTypedConstraint::btConstriantInfo1およびbtTypedConstraint::btConstraintInfo2を内部クラスから外に出す。で、bulletを再ビルド。この、作業自体は簡単。 bullet.i %module bullet %{ #…

jbulletにはbtGeneric6DofSpringConstraintが無い件について

jbulletはbullet-2.72ベースの移植であるため、bullet-2.75から追加されたbtGeneric6DofSpringConstraintが存在しない。ならば、btGeneric6DofSpringConstraintだけ追加で移植すればいいじゃないのと思って取りかかった。ところが、bullet-2.73でbtSequentia…

"cannot begin a template-argument list"対策

ubuntu上のswig-1.3.40でpythonモジュールをコンパイルしようとして遭遇。どういうエラーかというとswigで自動生成したc++ソースで std::vector<::meshio::la::Vector3,std::allocator< meshio::la::Vector3 > > こういうソースが生成されていて、" distutilsに介入して 文字列置換する swigの呼び出しは、setup.pyから自</::meshio::la::vector3,std::allocator<>…

bytesからchar*への変換

python3のマルチバイト文字列であるところのbytearraybytesをcのchar buf[20]に代入したい。textbuffer.h struct TextBuffer { TextBuffer(); char buf[20]; };textbuffer.cpp TextBuffer::TextBuffer() { } textbuffer.i %module textbuffer %{ #include "t…

pmdエクスポートその1

pmdエクスポートの原型を作成。頂点、面、マテリアル、ボーンまで。 http://sourceforge.jp/projects/meshio/wiki/FrontPage (まだ、IK、表情その他諸々が未実装です) 途中swigのstd::vectorに頂点情報を充填するところで罠にはまった件について。 std::vect…

python3の文字列

python2から3で unicode -> str str -> bytesに変わってswigでのstd::stringの中身がutf-8決め打ちになっている。 http://docs.python.org/py3k/c-api/unicode.htmlswigのhoge_wrap.cpp #if PY_VERSION_HEX >= 0x03000000 return PyUnicode_FromStringAndSiz…

python3向けのエクステンションを作る

python2向けと同じ手順で準備してsetup.pyをpython3で実行するだけ。 python2とpytnon3の両方にパスを通してpython3のpython.exeをpython3.exeにリネームしておいた。 $ python3 setup.py build これでblender2.5向けに使える。 python3向けにするのに-py3と…

std::vectorがどうなっているか

vertices.h #include <vector> struct Vertex { float x; float y; float z; }; struct Container { std::vector<Vertex> vertices; }; に対してswigインターフェース vertices.i %module vertices %{ #include "vertices.h" %} %include "vertices.h" %include "std_vector.</vertex></vector>…

メソッド追加

元となるc++のソースを改造せずにswigクラスのみにメソッドを追加する。 いくつか方法がある。 c++で追加する http://blog.ssktkr.com/swig-jp/_/Python.html#n43 pythonで追加する http://old.nabble.com/Python:-Adding-Pure-Python-Methods-to-Shadow-Cla…

swigでpython bindingのメモ

ポリゴン読み込みライブラリのswigを使ったpythonバインディング実験が完了した。 これを使ってBlenderのmqo, pmd, vmdのインポータのデータ読み取り部分を置き換えての動作も確認できたので、今回は予定通りswigを採用することにする。使ってみて気付いたこ…

swig(python編)

とりあえずpython2から。 VC9ExpressEditionで本家のcpythonバージョン2.6向けのモジュールをビルドしたメモ。swigは最初cygwinのものを使ったが、バージョンが1.3.38とちょっと古かったのでswigのサイトでwindows向けビルド(1.3.40)を落としてきた。ついで…

swigを使ってみる

せっかくなのでswigを使ってみることにした。 ruby(1.8.x, 1.9.x)とpython(2.x, 3.x)でやってみる予定。 メモ マニュアル http://www.swig.org/Doc1.3/Sections.html http://blog.ssktkr.com/swig-jp/_/ http://www.cozmixng.org/~rwiki/?cmd=view;name=SWIG…