1.编写的程序

#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL);
///
#include "vtkCylinderSource.h"
#include "vtkPolyDataMapper.h"
#include "vtkActor.h"
#include "vtkProperty.h"
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkCamera.h"int main()
{/Visualize Pipeline: Source->Mapper->Actor//vtkCylinderSource* cylinder = vtkCylinderSource::New();cylinder->SetResolution(10);vtkPolyDataMapper* cylinderMapper = vtkPolyDataMapper::New();cylinderMapper->SetInputConnection(cylinder->GetOutputPort());vtkActor* cylinderActor = vtkActor::New();cylinderActor->SetMapper(cylinderMapper);///Actor propertycylinderActor->GetProperty()->SetColor(1.0,0.32,0.27);cylinderActor->RotateX(30.0);cylinderActor->RotateY(-45);//Render Engine:Renderer->RenderWindow->RenderWindowInteractor//vtkRenderer* cylinderRenderer = vtkRenderer::New();vtkRenderWindow* cylinderRenderWindow = vtkRenderWindow::New();vtkRenderWindowInteractor* iren = vtkRenderWindowInteractor::New();cylinderRenderWindow->AddRenderer(cylinderRenderer);iren->SetRenderWindow(cylinderRenderWindow);//Visualize Pipeline -> Render Engine//cylinderRenderer->AddActor(cylinderActor);cylinderRenderer->SetBackground(0.1,0.2,0.4); // render background propertycylinderRenderWindow->SetSize(400,400);  //render window size//Camera// The renderer renders into the// render window. The render window interactor captures mouse events// and will perform appropriate camera or actor manipulation// depending on the nature of the events.cylinderRenderer->ResetCamera();cylinderRenderer->GetActiveCamera()->Zoom(1.5);  //focus/Window Hold Oniren->Start();/Clear Memoryiren->Delete();cylinderRenderWindow->Delete();cylinderRenderer->Delete();cylinderActor->Delete();cylinderMapper->Delete();cylinder->Delete();return 0;
}

程序运行结果:

2.心得体会

2.1 对“Visualize Pipeline & Render Engine”设计体系的理解

VTK程序设计严格遵循流水线设计风格。根据我的经验,建议程序设计过程中分模块设计。Part1:Visualize Pipeline(Source -> Mapper -> Actor)  此部分还应该包括Actor Property(不知道中文该怎么翻译,权且当给演员化妆)。Part2:Render Engine(Renderer -> RenderWindow -> RenderWindowInteractor) 这一部分主要工作就是显示窗口可以容纳多少RenderWindow,我们可以理解为窗口可以装的下多少演员!Part3:Communication 这是最重要的环节,以上两个部分搭建好了之后,我们要把Actor装进Renderer(通俗的讲,就是要把妆都画好了的演员送到舞台上)。此外这一部分也会涉及到Renderer(渲染器/舞台)背景设置、以及RenderWindow(观众们看到的窗口)的尺寸。

2.2 窗口一闪即逝

调试的过程中,我发现最终呈现给我的窗口始终不能稳定的存在(一闪即逝)。这是正常现象,因为程序就是这样设计的,如果想让窗口停留一段时间,就要用到类RenderWindowInteractor(用户与窗口交互),并调用Start函数。

3.3 摄像机Camera

Camera在这里用处是不大的,只有在用户交互时才会体会到它的强大。

3.未解决的问题

3.1 Procedural Source Object 怎么翻译?

一脸懵逼,重点应该在Procedural,“程序上的”?

3.2 关于TCL语言与C++语言相互转换

User Guide上给的功能还包括一个快捷键调用,可惜不能把它从Tcl转换成C++;东灵的那本书更是对用户手册的翻译,并没有更加深刻地阐明这个事儿,还需要去探索,回头再解决。
# Associate the “u” keypress with a UserEvent and start the event loop
iren AddObserver UserEvent {wm deiconify .vtkInteract}
iren Initialize
# suppress the tk window
wm withdraw .

