VTK作为医学显示库,得到较多使用。作为较为上层的设计,对OpenGL进行了封装,并且有Windows、Linux、安卓等开发版本,可移植性较强。

不过VES暂时没有编译成功。

以下是嵌入MFC-IDC代码,有个缺陷,暂时没能修改。

代码:

showPointsInVtk(short* &depthImage, int HeightDepth, int WidthDepth,int IDCX)
{ //double arr[3];
vtkPoints * points = vtkPoints::New();
int n = 0; int idx = 0; int Length = 3 * HeightDepth*WidthDepth;
//首先读取点云数据到点表points同时指定点对应的id:
for (int i = 0; i < HeightDepth; ++i){
int LastPixel = i* WidthDepth;
for (int j = 0; j < WidthDepth; ++j){
int y = depthImage[3 * (j + LastPixel)];
int x = depthImage[3 * (j + LastPixel) +1];
int z = depthImage[3 * (j + LastPixel) +2];
points->InsertPoint(n, x, y, z);
n++;
}
}
printf("%d\n", n); vtkPolyVertex * polyvertex = vtkPolyVertex::New();
polyvertex->GetPointIds()->SetNumberOfIds(n); int i = 0; //建立拓扑关系
for (i = 0; i < n; i++){
polyvertex->GetPointIds()->SetId(i, i);
} vtkUnstructuredGrid * grid = vtkUnstructuredGrid::New();
grid->SetPoints(points);
grid->InsertNextCell(polyvertex->GetCellType(),
polyvertex->GetPointIds()); vtkDataSetMapper *map1 = vtkDataSetMapper::New();
map1->SetInputData(grid); vtkActor *actor1 = vtkActor::New();
actor1->SetMapper(map1);
actor1->GetProperty()->SetColor(0.194, 0.562, 0.75); vtkRenderer *ren = vtkRenderer::New();
ren->AddActor(actor1);
ren->SetBackground(0, 0, 0); //renWin和iren分别是vtkWin32OpenGLRenderWindow, vtkWin32RenderWindowInteractor
vtkWin32RenderWindowInteractor *iren = vtkWin32RenderWindowInteractor::New();
vtkWin32OpenGLRenderWindow *win = vtkWin32OpenGLRenderWindow::New();
vtkInteractorStyleTrackballCamera *style = vtkInteractorStyleTrackballCamera::New();
win->Clean();
win->SetSize(480, 360);
win->BordersOn();
win->AddRenderer(ren);
iren->SetRenderWindow(win);
iren->SetInteractorStyle(style); //搭上一个显示用的MFC窗口框架。
CWnd *viewer_Wnd;
viewer_Wnd = this->GetDlgItem(IDCX);
HWND hWnd = (HWND)viewer_Wnd->m_hWnd;
HWND hParent = ::GetParent(hWnd);
//::ShowWindow(hParent, SW_HIDE);
::ShowWindow(hParent, 1);
win->SetParentId(this->m_hWnd); iren->Start(); map1->Delete();
grid->Delete();
actor1->Delete();
polyvertex->Delete(); ren->Delete();
win->Delete();
iren->Delete(); return 1;
}


显示效果:

 注意事项:

使用

iren->Start();

导致renter不能更行,修改为以下代码可以完成动态更新:

把 render和win放在初始对话框初始化,其他代码修改为:

this->win->Render();
//在 对话框初始化时初始化Render
inline int Ciisu2vrMfcsDlg::showPointsInVtkG(short* &depthImage, int HeightDepth, int WidthDepth, int IDCX)
{ //double arr[3];
vtkPoints * points = vtkPoints::New();
int n = 0; int idx = 0; int Length = 3 * HeightDepth*WidthDepth;
//首先读取点云数据到点表points同时指定点对应的id:
for (int i = 0; i < HeightDepth; ++i){
int LastPixel = i* WidthDepth;
for (int j = 0; j < WidthDepth; ++j){
int y = depthImage[3 * (j + LastPixel)];
int x = depthImage[3 * (j + LastPixel) + 1];
int z = depthImage[3 * (j + LastPixel) + 2];//这里压缩四倍是比较好的方法//int z = (depthImage[(j + LastPixel)]) ;
points->InsertPoint(n, x, y, z);
n++;
}
}
vtkPolyVertex * polyvertex = vtkPolyVertex::New();
polyvertex->GetPointIds()->SetNumberOfIds(n);
int i = 0;
//建立拓扑关系
for (i = 0; i < n; i++){
polyvertex->GetPointIds()->SetId(i, i);
} vtkUnstructuredGrid * grid = vtkUnstructuredGrid::New();
grid->SetPoints(points);
grid->InsertNextCell(polyvertex->GetCellType(),
polyvertex->GetPointIds() ); vtkDataSetMapper *map = vtkDataSetMapper::New();
map->SetInputData(grid); vtkActor *actorG = vtkActor::New();
actorG->SetMapper(map);
actorG->GetProperty()->SetColor(0.194, 0.562, 0.75); vtkRenderer *ren = vtkRenderer::New();
ren->AddActor(actorG);
ren->SetBackground(0.13, 0.40, 0.15); this->win->AddRenderer(ren);
this->win->Render();//自己写一个重载-更新函数! map->Delete();
grid->Delete();
actorG->Delete();
polyvertex->Delete(); return 1;
}

