vtk例子中tutorial里的实例源码详解
来源:互联网 发布:数据运营专员做什么的 编辑:程序博客网 时间:2024/06/05 04:00
上一篇blog讲解了cmake编译或者自己添加工程的include,lib的方法,因此对源代码进行进一步的说明,从而有利于更好的理解vtk和cmake编程。
cmake代码详解:
打开tutorial里step文件夹的CMakeLists.txt文件,该文件定义了整个工程基本信息。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
PROJECT (Step1) //定义工程名为 Step1
IF(NOT VTK_BINARY_DIR) //寻找是否已经定义 VTK_BINARY_DIR变量
/* 一般情况下,这个值得是vtk dll文件的路径*/
FIND_PACKAGE(VTK REQUIRED) //通过这行命令,找到vtk需要的文件,库等的路径
IF(NOT VTK_USE_RENDERING) //如果没有定义VTK_USE_RENDERING就输出如下的错误信息
MESSAGE(FATAL_ERROR "Example ${PROJECT_NAME} requires VTK_USE_RENDERING.")
ENDIF(NOT VTK_USE_RENDERING)
INCLUDE(${VTK_USE_FILE}) //添加include文件,整个变量路径为 VTK_USE_FILE
ENDIF(NOT VTK_BINARY_DIR)
ADD_EXECUTABLE(Cone Cone.cxx) //添加Cone.cxx文件,编译生成Cone.exe运行文件
TARGET_LINK_LIBRARIES(Cone vtkRendering) //添加工程需要依赖的 vtkRendering
下面来查看一下这些变量,通过Message输出显示:
修改源代码如下:
cmake_minimum_required(VERSION 2.8) //添加cmake版本要求,否则会出现warning
PROJECT (Step1)
IF(NOT VTK_BINARY_DIR)
Message("vtk binary dir: ${VTK_BINARY_DIR}")
FIND_PACKAGE(VTK REQUIRED)
IF(NOT VTK_USE_RENDERING)
MESSAGE(FATAL_ERROR "Example ${PROJECT_NAME} requires VTK_USE_RENDERING.")
ENDIF(NOT VTK_USE_RENDERING)
INCLUDE(${VTK_USE_FILE})
Message("vtk use file: ${VTK_USE_FILE}")
ENDIF(NOT VTK_BINARY_DIR)
ADD_EXECUTABLE(Cone Cone.cxx)
TARGET_LINK_LIBRARIES(Cone vtkRendering)
输出显示为:
vtk binary dir:
vtk use file: C:/Program Files/VTK/lib/vtk-5.10/UseVTK.cmake
由此可见:
VTK_BINARY_DIR 为 NULL
VTK_USE_FILE 为 C:/Program Files/VTK/lib/vtk-5.10/UseVTK.cmake
整个工程师通过UseVTK.cmake找到vtk的目录
程序源码详解:
#include "vtkConeSource.h"
#include "vtkPolyDataMapper.h"
#include "vtkRenderWindow.h"
#include "vtkCamera.h"
#include "vtkActor.h"
#include "vtkRenderer.h"
int main()
{
//构建cone source 数据模型
vtkConeSource *cone = vtkConeSource::New();
cone->SetHeight( 3.0 );
cone->SetRadius( 1.0 );
cone->SetResolution( 10 );
//将模型添加到mapper中,从而可以显示
vtkPolyDataMapper *coneMapper = vtkPolyDataMapper::New();
coneMapper->SetInputConnection( cone->GetOutputPort() );
//将mapper添加到 actor中,这里还可以设置模型显示的其他属性
vtkActor *coneActor = vtkActor::New();
coneActor->SetMapper( coneMapper );
//render用来管理绘制场景的,可以定义其在window中占比和位置等
vtkRenderer *ren1= vtkRenderer::New();
ren1->AddActor( coneActor );
ren1->SetBackground( 0.1, 0.2, 0.4 );
//显示的窗口,主要管理render的绘制
vtkRenderWindow *renWin = vtkRenderWindow::New();
renWin->AddRenderer( ren1 );
renWin->SetSize( 300, 300 );
//通过修改camera,从而能够看到window中的模型旋转一周,否则会一闪而过
int i;
for (i = 0; i < 360; ++i)
{
// render the image
renWin->Render();
// rotate the active camera by one degree
ren1->GetActiveCamera()->Azimuth( 1 );
}
/* vtk中的类都是通过工厂模式创建的,其开辟的空间都需要Delete函数释放,当然,可以通过智能指针统一管理,vtkSmartPoints */
cone->Delete();
coneMapper->Delete();
coneActor->Delete();
ren1->Delete();
renWin->Delete();
return 0;
}
好了,现在大家可以按照同样的方式,练习和学习tutorial里面的后续几个例子了。
- vtk例子中tutorial里的实例源码详解
- vtk里非常简单的例子的详解
- vtk教程中vtkCylinderSource的例子
- cJSON源码里的例子
- VTK在MFC中实现的小实例
- vtk中oberver和command的信息机制详解
- VTK中oberver 和 command 的信息机制详解
- 测试Theano_LSTM的Tutorial例子
- vtk中体绘制源码分析
- VTK与MFC联合编程实现的单文档实例vtkSDI详解
- VTK Examples中MIP和MPR的功能实现与源码分析
- 【VTK】VTK中设置默认的三维切片方向
- vtk体绘制-例子
- ITK & VTK 测试例子
- [源码]详细剖析:ThinkPHP中实例化模型的四种方法详解
- C 中枚举(项目里遇到的)例子
- ITK+VTK+Python的整合及例子程序
- vtk读取raw数据的一个例子(体绘制)
- SQL Server 2008新特性——SSMS增强
- 深入理解JavaScript中的this关键字
- 算法导论_计数排序学习笔记
- 正则表达式
- 4周项目1
- vtk例子中tutorial里的实例源码详解
- sdgfsdxcvxcvxcv
- 第四周——三角形类
- 点击事件加上颜色的点击效果
- U盘安装CentOS遇到Image 9660缺失问题解决
- iOS小随笔
- 菜鸟谈知识的获取管理分享
- Hyper-V开启远程管理
- #define中 #与##的神奇用法