第01章-欢迎学习VTK
【译者:这个系列教程是以Kitware公司出版的《VTK User’s Guide -11th edition》一书作的中文翻译(出版时间2010年,ISBN: 978-1-930934-23-8)。由于时间关系,我们不能保证每周都能更新本书内容。但尽量做到一周更新一篇到两篇内容。敬请期待^_^。欢迎转载,另请转载时注明本文出处。谢谢合作!
同一时候,由于译者水平有限,出错之处在所难免,欢迎指出订正!
】
【本节相应原书中的第3页至第7页】
欢迎开启VTK之旅——《VTK用户指南》。VTK是一个开源的、面向对象的计算机图形、可视化和图像处理的软件系统。尽管VTK比較庞大、复杂,可是当你了解了它主要的面向对象的设计和实现的方法以后,你会发现VTK还是比較简单、比較easy入门的。
这本《VTK用户指南》的目的就是帮助你学习、熟悉各种重要的VTK类。
假设你读过这本书的其它版本号,你会发现我们已经開始使用“版次”(Edition Number)而不是VTK的“版本号号”(VersionNumber)来区分更新这本书了。这本书是《VTK用户指南》的“第11版次”(11thEdition)。
《VTK用户指南》的出版已经超过十一个年头,而这个版本号的用户指南的出版距离VTK的面世也超过了十六个年头。
尽管这本书是在VTK 5.6版本号公布前出版的,我们能够非常有信心地说,这本书中所列举的全部素材对VTK将来要公布的其它版本号也将会是有效的。VTK把“向后兼容”(Backwards
Compatability)这个特性当作重中之重。或许某些新的特性在兴许的VTK版本号中会添加进来,显然不会在本书中一一罗列,并且某个现有的特性保持一成不变也是非常少有的。
VTK是一个庞大的系统。
因此,不可能完整的将全部VTK的类以及它们的方法都在这个指南中具体介绍。只是,这个指南将会向你介绍一些重要的系统概念,带领你沿着学习曲线尽可能高速、高效地学习。
一旦你掌握了这个基础,我们建议你利用好其它的学习资源,这些资源包含VTK Doxygen文档(http://www.vtk.org/doc/nightly/html/)以及VTK用户社区。
VTK是一个开源的软件系统。
这意味着成千上万的开发者和用户对这个系统做出了贡献。假设你发现VTK是一种实用的工具。我们鼓舞你贡献出Bug修正代码、算法、想法或者是应用程序回馈到VTK社区中。你也能够联系像Kitware这种商业公司来开发或者添加新的特性和工具。
1.1本书组织结构
这本用户指南共划分成三个部分,每一部分都细分为若干独立的章节。第一部分是VTK的概述,包含(下一章)怎样在计算机上安装VTK。即安装预编译库和可运行程序以及直接从源码编译。第一部分也介绍了主要的系统概念,包含系统架构概览、怎样使用C++、TCL、Java和Python这些编程语言创建应用程序。从某种程度上讲,第二部分是本书的核心。由于这一部分通过众多的样例来说明重要的系统特性。第三部分是针对VTK高级用户的,介绍了怎样创建自己定义的类、扩展系统以及与各种视窗和GUI系统进行整合。第19章罗列了部分VTK类的继承图。通过这些继承图能够对VTK类库之间的关系有个大概的认识,同一时候也对部分过滤器(Filter)做了简要的概括,以及对VTK文件格式的描写叙述。最后是本书的索引部分,借助它能够方便的检索本书的内容。
1.2怎样学习VTK
VTK的用户主要分为两类,第一类是使用C++创建类的开发者。第二类是使用C++类库来建立完整的应用程序的开发者。类开发者必须熟练掌握C++。假设你正在扩展或改动VTK,你必须同一时候熟悉VTK的内部结构和设计(第三部分所涵盖的内容)。应用程序开发者能够使用C++或者不用C++。由于编译好的VTKC++类库已经“封装”了TCL、Python、VB和Java等解释性语言。只是,作为一名应用程序开发者,你必须了解VTK对象的外部接口和他们之间的关系。
学习VTK的关键是熟悉它的对象并知道怎样组合他们。假设你是一位VTK刚開始学习的人,先从安装VTK软件系统開始学习。
假设你是一位类开发者,你可能会下载源码并编译它们。应用程序开发者可能只须要预编译库和可运行程序。
我们建议你通过研究样例程序(假设你是一位应用程序开发者)和源码(假设你是一位类开发者)来学习这个软件系统。
第三章中会对VTK软件系统中的一些关键概念作一个简要概览,然后在第二部分的样例中对这些内容进行回想。你也能够运行随源码公布的各种各样的样例,能够在源码的VTK/Examples文件夹中找到(请查看文件VTK/Examples/README.txt来获取各个子文件夹下演示样例的描写叙述)。在源码公布文件夹中也有非常多測试用例,如在VTK/Graphics/Testing/Tcl以及VTK/Graphics/Testing/Cxx。尽管大多数測试样例没有被载入文档的測试脚本,可是他们对了解VTK中的类怎样组合使用是相当实用的。
1.3VTK软件系统组织结构
接下来简要描写叙述一下各个源码文件夹中的内容,列举各个文件夹的软件功能、文档内容以及数据。
获取软件
能够通过以下两种方式訪问VTK的源码。
1. 从VTK站点(http://www.vtk.org)下载官方公布的源码。
2. 通过Git訪问VTK的源码(gitclone http://vtk.org/VTK.git VTK)。
这本用户指南假定你选择的VTK源码是官网公布的版本号。本书的写作时间是2009年9月份。在写作本书时我们考虑了VTK 5.4以及即将公布的VTK 5.6里的一些新特性。注意,本书的内容对VTK的兴许版本号也是相同适用。
另一点要注意的是。在过去的VTK公布的版本号号中。我们使用了一个主识别号来代表版本号的更新(如,VTK 4.4到VTK5.0),某种程度上也表示版本号的向后兼容性。可是随着版本号的频繁公布,我们可能会面临着公布VTK 5.10版本号(5.10可能会混淆某些用户。让人误会是5.2的前一个版本号。实际上它是在5.8之后公布的),或者会公布VTK6.0,而6.0会让人更加清楚版本号的向后兼容性,所以将来我们会选择公布VTK
6.0而不是VTK5.10(译者:非常显然,Kitware食言了,最后还是公布了VTK5.10,VTK 5的最后一个版本号是VTK5.10.1)。当更新版本号的VTK公布时。你还是能够阅读本书的内容,尽管某些最新的特性没有在本书中提到。但本书中的资源对于将来VTK公布的版本号仍会是适用的。假设想了解将来要公布的VTK的新特性,能够关注VTK的邮件列表(http://www.vtk.org/VTK/help/mailing.html)或是Kitware内部发行的免费刊物《Source》(http://www.kitware.com/products/thesource.html)。
我们强烈建议你使用VTK 5.4或者更高的VTK官方公布版本号。
官方公布版本号比Git版本号稳定性、一致性要更好以及经过严格的測试。当然,假设你一定要用VTK的最新版本号,就先查看一下VTK測试公告栏里的信息。VTK使用了Kitware的软件开发流程(SoftwareProcess)(http://www.kitware.com/solutions/softwareprocess.html)。在你更新Git仓库时,先确认測试公告栏是否为“绿色”。假设不是绿色,有可能所更新的版本号就会不稳定。
(见“Kitware’sQuality
Software Process”一节,了解很多其它VTK代码质量控制公告栏等信息。
)
文件夹结构
開始学习VTK之前,首先有必要对VTK的文件夹结构做一个总体的认识。
即使你是选择预编译二进制文件的安装方式。了解这部分内容也有助你在VTK源码中更方便快捷地查找样例、代码以及文档文件。以下是VTK文档的组织结构:
l InfoVis– 包含了用于信息可视化的类。
l Views– 包含了对数据可视化的类,包含:过滤器(Filter)、可视化(Visualization)、交互(Interaction)和选择(Selection)。
l VTK/CMake– 用于跨平台编译的配置文件。
l VTK/Common– 核心的类
l VTK/Examples– 包含按主题归档的具体凝视的样例。
l VTK/Filtering– 可视化管道中与数据处理有关的类。
l VTK/GenericFiltering– VTK与外部模拟包的接口适配框架。
l VTK/Geovis– 用于地形可视化的视图、数据源和其它对象。
l VTK/Graphics– 处理3D数据的过滤器(Filter)。
l VTK/GUISupport– VTK与MFC和Qt等用户图形界面开发工具的接口类。
l VTK/Hybrid– 同一时候要求使用图形学和图像处理功能的类。
l VTK/Imaging– 图像处理过滤器。
l VTK/IO– 用于读写数据的类。
l VTK/Parallel– 支持并行处理类。如MPI。
l VTK/Rendering– 用于渲染的类。
l VTK/Utilities– 支持像expat, png, jpeg, tiff和zlib等软件库。
Doxygen文件夹包含了从源码里生成Doxygen文档的脚本和配置文件。
l VTK/VolumeRendering– 用于体绘制的类。
l VTK/Widgets– 3D Widget类。
l VTK/Wrapping– 支持对Tcl, Python和Java的封装。
文档
除了这本用户指南以及《The Visualization Toolkit AnObject-Oriented Approach to 3D Graphics》。你还能够获取到其它的文档资源。
Doxygen文档。Doxygen文档是学习VTK非常重要的文档工具,每一个web页上面都具体地描写叙述了VTK里每一个类的使用方法、数据成员、成员函数等。
文档里也列出了类的继承图以及与该类协同工作的其它类的关系图表。每一个文档都有链接到其它类以及源码的超链接。Doxygen文档可通过http://www.vtk.org/doc/nightly/html/在线訪问。
注意你所用的VTK版本号应该与Doxygen文档版本号一致。
头文件。
每一个VTK类都是由一个.h头文件以及.cxx的实现文件构成。全部在头文件里声明的每一个成员函数都是对该类所提供的方法的一种高速检索。(其实,Doxygen文档也是通过这些头文件生成的)。
数据
VTK的程序用例以及測试样例里所用到的数据都能够在http://www.vtk.org上下载到,或者通过Git下载。
怎样使用Git能够訪问VTK官方网页。
1.4其它资源
这本用户指南只是学习VTK的可用资源之中的一个,以下列出了一些在线资源、服务、应用程序以及其它的出版物。相信这些资源对你学习VTK会有非常大的帮助。
l 与这本指南配套的教科书《The VisualizationToolkit An Object-Oriented Approach To 3D Graphics》深入解说了很多VTK里使用到的算法、数据结构等。
这本书是Kitware公司出版的。你能够在Kitware站点或者亚马逊站点上购买到。
l 《Source》是Kitware公司按季度发行的内部刊物,里面涵盖了Kitware公司的全部开源项目。一旦有新的功能加进VTK时,会有相关的文章发表在《Source》上。与VTK有关的其它实用的资源、入门等东西也会在季刊上发表。
你能够在线訪问《Source》(http://www.kitware.com/products/thesource.html)。或者通过邮箱注冊请求发送每期的《Source》季刊。
l VTK官网上含有大量的资源,如在线帮助文档、Wiki、常见问题解答、dashboard、bug跟踪以及vtkusers邮件列表的搜索引擎。
无论是刚開始学习的人还是经验丰富的开发者。Doxygen文档都是不可多得的好资源。
l vtkusers邮件列表能够让用户和开发者提问题以及接收别人的解答、公布更新、bug修复和改进的内容。以及提出改进系统的建议。
请訪问VTK官网查询怎样添加vtkusers邮件列表(注冊地址:http://public.kitware.com/mailman/listinfo/vtkusers)。
l Kitware公司开设了专业的培训课程。涵盖了Kitware公司的全部开源项目。包含VTK。ITK,CMake和ParaView等,每年在纽约北部地区举办两次。
另外Kitware公司也能够依据你的开发团队提供一些定制的培训课程。很多其它信息请訪问Kitware官网或者直接发邮件到courses@kitware.com咨询。
l Kitware公司也提供了商业支持和顾问。主要包含VTK专家辅助项目开发、依据你的项目具体说明书Kitware为你提供大规模的顾问等。你能够訪问Kitware官网或者发送邮件到sales@kitware.com获取很多其它信息。
l ParaView是用VTK实现的针对科学可视化的应用程序。可从http://paraview.org上下载。使用ParaView来学习VTK是比較不错的选择,由于你能够通过用户图形界面来熟悉VTK的大部分经常使用的功能。
这也是非常有參考价值的,你能够载入自己的数据,看看主要有哪些可视化技术是能够使用以及你自己希望具有什么样的性能等等。
l CMake是用于跨平台构建编译环境的开源工具。
对于VTK刚開始学习的人来说,只要掌握非常少的关于CMake的知识就能够在标准的Windows,Linux或Mac OSX平台上成功编译VTK。对于一些高级用户来说。他们会认为CMake在开发过程中起到的作用是相当明显的。要把VTK移植到非标准的平台上时就须要掌握很多其它的关于CMake的知识。
能够訪问CMake官网http://cmake.org了解很多其它的信息。
l CDash是VTK採用的用于源码測试的开源平台。你能够在VTK官网上找到VTK的測试公告栏(由CDash提供技术支持)。
公告栏显示了在不同的平台上经过測试的一些结果。对于一些在非标准的平台上进行开发的人员能够贡献他们的測试结果。10.8节中会有具体内容介绍Kitware的软件开发流程。
译者:国内眼下学习VTK入门的中文资料,主要有【东灵工作室】撰写以及整理的VTK系列教程。希望大家能多多支持我们,一起推动VTK在中华地区的发展。
【第1章 翻译完成】
第01章-欢迎学习VTK的更多相关文章
- 异步编程系列第01章 Async异步编程简介
p { display: block; margin: 3px 0 0 0; } --> 2016.10.11补充 三个月过去了,回头来看,我不得不承认这是一系列失败的翻译.过段时间,我将重新翻 ...
- 跟着鸟哥学Linux系列笔记3-第11章BASH学习
跟着鸟哥学Linux系列笔记0-扫盲之概念 跟着鸟哥学Linux系列笔记0-如何解决问题 跟着鸟哥学Linux系列笔记1 跟着鸟哥学Linux系列笔记2-第10章VIM学习 认识与学习bash 1. ...
- 第二章 开始学习C++
第二章 开始学习C++ 2.1 main函数 简单代码如下: #include <iostream> int main() { //This is my first program u ...
- 第01章 Spring概述
第01章 Spring概述 1.Spring概述 ①Spring是一个开源框架 ②Spring为简化企业级开发而生,使用Spring,JavaBean就可以实现很多以前要靠EJB才能实现的功能.同样的 ...
- 《C++Primer》第五版习题解答--第四章【学习笔记】
[C++Primer]第五版习题解答--第四章[学习笔记] ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/11 第四章:表达式 练习4. ...
- 《C++Primer》第五版习题答案--第五章【学习笔记】
<C++Primer>第五版习题答案--第五章[学习笔记] ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/15 第五章:语句 ...
- 《C++Primer》第五版习题答案--第六章【学习笔记】
<C++Primer>第五版习题答案--第六章[学习笔记] ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/16 第六章:函数 ...
- SSM到Spring Boot-校园商铺平台:第01章 开发准备
第01章 开发准备 环境准备 创建一个Maven项目作为开始 添加一个 Server Runtime 添加maven的java编译插件 <build> <finalName>$ ...
- 逆向基础 C++ Primer Plus 第二章 开始学习C++
C++ Primer Plus 第二章 开始学习C++ 知识点梳理 本章从一个简单的C++例子出发,主要介绍了创建C++程序的步骤,以及其所包含的预处理器编译指令.函数头.编译指令.函数体.注释等组成 ...
随机推荐
- ng-深度学习-课程笔记-10: 机器学习策略2(Week2)
1 误差分析( Carrying out error analysis ) 假设你训练了一个猫的二分类模型,在开发集上的错误率是10%,你想分析这10%的错误率来自哪里,怎么做呢? 先把这些错分的图片 ...
- sqlserver create table
①sql 语句创建(项目使用) use sps_db go if exists(select name from sys.tables where name='event_profile_level2 ...
- centos6.5/6.6配置java环境以及数据库
配置java环境 一.解压jdk 二.配置环境变量 1.修改修改/etc/profile文件(推荐开发环境使用,因为所有用户shell都有权使用这些环境变量,可能带来环境问题) 在profile末尾加 ...
- Ubuntu 16.04 (官方命令行)安装MongoDB 3.6.2(社区版)
概述 使用本教程从 .deb 包在LTS Ubuntu Linux系统上安装MongoDB Community Edition. 虽然Ubuntu包含自己的MongoDB包,但官方的MongoDB社区 ...
- js 打印软件 Lodop
官网首页:http://www.c-lodop.com/index.html 下载页面里有使用手册可下载.
- 两行python代码,你是否可猜到运行结果
两行python代码,你是否可猜到运行结果 参考: http://www.cnblogs.com/way_testlife/archive/2011/07/20/2111549.html#215689 ...
- Python学习札记(三十) 面向对象编程 Object Oriented Program 1
参考:OOP NOTE 1.面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. ...
- 使用 if 表达式
由于 if 本质上是一个原函数,它的返回值就是满足条件分支表达式的值,因此,if 表达式也可以用作内联函数.我们以 check_positive( )为例进行说明.尽管条件表达式中不另写 return ...
- 反射中的 Class.forName() 与 ClassLoader.loadClass() 的区别
在Java中,类加载器把一个类加载进Java虚拟机中,要经过三个步骤来完成:加载.链接和初始化,其中链接又可以分成验证.准备和解析三步,除了解析外,其它步骤是严格按照顺序完成的,各个步骤的主要工作如下 ...
- Spring IOC容器的初始化流程
IOC初始化流程 Resource定位:指对BeanDefinition的资源定位过程.Bean 可能定义在XML中,或者是一个注解,或者是其他形式.这些都被用Resource来定位, 读取Resou ...