因为毕设要求,所以用VTK来开发项目。实验室本来用的都是VTK5.10,这个版本虽然比较旧但是也比较稳定,安装过程不容易出错。但是由于需要兼容python3的缘故,所以我还是尝试了一下安装VTK(当然这也是以后发展的趋势)
安装的过程就不详细记录了,网上教程很多,官网上也有,我主要参考了VTK中国的中文教程:http://vtkchina.org/course/ 虽然教程是也是正对旧版的,但是大部分的步骤都是一样的,少数的CMAKE中的配置也可以根据英文大概猜出意思。
还有就是官方的网站上面也有安装教程。(主要就是理解一下CMAKE中的几个参数设置的意思即可)
下面就记录一下遇到的 no override found for 的问题:
建立工程有两种方法,一种是通过CMAKE 来建立,一种是通过VS来建立。由于CMAKE相对来说操作比较麻烦,所以比较倾向于用VS直接建立工程。在VS中有三个地方要记得添加VTK生成的库,一个是C/C++中附加包含的库, 一个是在链接器里面常规下的包含目录,最后一个是输入里面添加要用的的.lib文件。
新建工程后报了如下的错误:
中断程序后显示的错误如下:
这个问题在网上也是找了很久的答案,都没有很好的解决问题,关于这个问题最详细的解答就是在官网上的:
http://www.vtk.org/Wiki/VTK/VTK_6_Migration/Factories_now_require_defines
主要两个方法,一个是添加如下代码:
#include
VTK_MODULE_INIT(vtkRenderingOpenGL);
这两行代码加在引用VTK类的最前面。
缺少几个模块就添加哪个初始化语句
另一个方法如下;
#define vtkRenderingCore_AUTOINIT 4(vtkInteractionStyle,vtkRenderingFreeType,vtkRenderingFreeTypeOpenGL,vtkRenderingOpenGL)
#define vtkRenderingVolume_AUTOINIT 1(vtkRenderingVolumeOpenGL)
但是我试了之后又会报出如下类似的错误(下面是官网上的)
"2>vtkSDIView.obj : error LNK2001: unresolved external symbol "void __cdecl vtkInteractionStyle_AutoInit_Construct(void)" (?vtkInteractionStyle_AutoInit_Construct@@YAXXZ) 2>vtkSDI.cpp.obj : error LNK2001: unresolved external symbol "void __cdecl vtkInteractionStyle_AutoInit_Destruct(void)"(?vtkInteractionStyle_AutoInit_Destruct@@YAXXZ)"
官网上给的解决方法是:
”After linking all the libraries found in the example code (eg the Cone example) these link errors go away. This required adding several tens of new libraries that I had not needed to link for version 5.8 which is slightly annoying. The preprocessor definitions I mention above can also be copied from the Cone example.
“
意思就是说把example中用到的库全部加载过来,这些链接的错误也就没有了,这也将是一件很繁琐的事情。
所以综上所述,要么就乖乖的用CMAKe创建工程,要么就要加一大堆的库文件。
但是我通过仔细的对比发现,其实自己建的工程只有一个地方与CMAKE不同,那就是:
预处理器定义。所以把CMAKE生成的预处理器定义拷贝过去就可以了:
看看CMAKE的预处理器定义:
WIN32;_WINDOWS;_DEBUG;vtkDomainsChemistry_AUTOINIT=1(vtkDomainsChemistryOpenGL2);vtkRenderingContext2D_AUTOINIT=1(vtkRenderingContextOpenGL2);vtkRenderingCore_INCLUDE="E:/taro/vtk/IRAEE/bin/CMakeFiles/vtkRenderingCore_AUTOINIT_vtkInteractionStyle_vtkRenderingFreeType_vtkRenderingOpenGL2.h";vtkRenderingVolume_AUTOINIT=1(vtkRenderingVolumeOpenGL2);CMAKE_INTDIR="Debug";%(PreprocessorDefinitions)
#define vtkRenderingCore_AUTOINIT 3(vtkInteractionStyle,vtkRenderingFreeType,vtkRenderingOpenGL2)
当然这只是开始学习VTK的第一步,后面还有很多东西要学习,其实这个安装问题花了两天才解决,主要原因是自己对C++的环境不是很熟悉,VTK的资料大都是英文,看起来比较费劲,还有就是很多外网上不去,导致很多信息都看不到。不过万事开头难,下面就要正式开始学习怎么使用VTK 了!