本來挺簡單一件事但還是踩了一些坑,記一下吧
macOS 11.3.1 + CLion +VTK 9.0.1_9
安裝步驟
HomeBrew 還是香。雖然他默認(rèn)安裝 VTK 最新版本已經(jīng)到 9.0.1 了,不過我是新學(xué)所以還沒遇見什么問題。
brew install vtk
最新的 vtk 要用 Qt@5,老版本的代碼就可能會有一些問題,不過 HomeBrew 應(yīng)該會也順便安裝上夠用的 Qt@5。
接下來就是我遇到的一個坑orz當(dāng)時 CMakeList VTK 相關(guān)是這樣的
find_package(VTK REQUIRED)
include(${VTK_USE_FILE})
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME} ${VTK_LIBRARIES})
結(jié)果找不到合適版本的 Qt,說不能用

看報錯他找到的是 conda 管理下安裝的 Qt,解決辦法是在前面加一行
set(CMAKE_PREFIX_PATH "/usr/local/Cellar/qt@5/5.15.2")
翻 CMake 手冊知道這個的作用是提供一個根目錄供 FIND_XXX() 命令在其中查找相應(yīng)的文件。就是把 brew 管理的 Qt@5 的路徑加進(jìn)去。沒有 Qt5 就去裝一個版本夠用的。brew 現(xiàn)在默認(rèn)已經(jīng)是 Qt6 了。
這時候就可以了。跑測試代碼的時候我拿到的代碼渲染不出窗口來,不知道是不是版本的問題,參照一個教學(xué)項目的代碼動了一下之后能跑出來了。
#include "vtkRenderWindow.h"
#include "vtkSmartPointer.h"
#include <vtkRenderWindowInteractor.h>
int main() {
vtkSmartPointer<vtkRenderWindow> renWin = vtkSmartPointer<vtkRenderWindow>::New();
vtkNew<vtkRenderWindowInteractor> iren;
iren->SetRenderWindow(renWin);
renWin->Render();
iren->Start();
return 0;
}
效果就這樣

上面那個教學(xué)項目是這個 HeadBone。自己跑的話要把 main 函數(shù)里剛開始的 if 語句注釋掉,然后把文件地址改成自己的路徑。
reader->SetFileName("HeadBone/FullHead.mhd");
這里有個注意的是 raw 文件和 mhd 文件要放到同一個文件夾下。
效果這樣

其他
嘗試手動編譯的時候還遇到了一些問題,比如注意 VTK_USE_CARBON 為 OFF,為了解決 mac 上和 Cocoa 沖突的問題。不過這個參數(shù)在我后來使用 CMake 圖形界面編譯看參數(shù)時發(fā)現(xiàn)最新版本的已經(jīng)是 VTK_USE_COCOA = ON 了??磥泶蠖鄶?shù)版本配置問題都是默認(rèn)更新著的。
還有 Tools -> CMake -> Reset Cashe and Reload Project 可以解決一些緩存的問題,比如重置 CMake 的 prefix path 什么的。
至于 HomeBrew 的 vtk@8.2 說是 keg-only 的,沒有符號鏈接到 usr/local,反正 8.2 使用者就好好手動編譯吧。
