一、编译准备
1、CMAKE 3.1.8
2、VTK 9.2.6 release版源码
3、Microsoft Visual Studio 2017 或 2019
二、问题
因为我的PYTHON项目中要使用VTK的CPR曲面重建模块vtkSplineDrivenImageSlicer,但是PIP安装的VTK没有这个模块,只好通过VTK源码编译。
三、解决办法
在使用CMake编译VTK 9.2.6时,可以勾选VTK_ENABLE_REMOTE_MODULES,但没有VTK_MODULE_ENABLE_VTK_vtkSplineDrivenImageSlicer,需要在VTK源码REMOTE目录增加SplineDrivenImageSlicer.remote.cmake文件,内容如下:
#
# vtkSplineDrivenImageSlicer
#
vtk_fetch_module( SplineDrivenImageSlicer
"Spline Driven Image Slicer - http://www.vtkjournal.org/browse/publication/838"
GIT_REPOSITORY https://github.com/lorensen/midas-journal-838.git
# First working as a remote module
GIT_TAG 7994999c1e4b56ab546527788b7c894a138e97a1
)
在CMAKE中点击Configure,CMake会下载 SplineDrivenImageSlicer 代码,编译完成后,发现没有SplineDrivenImageSlicer的DLL文件。
在CMAKE找到VTK_MODULE_ENABLE_VTK_vtkSplineDrivenImageSlicer,Value选择YES。同时在VTK源码REMOTE/SplineDrivenImageSlicer目录下,确认存在以下三个文件(如果没有,可以复制以下内容创建文件):
1、CMakeList.txt文件:
message(STATUS "SplineDrivenImageSlicer: Building as a Remote VTK module")
set(Module_SRCS
vtkFrenetSerretFrame.cxx
vtkSplineDrivenImageSlicer.cxx
)
set(Module_CLASS
vtkFrenetSerretFrame
vtkSplineDrivenImageSlicer
)
set(Module_HEADER
vtkFrenetSerretFrame.h
vtkSplineDrivenImageSlicer.h
)
if (VTK_VERSION VERSION_LESS "8.90.0")
vtk_module_library(SplineDrivenImageSlicer ${Module_SRCS})
else()
vtk_module_add_module(VTK::SplineDrivenImageSlicer
SOURCES ${Module_SRCS}
CLASSES ${Module_CLASS}
HEADERS ${Module_HEADER}
)
endif()
2、module.cmake文件
set(DOCUMENTATION "A Spline Driven Reslice Algorithm as described in the VTK Journal Article at http://www.vtkjournal.org/browse/publication/838 .")
vtk_module(SplineDrivenImageSlicer
DESCRIPTION
"${DOCUMENTATION}"
DEPENDS
vtkCommonCore
vtkFiltersCore
vtkFiltersSources
vtkImagingCore
TEST_DEPENDS
vtkTestingCore
vtkImagingSources
KIT
vtkRemote
)
3、vtk.module文件
NAME
VTK::SplineDrivenImageSlicer
LIBRARY_NAME
SplineDrivenImageSlicer
DEPENDS
VTK::CommonCore
VTK::FiltersCore
VTK::FiltersSources
VTK::ImagingCore
TEST_DEPENDS
VTK::TestingCore
VTK::ImagingSources
DESCRIPTION
"A Spline Driven Reslice Algorithm as described in the VTK Journal Article at http://www.vtkjournal.org/browse/publication/838 ."
再次编译,就会生成SplineDrivenImageSlicer的DLL库文件,C++或PYTHON版本的REMOTE功能SplineDrivenImageSlicer 就可以愉快地使用了。