VTK修炼之道5_Procedural Source Object相关推荐

  1. VTK修炼之道2_VTK体系结构1

    1.OverView综述 The Visualization Toolkit consists of two basic subsystems: a compiled C++ class librar ...

  2. 【转】VTK修炼之道2_VTK体系结构1

    1.OverView综述 The Visualization Toolkit consists of two basic subsystems: a compiled C++ class librar ...

  3. VTK修炼之道82:VTK管线机制_信息对象类VTKInformation

    1.VTK管线机制 VTK中通过管线机制来实现组合各种算法处理数据.每一种算法是一个Filter,多个Filter连接在一起形成VTK管线.每个Filter可以分为两个组成部分:一个是算法对象,继承自 ...

  4. VTK修炼之道10:可视化管道的连接与执行

    1.可视化管道综述 vtkProp;  vtkAbstractMapper; vtkProperty;  vtkCamera;  vtkLight;  vtkRenderer;  vtkRenderW ...

  5. VTK修炼之道3_VTK体系结构2

    上一篇博客主要介绍了VTK的构架以及Render Engine.接触过VTK的同学都知道,VTK主要有Pipeline和Render Engine两部分构成,这里详细介绍了Pipeline部分内容. ...

  6. VTK修炼之道80:VTK开发基础_智能指针与引用计数

    1.引用计数 VTK经过多年的开发与维护,已经形成了一套稳定的框架和开发规则.因此,了解这些规则和框架是定制VTK类的基础,这其中用到了大量面向对象的设计模式,例如对象工程模式.观察者/命令模式:还有 ...

  7. VTK修炼之道71:交互与Widget_观察者/命令模式

    1.前言 一个强大的可视化系统不仅需要强大的数据处理能力,也需要方便易用的交互功能.图形处理软件ParaView(hhttp://www.paraview.org).德国癌症研究中心研发的MITK(h ...

  8. VTK修炼之道58:图形基本操作进阶_点云配准技术(迭代最近点ICP算法)

    1.Iterative Closest Points算法 点云数据配准最经典的方法是迭代最近点算法(Iterative Closest Points,ICP).ICP算法是一个迭代的过程,每次迭代中对 ...

  9. VTK修炼之道57:图形基本操作进阶_点云配准技术(LandMark标记点算法和坐标系显示方法)

    1.点云配准 在计算机逆向工程中,通过三维扫描等实物数字化技术可以获取各种点云数据.但是受到测量环境和设备的影响,再一次测量的情况下,难以获取实物整体的点云数据,因此需要多次从不同角度进行测量.但不同 ...

最新文章

  1. Eclipse中安装HibernateTools插件
  2. navicat for mysql 怎么连接远程数据库服务器
  3. 【PAT (Advanced Level) Practice】1050 String Subtraction (20 分)
  4. 使用nodejs构建Docker image最佳实践
  5. java如何实现信号量_使用二进制信号量实现通用信号量
  6. bzoj 2245 [SDOI2011]工作安排【最小费用最大流】
  7. 根据 sitemap 的规则[0],当前页面 [pages/index/index] 将被索引 提示
  8. Ganglia 权威指南-安装Ganglia过程
  9. linux下svn服务器的安装配置和使用
  10. linux服务器数据库和监听自启动,linux64的神通数据库安装与启动
  11. 485通讯线是几芯的_RS232/485串口通讯基础知识
  12. Java多线程之二(Synchronized)
  13. 《深入理解Nginx》 学习笔记(二)
  14. 德国人预测世界杯: 冠军是西班牙!
  15. R语言:基本变量及其之间关系探索分析
  16. 安装卸载Xftp时,遇到的1605和1628问题
  17. C#ObjectArx Cad删除实体
  18. 写一个Singleton模式的例子
  19. Charles 注册码
  20. 验证微软和微软提供给第三方的数字签名

热门文章

  1. VS2008 fatal error LNK1000: Internal error during IncrBuildImage 解决方案
  2. 一名普通程序员的自我诊断书
  3. MySQL数据库引擎快速指导
  4. js笔记(9)之定时器数字时钟延时提示框
  5. luogu P5304 [GXOI/GZOI2019]旅行者
  6. 6993: Dominoes(纯bfs)
  7. 软件体系架构——质量属性
  8. HDU2504 又见GCD
  9. 关于成为一名优秀的软件测试工程师
  10. linux Ubuntu apache2 伪静态设置