vtk开始使用vtk


备注

本节概述了vtk是什么,以及开发人员可能想要使用它的原因。

它还应该提到vtk中的任何大型主题,并链接到相关主题。由于vtk的文档是新的,您可能需要创建这些相关主题的初始版本。

安装或设置

在Windows 7上构建和安装

先决条件

  • 如果你想从最新的源代码构建VTK,你需要来自Here的 git,或者你可以下载代码的快照作为zip并解压缩到你的磁盘驱动器
  • CMake的
  • Microsoft Visual Studio 2015
  • 充足的自由空间 - 至少有几GB要安全,真正取决于你想要建造什么

做好准备

  • 我喜欢保持干净,所以我通常创建3个文件夹,如下所示:
c:\vtk              #
c:\vtk\src          # 'code base' folder
c:\vtk\build        # 'out of source' build folder
c:\vtk\install      # 'install folder' where the 'installed' files will reside
 
  • 如果使用git方法,

    • 打开命令提示符
    • 更改工作目录cd c:\vtk\src
    • 克隆git存储库git clone https://gitlab.kitware.com/vtk/vtk.git 。这可能需要一段时间,具体取决于您的Internet连接速度
    • 如果您在代理后面工作,则需要设置git才能使用它。看到这个问题如何做到这一点。
  • 如果使用zip方法,请将源代码解压缩到c:\vtk\src

组态

  • 启动CMake GUI
  • 选择c:\vtk\srcWhere is the source code:
  • 选择c:\vtk\buildWhere to build the binaries:
  • 点击Configure 并选择Visual Studio 2015 作为所需的生成器
  • 您将看到许多配置选项
  • 我通常使用以下设置进行最小化构建
    • CMAKE_INSTALL_PREFIX = c:\vtk\install
    • 打勾了BUILD_SHARED_LIBS
    • BUILD_DOCUMENTATION 未经批准
    • BUILD_TESTING 未经批准
    • CMAKE_CXX_MP_FLAG 。这将使用所有CPU内核(在多核/多处理器系统上)来加速构建
  • 保持命中Configure 纠正任何错误,直到所有RED条目变为白色
  • 命中Generate
  • 关闭CMake GUI

建造

  • 如果这一代人成功应该有
    • Visual Studio解决方案:
      c:\vtk\build\vtk.sln
       
    • 一堆项目文件 -
      ALL_BUILD.vcxproj
      INSTALL.vcxproj
      vtkCompileTools.vcxproj
      VTKData.vcxproj
      ZERO_CHECK.vcxproj
       
  • 您可以使用命令行或使用IDE来构建它
  • 我更喜欢命令行,因为它通常更快并且使用更少的RAM
  • 使用命令行
    • 启动Developer Command Prompt For Visual Studio 2015
    • 更改工作目录: cd c:\vtk\build
    • 启动msbuild:
      • 用于调试版本
        • msbuild /p:Configuration=Debug ALL_BUILD.vcxproj
        • msbuild /p:Configuration=Debug INSTALL.vcxproj
      • 用于发布版本
        • msbuild /p:Configuration=Release ALL_BUILD.vcxproj
        • msbuild /p:Configuration=Release INSTALL.vcxproj
  • 使用IDE
    • 使用Visual Studio 2015打开VTK.sln 并构建INSTALL.vcxproj
    • 这种技术通常较慢,因为IDE将开始为解决方案中列出的每个项目构建智能感知
  • c:\vtk\install 现在应该有一些新的文件夹
    • bin #包含dll文件
    • lib #包含lib文件
    • cmake
    • share
    • include #包含头文件

使用构建

  • 要在Visual C ++项目中使用VTK,必须使用
    • 配置编译器头文件搜索路径以包括c:\vtk\include\vtk-<version>
    • 配置链接器库文件搜索路径以包含c:\vtk\lib
    • 配置链接器以链接到所需的.lib 文件
    • 将所需的DLL复制到输出文件夹
  • 我已经整理了一个小的道具文件来处理所有四个任务c:\vtk\vtk.vsprops
