読者です 読者をやめる 読者になる 読者になる

vtkで分子を描画

C++

vtk7.0.0が出たという記事を見た時、といってももう1年も前なのだと今気付いたが、分子のためのクラスがあることを知った。で、以前vtkで分子を表示するために複数個の球体を浮かべようと悪戦苦闘した記憶が思い起こされ、こういうものがあるなら使ってみたいと思った。

VTK 7.0.0 | The Kitware Blog

というわけでVTKを持ってくる。公式サイトからソースファイルをダウンロードし、解凍する。vtkはCMakeを使っているので、CMakeに慣れていれば簡単だ。

$ mkdir build
$ cmake ..
$ make
$ make install

特に何もしなければ、/usr/localあたりにインストールされるので、最後のmake installにはsudoがいる場合がある。また、makeにはそこそこ時間がかかるので、-jNとかのオプションをつけたほうがよい気がする。

さて、インストールが終わったので適当にサンプルプロジェクトを……と思ってwikiを見に行ったところ、VTK/Example/Cxxで検索したところmoleculeなるページは引っかからなかった。doxygenには当然説明があるが、これを見てわかるほどVTKに親しくはない。というかHello World程度のことしかしていない上に、その中身をしっかりと覚えてはいない。

さて困った。ということでgithubのVTKのレポジトリでサンプルがないかとvtkMoleculeと検索したところ、テストコードが見つかった。テストコードは非常に良い。(少なくともリリース版なら)動作すると期待できるし、必要な一通りのコードは入っているはずだろう。

というわけで、VTK/Domains/Chemistryを見に行こう。Testingなるディレクトリがある。その中のCxxに、動作することが期待できるコードが散らばっている。もちろん、これはテストコードなので、testMolecule.cxxなどはvtkMoleculeを作って正しくvtkAtomを登録し、情報を保持できるかなどを確認するコードになっている。ユーザーに過ぎない私としては、もう少し統合テストに近いもの、例えばVTK中の他のものと同じく表示できるかなどのテストがほしい。

全部は見ていないが、例えばTestMoleculeMapperPropertyUpdate.cxxなどは描画させるのに使える。これを見る限り、Moleculeの使い方は、

  1. vtkMoleculeを作る
  2. Atomを追加していく(appendするとvtkAtomが帰ってくる)。原子番号と位置を指定する。
  3. さきほど帰ってきたvtkAtomを使ってBondを指定する(中にポインタを持っているとかだろうか)
  4. vtkMoleculeMapperにvtkMoleculeのポインタを渡し、表示方法を設定
  5. ActorにvtkMoleculeMapperのポインタを渡す

まだ細々としたことが続くが、まあよしとしよう。このテストコードでは、vtkMoleculeMapperの側で設定を変えた時、Renderし直しただけで追従できるかのテストのようなので、94行目で一度表示方法をball&stickからVDWに変更している。この部分は好みの問題なので、好きに設定するといいだろう。設定変更と再レンダリングはなくしてしまっても動く。

テストコードがちゃんと存在するプロジェクトは、何なら動くと期待してよいのかとか、どう動くべきだと思って作っているのかが、ほとんど内容を知らなくてもわかるのでありがたい。wikiが充実しないうちは、テストコードを眺めていろいろと試してみようか。