2009年10月28日水曜日

Boost Python VC++

cmakeでboost pythonを使うとき、
find_package( Boost COMPONENTS python ... )
とやるとVC++ではリンクできないとわめく。
set(Boost_USE_STATIC_LIBS   OFF)
add_definitions(${Boost_LIB_DIAGNOSTIC_DEFINTIIONS})
としておくとやめる。
 
しかし、開発中のものでVC++ではエラーが出ないがgcc on UbuntuでコンパイルしたBoost Pythonが動かない。
Python argument types in .... did not match C++ signature: .... と出やがる。 
 
追記:pythonをリンクさせることを忘れていました。トホホ 

2009年10月17日土曜日

Boost::Pythonでmember function overloadを使う術

Boost::Pythonでmember function overloadを使うには、
class gaga
{
public:
void get(void);
void get(const int pos);
};
とすると
boost::python::class_("TvtkTranslation")

.def("get", (void (gaga::*)(void) ) &gaga::get)
.def("get", (void (gaga::*)(const int &) ) &gaga::get)

;

2009年9月28日月曜日

fstreamに泣く

fstreamってstd::ios::in | std::ios::outてしないと新たにファイルを書き出してしまうのであった。

2009年9月14日月曜日

VTKでアニメーション

ここを参考にすると、
1)vtkAnimationSceneがvtkAnimationCueのコレクションクラスで全体を統括。
2)vtkAnimationCue1つ1つがそれぞれの動きの時間管理を受け持つ。
3)それぞれの動きはvtkCommandを継承したクラスで行う。
vtkCommandのvirtual void Execute (vtkObject *caller, unsigned long eventId, void *callData);をvtkAnimationCueが設定にしたがって呼んで、その内容で
vtkCommand::StartAnimationCueEvent(セットアップ)
vtkCommand::EndAnimationCueEvent(終了処理)
vtkCommand::AnimationCueTickEvent(動き)
に分岐させる。

追記:上記サンプルではわざわざCueAnimatorと言うクラスを作っているけれども、いらないと思う。vtkCommandを継承したクラスに押し込めば十分。第一、vtkObjectを継承していないのもなんだかな。

2009年9月11日金曜日

cmakeでcuda

cudaではコンパイラに色々食わせなければならない。ああ面倒くさい。と言うわけでcmakeで使えるモジュール探してみました。ありました。FindCuda。
svn co https://gforge.sci.utah.edu/svn/findcuda/trunk FindCUDA
でチェックアウト
/FindCUDA/CMake/cuda/の下の
FindCUDA.cmake make2cmake.cmake parse_cubin.cmake run_nvcc.cmake
をcmake/share/cmake-2.6/Modules/の下にコピー
ちゃんと動くかどうかは、チェックアウトしたモジュール(FindCUDA.cmake make2cmake.cmake parse_cubin.cmake run_nvcc.cmake)を削除して/FindCUDA/で cmake . && make ビルドできればOK

CUDA始めました。

玄人指向のカードが安かったのでCUDA始めました。
GTS250:1G、1万3000円台でした。

2009年9月2日水曜日

cuiからcmake in Win32

win32ではcmakeにはguiが装備されているけれど毎回guiを起動してやるのな面倒くさいときcuiからprojectを生成してみよう。
1)まず、Cmake\binにpathを通す。
2)目的のpathへ移動。私はよく最上位のディレクトリの下にbuildディレクトリを作ってそこでプロジェクトの作業をします。
3)目的のpathをめがけて私の場合はcmake ..とすればguiと同じように出来上がり。

追記:WIN32ならGUIを起動することもできるぞ。複数のプロジェクトを扱っているとGUIを単独で起動すると、前に使ってたプロジェクトを覚えているからソースやどこに作成するか一々入力しなければならない。その点CUIからCMakeSetup.exe ..としてやればやりたいプロジェクトがすぐ起動できる。wxWidgetsでunicodeを使おうとするとGUI使って、/D_UNICODEを指定しなければならないので重宝する。

2009年8月25日火曜日

Boost::Pythonでshared_ptrを使う術

Boost::Pythonでshared_ptrを使うには、先に宣言しよう。
BOOST_PYTHON_MODULE(gaga)
{
boost::python::register_ptr_to_python<boost::shared_ptr >();
boost::python::class_("gigi")
.def("gugu", &gugu)
;
...
...
}

2009年8月22日土曜日

Boost::Python

Boost::Pythonはソースに手を入れなければならないと思われているがそんなことはない。サンプルがそのようであるからで、実際にはヘッダーファイルをインクルードしたラッパーを書けば1丁上がりである。元になるライブラリがDLLならラッパーだけのDLLができてライブラリのDLLを読みに行ってくれる。すなわち軽量。しかもラッパーはC++のソースだからわかりやすい。Python以外のLLにポートしないのならSwigよりおすすめです。

2009年8月20日木曜日

Boost::Pythonに泣く

pythonの拡張をC++でしようと思ってubuntuでやっていたことをVC++に持っていくとpython25.dllがないと怒られた。そんなもん使ってないのになんでいるんだとしばらく毒づいていた。
ふと気づいて、dependencywalkerで見てみると、なんとboost::pythonのライブラリが依存していた。そうそう、このライブラリ構築したのはpython25のときでした。「スマンカッタ。」
そこでboostライブラリの再構築。しかし時間かかるなーあ。complete指定だと優に1時間かかったが、こんどはエラー吐かなくなった。目出度しめでたし。

2009年8月8日土曜日

pythonのsetup.pyにswigでC++のオプションを付けるの術

from distutils.core import setup, Extension

setup(
ext_modules = [
Extension('_example', ['example.i', 'example.cxx', 'sample.cxx'],
library_dirs=[],
libraries=[],
extra_compile_args=[],
extra_link_args=[],
swig_opts=["-c++"],)
])