<?xml version="1.0" encoding="UTF-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <VTK_ROOT_DIR>$(MSBuildThisFileDirectory)</VTK_ROOT_DIR>
        <VTK_BIN_DIR>$(VTK_ROOT_DIR)\bin</VTK_BIN_DIR>
        <VTK_INC_DIR>$(VTK_ROOT_DIR)\include\vtk-7.0</VTK_INC_DIR>
        <VTK_LIB_DIR>$(VTK_ROOT_DIR)\lib</VTK_LIB_DIR>
    </PropertyGroup>

    <PropertyGroup>
        <BuildDependsOn>CopyVTKBinariesList;$(BuildDependsOn);</BuildDependsOn>
    </PropertyGroup>

    <Target Name="CopyVTKBinariesList">
        <ItemGroup>
            <VtkBinaries Include="$(VTK_BIN_DIR)\*.dll" />
        </ItemGroup>
        <Copy SourceFiles="@(VtkBinaries)"
              DestinationFiles="@(VtkBinaries->'$(OutDir)\%(RecursiveDir)%(Filename)%(Extension)')"
              SkipUnchangedFiles="true" />
    </Target>

    <ItemDefinitionGroup>
      <ClCompile>
        <AdditionalIncludeDirectories>$(VTK_INC_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      </ClCompile>
      <Link>
        <AdditionalLibraryDirectories>$(VTK_LIB_DIR);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
        <AdditionalDependencies>vtkalglib-7.0.lib;vtkChartsCore-7.0.lib;vtkCommonColor-7.0.lib;vtkCommonComputationalGeometry-7.0.lib;vtkCommonCore-7.0.lib;vtkCommonDataModel-7.0.lib;vtkCommonExecutionModel-7.0.lib;vtkCommonMath-7.0.lib;vtkCommonMisc-7.0.lib;vtkCommonSystem-7.0.lib;vtkCommonTransforms-7.0.lib;vtkDICOMParser-7.0.lib;vtkDomainsChemistry-7.0.lib;vtkDomainsChemistryOpenGL2-7.0.lib;vtkexoIIc-7.0.lib;vtkexpat-7.0.lib;vtkFiltersAMR-7.0.lib;vtkFiltersCore-7.0.lib;vtkFiltersExtraction-7.0.lib;vtkFiltersFlowPaths-7.0.lib;vtkFiltersGeneral-7.0.lib;vtkFiltersGeneric-7.0.lib;vtkFiltersGeometry-7.0.lib;vtkFiltersHybrid-7.0.lib;vtkFiltersHyperTree-7.0.lib;vtkFiltersImaging-7.0.lib;vtkFiltersModeling-7.0.lib;vtkFiltersParallel-7.0.lib;vtkFiltersParallelImaging-7.0.lib;vtkFiltersProgrammable-7.0.lib;vtkFiltersSelection-7.0.lib;vtkFiltersSMP-7.0.lib;vtkFiltersSources-7.0.lib;vtkFiltersStatistics-7.0.lib;vtkFiltersTexture-7.0.lib;vtkFiltersVerdict-7.0.lib;vtkfreetype-7.0.lib;vtkGeovisCore-7.0.lib;vtkglew-7.0.lib;vtkhdf5-7.0.lib;vtkhdf5_hl-7.0.lib;vtkImagingColor-7.0.lib;vtkImagingCore-7.0.lib;vtkImagingFourier-7.0.lib;vtkImagingGeneral-7.0.lib;vtkImagingHybrid-7.0.lib;vtkImagingMath-7.0.lib;vtkImagingMorphological-7.0.lib;vtkImagingSources-7.0.lib;vtkImagingStatistics-7.0.lib;vtkImagingStencil-7.0.lib;vtkInfovisCore-7.0.lib;vtkInfovisLayout-7.0.lib;vtkInteractionImage-7.0.lib;vtkInteractionStyle-7.0.lib;vtkInteractionWidgets-7.0.lib;vtkIOAMR-7.0.lib;vtkIOCore-7.0.lib;vtkIOEnSight-7.0.lib;vtkIOExodus-7.0.lib;vtkIOExport-7.0.lib;vtkIOGeometry-7.0.lib;vtkIOImage-7.0.lib;vtkIOImport-7.0.lib;vtkIOInfovis-7.0.lib;vtkIOLegacy-7.0.lib;vtkIOLSDyna-7.0.lib;vtkIOMINC-7.0.lib;vtkIOMovie-7.0.lib;vtkIONetCDF-7.0.lib;vtkIOParallel-7.0.lib;vtkIOParallelXML-7.0.lib;vtkIOPLY-7.0.lib;vtkIOSQL-7.0.lib;vtkIOVideo-7.0.lib;vtkIOXML-7.0.lib;vtkIOXMLParser-7.0.lib;vtkjpeg-7.0.lib;vtkjsoncpp-7.0.lib;vtklibxml2-7.0.lib;vtkmetaio-7.0.lib;vtkNetCDF-7.0.lib;vtkNetCDF_cxx-7.0.lib;vtkoggtheora-7.0.lib;vtkParallelCore-7.0.lib;vtkpng-7.0.lib;vtkproj4-7.0.lib;vtkRenderingAnnotation-7.0.lib;vtkRenderingContext2D-7.0.lib;vtkRenderingContextOpenGL2-7.0.lib;vtkRenderingCore-7.0.lib;vtkRenderingFreeType-7.0.lib;vtkRenderingImage-7.0.lib;vtkRenderingLabel-7.0.lib;vtkRenderingLOD-7.0.lib;vtkRenderingOpenGL2-7.0.lib;vtkRenderingVolume-7.0.lib;vtkRenderingVolumeOpenGL2-7.0.lib;vtksqlite-7.0.lib;vtksys-7.0.lib;vtktiff-7.0.lib;vtkverdict-7.0.lib;vtkViewsContext2D-7.0.lib;vtkViewsCore-7.0.lib;vtkViewsGeovis-7.0.lib;vtkViewsInfovis-7.0.lib;vtkzlib-7.0.lib;%(AdditionalDependencies)</AdditionalDependencies>
      </Link>
    </ItemDefinitionGroup>
    <ItemGroup />

</Project>
 
  • 上面的vsprops文件复制c:\vtk\bin 文件夹中的所有可用dll。

  • 确保DLL可以定位的另一种方法是使用alter PATH环境变量进行调试会话,并将VTK二进制文件路径作为加载依赖项时要搜索的第一个目录。以下片段可以代替CopyVTKBinariesList 任务来执行此操作。

    <PropertyGroup>
      <LocalDebuggerEnvironment>PATH=$(VTK_BIN_DIR);%PATH%;$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment>
    </PropertyGroup>
    
  • 对于最终部署,您可能希望使用Dependency Walker之类的工具来跟踪使用哪些dll及其依赖项,并且仅捆绑那些用于重新分发的dll。

  • 要在Visual C ++项目中使用props文件,您可以使用Visual Studio中的Property Manager工具(Menu:View => Property Manager)或使用文本编辑器编辑vcxproj并添加以下行<Import Project="C:\vtk\vtk.vsprops" /> 下面的其他项目导入。

打扫干净

  • 如果你想恢复一些磁盘空间,你可以删除c:\vtk\build 文件夹,但缺点是你无法调试到vtk

卸载

  • 如果您不想再使用VTK,只需删除c:\vtk 文件夹即可

MacOSX和Unix:

  1. 此处安装最新版本的CMake
  2. 这里下载最新的VTK。
  3. 为VTK mkdir <path_to_build_directory 创建一个构建目录
  4. 配置ccmake <path_to_VTK_directory -G "UNIX Makefiles" \ -DVTK_USE_QVTK:BOOL=ON \ -DVTK_USE_CARBON:BOOL=ON \ -DCMAKE_INSTALL_PREFIX=/usr/local \ -DVTK_USE_GUISUPPORT:BOOL=ON 或使用GUI与ccmake <path_to_VTK_directory
  5. 进入构建目录并使用make -j (你不必使用-j 但编译真的很长。
  6. 最后使用make install