003-《VTK文档》-入门

介绍

欢迎来到VTK的世界!
我们建议您首先阅读VTK教科书
它是VTK的综合指南,涵盖VTK提供的各项功能的所有方面的指导信息。
此外,您可能会发现VTK教科书对于探索和学习VTK的各种示例会有非常大的帮助。
VTK示例是一系列非常有用的参考资料的集合。
这些参考材料演示了如何使用VTK的不同模块和功能。

在深入学习VTK的功能之前,请确保您的实现环境环境符合VTK的系统要求
根据您的编程经验和需求,您可以选择不同的编程语言与VTK一起使用。
我们有相关文档用于说明如何基于
Python、Jupyter、C ++和Cmake、JavaScript和WebAssembly来使用VTK的功能。

最后,为了帮助您满足特定的需求,
您还可以考虑探索现有的免费和开源框架或应用程序,了解它们是如何使用VTK的。
这些框架和应用程序可以根据特定的使用场景进行扩展和自定义。
另外,这些框架和应用程序也有可能已经为您的项目提供了现成的解决方案。

系统要求

运行时环境

需要Python 3.x或更高版本,以实现通过Python脚本调用VTK相关功能。

需要MacOS10.10或更高版本,以便在MacOS操作系统下使用VTK相关功能。

需要OpenGL3.2或更高版本,以使用VTK相关功能。但VTK中的部分高级功能可能需要较高的OpenGL版本。

构建环境

请检查构建必备的环境资源

使用python

在Windows,MacOS和Linux系统上,均可使用PyPI来安装用于Python环境的VTK模块。

使用如下命令可以安装Pyton的VTK模块:
pip install vtk

如果不想在全局环境下为Python安装VTK模块,
可以通过如下命令在局部虚拟环境中为Python安装VTK模块。

Linux操作系统中,在局部虚拟环境中为Python安装VTK模块

python -m venv ./env
source ./env/bin/activate
pip install vtk

MacOS操作系统中,在局部虚拟环境中为Python安装VTK模块

python -m venv ./env
source ./env/bin/activate
pip install vtk

Windows操作系统中,在局部虚拟环境中为Python安装VTK模块

使用PowerShell
python -m venv env
.\env\Activate.ps1
pip install vtk
使用cmd.exe
python -m venv env
.\env\activate.bat
pip install vtk

若要验证为Python环境安装的VTK模块是否能正常工作,可以在Python交互命令行中输入以下命令:

import vtk
print(vtk.__version__)
9.2.6

至此,基于Python的VTK开发环境就搭建好了!
您现在可以尝试一些基于Python开发环境的教程如何实现的指导或一些示例

如果您希望通过更加高层级的接口在Python环境中使用VTK,您可以尝试了解一下PyVista
它以更加符合Python使用习惯的方式对原始的VTK功能模块进行了更高层级的封装。

如果您在没有显示器或GPU的Linux/Windows计算机中运行脚本,
VTK将自动选择适当的OpenGL渲染窗口类。
可以在OpenGL一节中进一步了解有关如何影响渲染窗口选择过程的更多信息。

在Jupyter中使用VTK模块

在Jupyter中使用VTK渲染时,有如下几种选择。

为了在Jupyter中,充分发挥VTK的全部能力,
您可能需要利用PyVistaTrame
PyVista公开了一套高层级的接口,以便利用VTK进行绘图,
联合使用PyVista和Trame,可以将VTK的全部功能带入Jupyter记事本中。
在VTK话题论坛上有一篇关于这一使用场景的帖子。
有关“在Jupyter中通过PyVista对VTK的封装层来使用VTK模块”的更多信息,可以参考PyVista的文档。

itkwidgets是基于VTK构建特定领域的Jupyter查看器的一个示例
若要尝试使用itkwidgets,请查看这个示例。

如果您在没有显示器或GPU的Linux/Windows计算机中运行脚本,
VTK将自动选择适当的OpenGL渲染窗口类。
可以在OpenGL一节中进一步了解有关如何影响渲染窗口选择过程的更多信息。

基于C++开发语言和CMake构建工具使用VTK功能模块

CMake是一个平台无关的开源构建系统,可以管理从源代码到可执行的二进制程序的整个软件构建过程。
如果您是CMake的新手,可以在CMake网站上找到更多信息。

安装二进制版本

社区维护的有预先构建的、适用于不同操作系统环境的VTK二进制软件包。

详情如下表所示:

操作系统/软件包管理器软件包名称版本
Fedora Rawhidevtk-develFedora rawhide package
Fedora 38vtk-develFedora 38 package
Fedora 37vtk-develFedora 37 package
Ubuntu 23.04 (lunar)libvtk9-devUbuntu lunar package
Ubuntu 22.10 (kinetic)libvtk9-devUbuntu kinetic package
Ubuntu 22.04 (jammy)libvtk9-devUbuntu jammy package
Ubuntu 20.04 (focal)libvtk7-devUbuntu focal package
Debian unstablelibvtk9-devel Debian unstable package
Debian testinglibvtk9-develDebian testing package
Debian stablelibvtk9-develDebian stable package
GentoovtkGentoo package
homebrewvtkhomebrew version
vckpgvtkVcpkg
spackvtkSpack

