【无标题】关于vtk在vs2010中的配置

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等文件。


 

你可能感兴趣的:(VC++,软件编程,c++,vtk,vs2010)