后记:

效果还不错,就是和OpenCV结合时有点麻烦,命名空间冲突。

VTK:VTK嵌入MFC成功的更多相关文章

  1. VTK嵌入MFC同步显示

    使用VTK嵌入MFC,实现四视图更新,机制和细节参考原文. 原文链接:http://blog.csdn.net/www_doling_net/article/details/8939115 原文代码: ...

  2. Cocos2d-X 2.2嵌入MFC的子窗口

    1.在cocos2dx目录下创建基于对话框的MFC工程,对话框中间放一个Picture控件 2.添加cocos2dx的相关头文件包含路径.库包含路径和依赖项,可以参考其他cocos工程设置 3.选中P ...

  3. Ogre嵌入MFC傻瓜全然教程(三)

    经过前两两篇博文的解说.我们已经完毕了渲染工作,但仅仅是渲染而没有交互性,本篇博文我们就来加上事件的处理方法. 首先我们须要为项目加入一个帧监听类:CMyFrameListener,为了直观,在这直接 ...

  4. OpenCV第二课,嵌入MFC

    单纯显示图片,只需链接 opencv_core2411d.libopencv_highgui2411d.lib 1.首先创建一个MFC的dlg,添加Picture Control控件 void CCO ...

  5. 编译VTK的MFC库

    原文链接:http://blog.csdn.net/left_la/article/details/7069708 本人做了少量修改! Win7 + VS2010 + CMake2.8.6 + VTK ...

  6. 第01章-欢迎学习VTK

    [译者:这个系列教程是以Kitware公司出版的<VTK User's Guide -11th edition>一书作的中文翻译(出版时间2010年,ISBN: 978-1-930934- ...

  7. 在windows上安装VTK

    看了很多教程,花了1天半的时间装上了,记录下. 前置条件:我安装了VS2015,用来编译工程. 参考资料 官方:http://www.vtk.org/Wiki/VTK/Building 安装:http ...

  8. 配置vtk(Win8.1 + VS2012+VTK-5.10.1)

    1.下载相关软件 vtk-5.10.1.zip和vtkdata-5.10.1.zip http://www.vtk.org/files/release/5.10/vtk-5.10.1.zip http ...

  9. 我所遭遇过的中间件--VTK

    我所遭遇过的中间件--VTK Vtk是我接触的第一款软件开发包,它引导我对图形学的入门.我是先学的VTK,后学的OpenGL和D3D.VTK是专为图形学开发,特点是接口清晰,好上手,又含有大量的图像处 ...

随机推荐

  1. 《hello-world》第八次团队作业:Alpha冲刺-Scrum Meeting 4

    项目 内容 这个作业属于哪个课程 2016级计算机科学与工程学院软件工程(西北师范大学) 这个作业的要求在哪里 实验十二 团队作业8:软件测试与Alpha冲刺 团队名称 <hello--worl ...

  2. vue 使用echarts

    import echarts from 'echarts'   <div id="kocGrow" style="width: 600px;height: 300p ...

  3. fastclick:处理移动端click事件300毫秒延迟

    fastclick:处理移动端click事件300毫秒延迟 1.兼容性 iOS 3及更高版本的移动Safari iOS 5及更高版本的Chrome Android上的Chrome(ICS) Opera ...

  4. BZOJ——T 1800: [Ahoi2009]fly 飞行棋

    Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1767  Solved: 1395[Submit][Status][Discuss] Descripti ...

  5. N天学习一个Linux命令之帮助命令:man

    前言 工作中每天都在使用常用的命令和非常用的命令,忘记了用法或者参数,都会bing一下,然后如此循环.一直没有真正的系统的深入的去了解命令的用法,我决定打破它.以前看到有人,每天学习一个linux命令 ...

  6. fixed_date , 赋权技巧 ,procedure执行方式, PL/SQL注意的地方

    本文讨论4个知识点, 1. fixed_date参数 2. 赋权技巧 3. procedure执行的方式 4. PL/SQL中要注意的几个地方 fixed_date参数 客户想修改oracle的 系统 ...

  7. POJ 3748:位操作

    位操作 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8964   Accepted: 3581 Description 如 ...

  8. HDU 1171 Big Event in HDU(01背包)

    题目地址:HDU 1171 还是水题. . 普通的01背包.注意数组要开大点啊. ... 代码例如以下: #include <iostream> #include <cstdio&g ...

  9. Linux -- 内存控制之oom killer机制及代码分析

    近期,线上一些内存占用比較敏感的应用.在訪问峰值的时候,偶尔会被kill掉,导致服务重新启动.发现是Linux的out-of-memory kiiler的机制触发的. http://linux-mm. ...

  10. WPF学习笔记——没有前途的WPF

    看上去,WPF比silverlight有前途一点.毕竟,微软还没有宣布,WPF停止更新. 但我怀疑,不久的将来,WPF也会步其子集silverlight的后尘,要么不再出后续版本,要么向HTML5 + ...