请注意,这些预先构建好的软件包可能缺少一些可选功能,如MPI,Qt等。
或者,它们可能不包含最新的VTK功能。
检查每个软件包的文档,以确认构建是否包含您需要的功能模块。
如果缺少所需的内容,则需要从头开始构建VTK

构建可执行文件

一旦使用上面的任何一种方法部署好了构建好的VTK二进制模块,
您就可以在您的项目中通过CMake的find_package指令来使用VTK功能模块:

find_package(VTK
  COMPONENTS
  .. list of vtk modules to link to
)

# 您的可执行程序
add_executable(testExample ...)

# 链接到所需要的VTK模块
target_link_libraries(testExample
  PRIVATE
   ${VTK_LIBRARIES}
)

vtk_module_autoinit(
  TARGETS testExample
  MODULES ${VTK_LIBRARIES}
)

vtk_module_autoinit()负责触发某些VTK类所需的静态代码生动动作。
有关VTK自动系统系统的更多详细信息,请参见此处

您的项目所需的VTK模块的列表,取决于您代码中的#include指令包含的头文件。
头文件所属的模块,在大多数情况下是由其在VTK源代码树中的位置确定的。
例如:vtkXMLPolyDataReader位于IO/XML下方,因此它属于IOXML模块。
若要以验证模块名是否正确,可以检查与头文件同一目录中随附的vtk.module文件。

上面的方法在大多数情况下都适用,但它并未表达出某些模块所依赖的其它模块。
找到某个模块所依赖的其它模块的更好(或者说更容易)的方法是vtkmodulesforcxx脚本。

例如:在运行CylinderEXample示例的CMake脚本时,我们在脚本中可以看到以下建议:

find_package(VTK
 COMPONENTS
    CommonColor
    CommonCore
    FiltersSources
    RenderingCore
    #
    # These modules are suggested since they implement an existing module.
    # You may need to uncomment one or more of these.
    # If vtkRenderWindow is used and you want to use OpenGL,
    #   you also need the RenderingOpenGL2 module.
    # If vtkRenderWindowInteractor is used,
    #    uncomment RenderingUI and possibly InteractionStyle.
    # If text rendering is used, uncomment RenderingFreeType
    #
    # InteractionStyle  # implements VTK::RenderingCore
    # RenderingCellGrid # implements VTK::RenderingCore
    # RenderingFreeType # implements VTK::RenderingCore
    # RenderingOpenGL2  # implements VTK::RenderingCore
    # RenderingUI       # implements VTK::RenderingCore
)

根据脚本的建议以及上方的模板,CMakeLists.txt的相关部分可修改为:

...
find_package(VTK COMPONENTS
  CommonColor
  CommonCore
  FiltersSources
  InteractionStyle
  RenderingContextOpenGL2
  RenderingCore
  RenderingFreeType
  RenderingGL2PSOpenGL2
  RenderingOpenGL2
)

add_executable(CylinderExample CylinderExample.cxx)
target_link_libraries(CylinderExample PRIVATE ${VTK_LIBRARIES})
# vtk_module_autoinit is needed
vtk_module_autoinit(
  TARGETS CylinderExample
  MODULES ${VTK_LIBRARIES}
)

该示例的完整来源代码可以在此处找到。

可使用如下命令构建此示例:

mkdir build
cd build
ccmake ../ # or cmake-gui if on Windows

如果使用ccmake,请按C键继续。如果使用cmake-gui,请点击“配置”按钮。
如果是使用从头开始构建的VTK二进制库文件,
则需要将VTK_DIR设置为从头构建的VTK的安装路径。
如果ccmake或cmake-gui没有报告任何错误,退出ccmake或cmake-gui,
并使用如下命令构建该项目:

cmake --build .

运行示例

./CylinderExample

若要查看更多示例,请参考VTK示例网站中的教程、如何实现的指导文档或示例部分。

使用JavaScript#

vtk.js是JavaScript中的VTK实现,由ES6类库组成,可以集成到任何Web应用程序中。
请参阅此处以进一步了解有关VTK C++和vtk.js之间差异的更多信息。

使用WebAssembly

VTK-Wasm是一种原型基础平台,它可以通过Emscripten将VTK C++代码编译为WebAssembly。
此功能仍在积极开发中。

要了解有关VTK-Wasm及其功能的更多信息,请查看以下资源:

您随时可以在VTK话题论坛的Web/VTK-Wasm版块中分享您的经验、问题和想法。
请继续关注该模块的更新和新的发展!

使用现有的框架和应用程序#

有许多基于VTK的、免费的开源应用程序,用于科学、生物医药和医学图像的可视化和处理等场景。
其中一些是基于VTK的、可扩展得的框架,可以针对特定应用场景进行定制。
ParaviewTramePyVista3DSlicer都是这样的示例应用程序。
因此,值得花时间评估一下这些示例应用中的任何一个是否可以解决自己的挑战。
如果可以解决,则可通过避免从头开始重新开发所有内容以及利用包含数千专家的开源社区,
来节省开发满足您的特定场景需求的应用程序所需要的时间。

通常,这些应用程序的默认(复杂但功能强大)的用户界面使人们可以找出完整的工作流程。
一旦确切地知道做什么以及如何做,就可以创建一小段Python脚本。
可以通过Python脚本实现大多数操作步骤的自动化,并简化用户界面以方便用户交互操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值