1、下载、编译、安装vtk
下载vtk并用cmake配置和编译vtk(一般使用默认配置即可,可参考网上文章)
2、使用vs2010打开cmake建立的vtk.sln方案
重新生成ALL_BUILD
重新生成INSTALL
3、建立新项目
在新项目属性中配置vtk:
a、设置vc++的包含路径,在其中添加vtk安装路径下的include路径,如:
C:\Program Files (x86)\VTK630\include\vtk-6.3
b、设置vc++的库路径,在其中添加vtk安装路径下的lib路径,如:
C:\Program Files (x86)\VTK630\lib
c、在连接器->摄入->附加依赖项中添加使用的lib项,如:
C:\Program Files (x86)\VTK630\lib\*.lib
4、建立一个vtk例子对象,代码如下(本例代码来源于网络,根据实际环境配置进行了一些修改):
#include "stdafx.h"
#ifndef VTKAPP_H_INCLUDE
#define VTKAPP_H_INCLUDE
#include"vtkConeSource.h"
#include"vtkPolyDataMapper.h"
#include"vtkRenderWindow.h"
#include"vtkRenderWindowInteractor.h"
#include"vtkRenderer.h"
#include "vtkAutoInit.h"
//自动初始化使用的模块
VTK_MODULE_INIT(vtkRenderingOpenGL);
VTK_MODULE_INIT(vtkInteractionStyle);
class VTKDataObject{
public:
VTKDataObject(HWND parent, int wid, int hig);
~VTKDataObject();
private:
vtkRenderWindow *renWin;
vtkRenderer *renderer;
vtkRenderWindowInteractor *iren;
vtkConeSource *cone;
vtkPolyDataMapper *coneMapper;
vtkActor *coneActor;
};
VTKDataObject::VTKDataObject(HWND hwnd, int wid, int hig)
{
// 创建流水线
this->renderer = vtkRenderer::New();
this->renWin = vtkRenderWindow::New();
this->renWin->AddRenderer(this->renderer);
// 启动渲染窗口的父窗口
this->renWin->SetParentId(hwnd);
this->iren = vtkRenderWindowInteractor::New();
this->iren->SetRenderWindow(this->renWin);
this->cone = vtkConeSource::New();
this->cone->SetHeight( 3.0 );
this->cone->SetRadius( 1.0 );
this->cone->SetResolution( 20 );
this->coneMapper = vtkPolyDataMapper::New();
this->coneMapper->SetInputConnection(this->cone->GetOutputPort());
this->coneActor = vtkActor::New();
this->coneActor->SetMapper(this->coneMapper);
this->renderer->AddActor(this->coneActor);
this->renderer->SetBackground(0.2,0.4,0.3);
this->renWin->SetSize(wid,hig);
// 启动交互
this->renWin->Render();
}
//析构函数
VTKDataObject::~VTKDataObject()
{
renWin->Delete();
renderer->Delete();
iren->Delete();
cone->Delete();
coneMapper->Delete();
coneActor->Delete();
}
#endif
在winproc函数的onclose中添加:
case WM_CLOSE:
if (vtkWin != NULL){
delete vtkWin;
vtkWin = NULL;
}
break;
其中:
VTKDataObject *vtkWin = NULL;
为全局变量
在相应的菜单命令中建立子窗口并导出vtk对象(本人环境):
void ktv_envStartCMD(HWND hWnd, int wParam)
{
HWND hwd;
//
newNamedWindow( "VTK_Render窗口",CV_WINDOW_AUTOSIZE );
hwd = newFindChildWindow("VTK_Render窗口");
newSetSizeOfWindow("VTK_Render窗口", 0,0,768,768);
vtkSetWinProc("VTK_Render窗口");
if (!vtkWin){
delete vtkWin;
vtkWin = NULL;
}
vtkWin = new VTKDataObject(hwd, 768, 768);
}
运行程序后将窗所要的结果。
需要注意的是:
#include "vtkAutoInit.h"
//自动初始化使用的模块
VTK_MODULE_INIT(vtkRenderingOpenGL);
VTK_MODULE_INIT(vtkInteractionStyle);
对于使用vtk的其他模块,可能还需要初始化其他的模块功能,参考网上提供能资料结合自身的环境做相应的修改即可。不需要拷贝*.dll等文件。