1、CMake的安装
CMake安装是用来对VTK编译前的配置工作。此博客中使用的是CMake2.8。CMake的下载可到https://www.sxzhongrui.com/网站上进行下载。
2、VTK源码
VTK源码直接从VTK的官方网站上下载得到,此博客中下载的是www.sxzhongrui.com和www.sxzhongrui.com两个压缩包。其中www.sxzhongrui.com是VTK的源码,www.sxzhongrui.com是VTK使用中的数据文件,这个文件也可以不用下载。
http://www.sxzhongrui.com/download/
在D:\Program Files\目录下新建三个目录。将www.sxzhongrui.com中的文件解压到VTKSrc文件夹,www.sxzhongrui.com中的文件解压到VTKData文件夹。VTKBin文件夹用来放CMake产生的工程文件和编译后的文件。
解压完毕后各目录的结构如下:
VTKSrc
VTKData
3、CMake配置项目
打开CMake,输入源码和输出文件路径,然后进行配置。设置以下几个配置项:
1、BUILD_EXAMPLES ?该选项位于BUILD分组中。该选项表示是否编译VTK中的例程。不勾选状态下时可以缩短编译的时间,需要学习VTK中自带例程的可以选择该项。这里不选择该项。
2、BUILD_SHARED_LIBS 同样位于BUILD分组中。选中代表编译生成DLL文件,也就是生成动态链接库,不选中时编译成静态库。
3、BUILD_TESTING ?处于BUILD分组。选中代表编译测试代码。此处不选中,为了缩短编译时间。
4、CMAKE_INSTALL_PREFIX 处于CMAKE分组中,指向VTK的生成路径,这里使用其默认路径C:\Program Files (x86)\VTK。
5、VTK_DATA_ROOT 处于VTK分组中,www.sxzhongrui.com解压的路径,这里可以手动修改到D:\Program Files\VTKData。
6、VTK_USE_GUISUPPORT 处于VTK分组中,表示是否支持GUI。为了后续使用MFC界面,这里勾选该选项。
需要注意的是,在点击Config之后会出现VTK_USE_MFC选项,需要勾该选项再次进行Config。
Config之后没有红色标记的时候就可以进行Generate了。
4、在VS2010中编译项目
如果前面的步骤没有问题,在VTKBin目录下就会生成以下文件:
打开VTK.sln工程文件,然后打开“生成” -> "生成解决方案"。这时候项目就开始编译了,编译的时间依据电脑的性能而定,一般在半小时左右项目编译完成。
编译完成之后,按下图选择。
这时候会在我们之前选择的VTK生成目录下生成我们需要的lib文件,头文件,dll文件等等。由于默认情况下生成文件的目录是在C:\Program Files (x86)\VTK。可以到该目录下检查是否有我们想要的文件产生。后续我们需要用到的就是这三个文件夹下的内容了。
5、测试VTK编译结果
在编译完成之后,建立一个win32控制台应用程序来测试安装编译结果。
打开vs2010,新建一个win32控制台应用程序。创建完成之后,向项目中添加一个cpp文件。随后配置我们的项目。在菜单栏中选择视图->属性管理器。
由于目前使用的是Debug版本编译,所以在此我们只需要去设置Debug下的配置文件。双击打开Microsoft.Cpp.win32.User。在包含目录中添加VTK生成目录下的include文件夹,这里是C:\Program Files (x86)\VTK\include\vtk-5.10。在库目录中添加VTK生成目录下的lib文件夹,这里是C:\Program Files (x86)\VTK\lib\vtk-5.10。
配置完成后就可以再cpp文件中写入程序代码了。可以写入以下程序代码来测试程序。
#include "vtkConeSource.h"
#include "vtkPolyDataMapper.h"
#include "vtkRenderWindow.h"
#include "vtkCamera.h"
#include "vtkActor.h"
#include "vtkRenderer.h"
#include "vtkProperty.h"
#include
#include "windows.h"
int main()
{
int k = 0 ;
vtkConeSource *cone = vtkConeSource::New();
cone->SetHeight(3.0);
cone->SetRadius(1.0);
cone->SetResolution(10);
vtkPolyDataMapper *coneMapper = vtkPolyDataMapper::New();
coneMapper->SetInputConnection(cone->GetOutputPort());
vtkActor *coneActor = vtkActor::New();
coneActor->SetMapper(coneMapper);
vtkRenderer *ren1 = vtkRenderer::New();
ren1->AddActor(coneActor);
ren1->SetBackground(0.1,0.2,0.4);
vtkRenderWindow *renWin = vtkRenderWindow::New();
renWin->AddRenderer(ren1);
renWin->SetSize(300,300);
int i = 0;
for (;i<360;++i)
{
renWin->Render();
ren1->GetActiveCamera()->Azimuth(1);
Sleep(10);
}
scanf("%d",&k);
cone->Delete();
coneMapper->Delete();
coneActor->Delete();
ren1->Delete();
renWin->Delete();
return 0;
}
这时候编译会发现有错误,那是因为找不到编译时候需要的lib文件。我们需要在此添加依赖库文件。菜单栏中选择项目->属性。打开链接器,选择输入。
在附加依赖项中添加程序中必要的lib文件。
这时候再去编译程序发现没有错误了,但是运行程序的时候会跳出没有安装必要的dll文件。这是程序无法找到运行时的动态链接库导致的。解决办法有两种:
1、将VTK生成目录下,也就是C:\Program Files (x86)\VTK\bin目录下的dll文件全部拷贝到C:\Windows\System32文件夹下。
2、或者添加系统环境变量。回到计算机桌面,右键计算机,属性,选中高级系统设置。选中高级选项卡。
点击环境变量,在PATH变量下加入C:\Program Files (x86)\VTK\bin。如果打开后没有PATH,可以自行添加PATH变量。如果打开后有PATH,且里面已经有内容,那么在添加的时候需要注意,每一个值之间是需要使用分号 ; 隔开的。(这里的分号要确保是在英文状态下输入的,也就是必需要是半角的字符。)
环境量配置完成后一般不会立即生效,这时可以重新启动电脑。
按照上述配置完成就可以运行程序了。运行结果如下。
1.预先下载如下四个文件
?? www.sxzhongrui.com
?? vtk-5.8.0-win32-x86.exe
?? www.sxzhongrui.com
?? cmake-2.8.12.2-win32-x86
2.平台环境
?? win7 32bit
?? visual studio 2010
3.开始安装
(1).执行vtk-5.8.0-win32-x86.exe,安装路径为“C:\Program Files\VTK5.8.0”;
(2).在D盘下新建一个文件夹VTK,然后在“D:\VTK”目录下新建三个文件夹:VTK-5.8-src,VTK-5.8-bin,VTKData;
(3).将“www.sxzhongrui.com”压缩文件解压到"D:\VTK\VTK-5.8-src"文件夹中,将“www.sxzhongrui.com”压缩文件包解压到"D:\VTK\VTKData"文件夹中;
(4).执行"cmake-2.8.12.2-win32-x86"可执行文件,将其安装在“C:\Program Files\cmake 2.8”下;
(5).运行cmake,如图所示
为其指定两个参数,“Where is the source code:”指定路径为:“D:\VTK\VTK-5.8-src”,
为"Where to build the binaries:"指定路径为:"D:\VTK\VTK-5.8-bin"。然后单击“Configure”按钮开始配置VTK工程,如果遇到错误则应停止CMake,执行CMake的菜单命令"File->Delete Cache",清除缓存,重新配置VTK工程。
(6).配置完成后的CMake界面如下图所示,
(7).接下来需要仔细确认CMake的配置选项,勾选Advanced复选框,以下列出几个重要的选择:
BUILD_EXAMPLES——默认是关闭的,选中它表示编译生成VTK自带的示例项目,建议选中;
BUILD_SHARED_LIBS——默认关闭,意味着是静态编译,若选中则表示动态编译,会生成很多.dll动态库,建议选择,因为此处的.dll文件在以后的开发中会大有用处;
VTK_DATA_ROOT——表示VTK编译过程中所需要的数据,也就是上面解压www.sxzhongrui.com的路径所在,CMake会自动搜索到此路径,如果没有搜索到或者搜索结果与实际不符,应意识到需要手动输入。
CMAKE_INSTALL_PREFIX——表示VTK的安装路径,默认的路径是C:\Program Files\VTK,该值不用该,按默认即可。在配置完VTK后生成的工程中会有一个INSTALL项目,编译该项目后就会在CMAKE_INSTALL_PREFIX所指的路径中生成VTK相应的头文件,lib文件和动态连接库dll文件。
VTK_USE_QT——表示是否用QT做GUI开发,建议选上,因为以后在做大一点的项目时,对GUI的要求比较高,此时MFC会显得很麻烦。
VTK_USE_GUISUPPORT——表示VTK是否支持GUI,这个一定要选的,因为总不至于用于都在控制台下编程吧,不管是用MFC还是WIN32的GUI都需要选择此项。
其它的选项建议采用VTK官网的默认设置。
设置完选项后,再次单击"Configure"按钮,继续配置。
配置过程中可能会有错误,一定要仔细检查错误选项的配置,确认路径是否有错,反复修改反复配置,知道所有的选项都变成白底黑字,如上图所示,然后单击“Generate”按钮,生成VTK工程文件。
(8)上一步完成后,就可以在指定的文件夹D:\VTK\VTK-5.8-bin中看见,生成如下所示的的目录结构:
这里文件的多少,与CMake的配置选项有关,设置不一样,生成的文件也会不一眼,差异在于文件有或者没有,不会存在文件名相同,但是文件内容不一致的情况。
(9)在上图中找到VTK.sln文件,打开工程,如下图所示:
共有158个工程。设置编译的版本为32为的Debug版本,然后执行菜单命令“Build->Build Solution”,项目比较多,需要编译大概一个多小时,请耐心等待。读者应该考虑,回头再编译一个Release版本,在日后的项目或研究中,会体会到它的好处。
(10).执行第(9)会发现在D:\VTK\VTK-5.8-bin文件夹下会多出一个bin文件夹,这个文件夹里面就是编译生成的.lib文件和.dll文件。
(11)编译完成后会有错误,错误如下所示:
“_WIN32_WINNT”是一个宏,表示了Windows的版本,0x0403表示Windows NT 4.3的版本,这个版本是很低的,而用的编译器是VS2010,VS2010显然已经不支持之前Windows NT操作系统,应此就会报错。网上有人建议将此宏_WIN32_WINNT从新定义一个大于0X0403的值,比如0X0501,但是修改宏之后会引起一系列的连锁错误,因此如果没有十足的把握不建议这样操作。其实出现这样的错误,读者不用过于紧张,编译完成之后的VTK工程已经生成了大量的.lib库和.dll文件,足以满足日常的需求了。以下,可以证明,出现错误之后,依然可以很顺利地编译出大部分VTK的程序。
(12).初次build后,会有错误,网上有很多解决这些错误的办法,但是大都效果不佳。我在此没有做处理,直接到"D:\VTK\VTK-5.8-bin\bin\debug"目录下,将所有生成的.dll文件拷贝至"C:\Windows\Syetem"文件夹下,如果第(6)步中没有勾选"BUILD_SHARED_LIBS"此处是不会生成.dll文件的
(13).至此所有的配置编译工作完成,关闭VS2010,并在“D:\VTK\VTK-5.8-bin\Examples”路径下找到“VTKExamples.sln”文件,并双击用VS2010打开此项目,在解决方案管理器中找到"cone"子工程,并右击将其设为当前活动工程“Set as StartUp Project”,如下图所示,
(14).然后“build”,无误后选择“Debug”->"Start Without Debugging"运行此项目,将会出现如下图所示的画面,
(15).至此,表明所有的配置工作已完成,但是如想定制自己的项目,还有更多的细节需要处理。整个过程相对复杂,读者要有耐心。谢谢
?
计算机环境: win7 64bit, Python 2.7 64位, VTK5.8.0,VS2010
1,下载 CMake,选择最新版本。
????? 地址?http://www.sxzhongrui.com/cmake/resources/software.html
????? 我选择的是 cmake-3.0.0-win32-x86.exe. 然后安装。一路next即可。
2,下载vtk
????? 地址:?http://www.sxzhongrui.com/VTK/resources/software.html
? ? ? ?我用的版本是5.8.0,下载www.sxzhongrui.com和www.sxzhongrui.com两个压缩文件。
? ? ? ?将这两个压缩文件解压到同一个文件夹下。我的是放在D/ITK_source文件夹下的(该文件夹下也存放了ITK的source,是我在编译ITK的时候使用的)
? ? ? ?
3,? D 盘新建两个文件夹:
????? D:\I_VTK\VTK_temp_backup?? 用于存放cmake产生的VTK项目文件
????? D:\I_VTK\VTK? 用于保存编译成功后的bin, include, lib等文件
????? 多建立一个 I_VTK目录是为了ITK也可编译在I_VTK这个目录下,为了以后ITK和VTK的混合编程。
4, 打开Cmake进行设置
???? where is the source code 选择D:/ITK_source/vtk-5.8.0
???? where to build the binaries 选择D:/I_VTK/VTK_temp_backup
???? 点击Configure,选择编译器:Visual studio 10 2010 Win64 ? ? ?
? ? 等待Configure完成(约10分钟)。
??? cmake的选项中将BUILD TESTING和BUILD EXAMPLES不选。
??? 勾选BUILD_SHARED_LIBS.
??? 勾选Advanced之后更改CMAKE_INSTALL_PREFIX(表示编译VTK后生成的lib 及include等的安装路径)设置为 D:\I_VTK\VTK
? ? VTK_DATA_ROOT 设为?D:/ITK_source/vtkdata-5.8.0
? ? 再次点击 Configure, 直至所有条目都变成灰色,表示配置成功, 点击Generate确认.
??? 注: cmake还有很多其他选项,初次使用者可以暂且不管,如果需要用到高级功能,再根据需要勾选。例如想使用python写VTK程序,则勾选上python相关选项。(注意也需要安装64位的python)?
5, VS 2010编译
? ? 选择Release与x64编译。
? ?等待编译的时间比较长。
??? 如果编译中出错,则需要在cmake中重新configure,修改某些选项,重复第四步和第五步。
??? 编译结束后,再右键单击INSTALL项目,单独编译。结束后VTK就安装到了D:\I_VTK\VTK文件夹下。
6, 例子程序有两种创建方法,一是使用cmake创建项目文件;二是自己创建项目文件。
???? 以显示圆锥为例,使用cmake创建项目文件:
???? 在D:\ITK_source\vtk-5.8.0\Examples\Tutorial\Step1\CXX文件夹下将Cone.cxx与CMakeLists.txt复制到一个新的文件夹下,例如D:\project\vtk_test\cone
? ? ? 打开cmake,配置如下:
? ? ? where is the source code: D:\project\vtk_test\cone
? ? ? where to build the binaries:? D:\project\vtk_test\cone_bin
? ? ? 选择编译器:Visual studio 10 2010 Win64
? ? ? 依次进行Configure和Generate
? ? ? ?然后在VS中从D:\project\vtk_test\cone_bin文件夹下打开项目文件,Release编译。(如果第五步中选的Debug,这里也使用Debug)
7, 自己创建项目文件
?? VS中创建新的项目,选择空项目。
??
? ? 将Cone.cxx复制到D:\project\vtk_test\cone\cone下,将该文件加入到项目中。
? ? 编译配置设为Debug或Release(经测试均可),选择x64 ??
? ? ?设置include和lib路径:
????? Project-Property-VC++ Directories中,
?????? Include Directories选择D:\I_VTK\VTK\include\vtk-5.8,
?????? library Direcotories选择D:\I_VTK\VTK\lib\vtk-5.8
? ? ??Project-Property-Linker-Input中,Additional Dependencies添加D:\I_VTK\ITK\lib目录下的所有lib文件:
MapReduceMPI.lib mpistubs.lib vtkalglib.lib vtkCharts.lib vtkCommon.lib vtkDICOMParser.lib vtkexoIIc.lib vtkexpat.lib vtkFiltering.lib vtkfreetype.lib vtkftgl.lib vtkGenericFiltering.lib vtkGeovis.lib vtkGraphics.lib vtkhdf5.lib vtkHybrid.lib vtkImaging.lib vtkInfovis.lib vtkIO.lib vtkjpeg.lib vtklibxml2.lib vtkmetaio.lib vtkNetCDF.lib vtkNetCDF_cxx.lib vtkpng.lib vtkproj4.lib vtkRendering.lib vtksqlite.lib vtksys.lib vtktiff.lib vtkverdict.lib vtkViews.lib vtkVolumeRendering.lib vtkWidgets.lib vtkzlib.lib
? ? 然后编译即可,大功告成。
8. 使用VTK+Python
? ? 第4步中在cmake中勾选VTK_WRAP_PYTHON.
? ?Configure后取消选择VTK_USE_TK,再次Configure
? ?Configure和Generate后在VS中编译(Release)。
? ? 编译完成后再Eclipse中添加Pythonpath,步骤:窗口——>首选项——>PyDev——>Interpreter-Python
? ?SystemPython中添加?D:\I_VTK\VTK\lib\site-packages\VTK-5.8.0-py2.7.egg
? ? 再将D:\I_VTK\VTK\bin中的所有DLL文件复制到该文件夹下。
? ? 测试例子:将D:\ITK_source\vtk-5.8.0\Examples\Tutorial\Step1\Python文件夹下的www.sxzhongrui.com文件用Eclips打开,运行,效果如下: