Visualization Toolkit (VTK)9.2 インストール＆cmakeビルド備忘録Windows10

新しく環境を整えてVTKのビルドをしたら昔と同じ部分で躓いたのでその備忘録。
こういった記事を書くのは初めてなので不備がありましたら教えていただけると幸いです。


# やること
今回はGPU付きパソコンなのでcuda設定しつつVTK最新版インストールから確認まで

* 最新版VTM9.2のインストール
* cuda用設定
* C++，python用ビルド
* C++，cmake設定確認
* python 確認


# 失敗したこと
最初に今回の失敗をまとめる
1. cmakeのバージョン
    何も考えず一番上のをダウンロードしたら安定版ではなかったらしくエラーが出た?らしい。検証できなかったため本当にそうかどうかは不明。
1. VTK9用のcmakeファイル設定
    VTK8までとは異なりVTK9ではautoinitの項目が必要とのこと。


# あらかじめ必要なもの
 * cmake安定版
 * VisualStudio
 * python


# インストール

## ダウンロード
[VTK公式サイト](https://vtk.org/download/)からダウンロード。今回(22/10/27現在)は最新版のsouce VTK-9.2.2.tar.gzを選択。ダウンロードしたら適当な場所に展開。C直下のほうがいいとのことなのでとりあえずC:\lib\VTKに展開。

## Cmake
### 参照先
展開したVTKをCmakeでビルドする。VTKフォルダ直下にbuildフォルダを作成してcmakeにいれる。cmakeの参照先はこんな感じ。

* source   :C:/lib/VTK-9.2.2
* binaries :C:/lib/VTK-9.2.2/build

設定後、configureボタンを押し利用するVisualStudioを決定する。そうすると新しい設定項目が赤枠で出てくるので設定したい項目を変更する。前回はここcmakeでエラーが出た。原因は安定版じゃない最新版cmake**-rc2をインストールしていたことだった。何も考えずに一番上ものをインストールしてはいけない…
![cmake_VTK.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920573/0e77ce7d-9b03-cbb0-3762-43d5478db2e5.png)
### Cmakeの設定
今回の設定項目はこんな感じ。ここは各自設定する。

<table>
  <thead>
    <tr>
      <th>Name</th> <th>Value</th><th>説明</th>
    </tr>
  </thead>
  <tr>
    <td> CMAKE_CXX_MP_FLAG </td> <td>✓</td> <td>コンパイルの並列化</td>
  </tr>
  <tr>
    <td> CMAKE_INSTALL_PREFIX </td> <td>C:/lib/VTK-9.2.2/install</td><td>dllとかの作成先</td>
  </tr>
  <tr>
    <td> VTK_USE_CUDA</td> <td>✓</td><td>cudaの利用</td>
  </tr>
  <tr>
    <td> VTK_WRAP_PYTHON </td> <td>✓</td><td>python用のbuild</td>
  </tr>
</table>
CMAKE_INSTALL_PREFIXのフォルダに最終的にパスを通すことになるのでわかりやすいところに変更した。

設定したらもう一度configureボタンを押す。今回の場合はpythonの参照先などが新たに追加されたので確認。また、変更箇所があった場合は改めてconfigureボタンを押す。

### Generate->Open Project
まぁまぁ時間がかかる。うまくいったらプロジェクトを開く。

## VisualStudioビルド
VisualStudioが起動したら、以下の流れでビルド。これまた時間がかかる。
1. 設定をDebugからRelease
1. ALL_BUILDをビルド
1. INSTALLをビルド

うまくいったら CMAKE_INSTALL_PREFIXで設定したフォルダ(C:\lib\VTK-9.2.2\install)に以下のフォルダが生成されている。
* bin
* include
* lib
* share

できていたらひとまずビルドは終了。

## パス設定
環境変数にインストール先のフォルダを登録。
<table>
  <thead>
    <tr>
      <th>変数</th> <th>参照先</th>
    </tr>
  </thead>
  <tr>
    <td> path </td> 
    <td>C:\lib\VTK-9.2.2\install\bin</td>
  </tr>
  <tr>
    <td> VTK_DIR </td> 
    <td>C:\lib\VTK-9.2.2\install</td>
  </tr>
</table>

pythonで使うためにパスを登録。
python用ファイルは、%{VTK_DIR}\bin\Lib\site-packageにあるのでこれでpthファイルを作成。
~~~ vtk.pth
C:\lib\VTK-9.2.2\install\bin\Lib\site-packages
~~~

作成したらcmakeの設定で確認したpythonの参照先のsite-packagesに移動。自分の場合**\Python38\Lib\site-packagesに移動した。

# 動作確認
## C++

折角なのでcmakeで動くように設定する。
~~~CMakeLists.txt
cmake_minimum_required( VERSION 3.10)

#create project
project(solution)
add_executable(project VTK_test.cpp)

find_package(VTK REQUIRED)
target_link_libraries(project ${VTK_LIBRARIES})
target_include_directories(project  SYSTEM PRIVATE ${VTK_INCLUDE_DIRS})
# autoinitがないとdllが見つかりませんエラーが発生する
vtk_module_autoinit(TARGETS project MODULES ${VTK_LIBRARIES})
~~~
VTK9ではRenderingContextOpenGL2の影響で正しくコンパイルできない(dllが見つかりません)となるのでvtk_module_autoinitが必要[^1]。autoinitするのはRenderingContextOpenGL2だけでも問題なかった。前回も今回もここの修正に時間がかかった。

サンプルプログラムは[@MusicScience37 さんの記事](https://qiita.com/MusicScience37/items/0d197b4fed062b880db1) を参照.
ちょっと粗めの球をぐりぐりできればOK

## Python

こちらは普通にimport vtkでよい。
こちらもサンプルプログラムは[@MusicScience37 さんの記事](https://qiita.com/MusicScience37/items/0d197b4fed062b880db1) を参照.
ちょっと粗めの球をぐりぐりできればOK

## 参考
今回の作業は以下のサイトを参考に執筆しました。とても助かりました。

[Visualization Toolkit (VTK) のインストール on Windows, Visual Studio](https://qiita.com/MusicScience37/items/0d197b4fed062b880db1)
[4. VTKをPythonで動かす --- 3Dイメージ可視化に向けて](https://www.nips.ac.jp/huinfo/documents/python/python04.html)
[VTK:discourse"Can’t build VTK sample project: Missing module"](https://discourse.vtk.org/t/cant-build-vtk-sample-project-missing-module/8056/22?page=2)


[^1]: https://discourse.vtk.org/t/cant-build-vtk-sample-project-missing-module/8056/21?page=2