VTK:VTK嵌入MFC成功
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成功的更多相关文章
- VTK嵌入MFC同步显示
使用VTK嵌入MFC,实现四视图更新,机制和细节参考原文. 原文链接:http://blog.csdn.net/www_doling_net/article/details/8939115 原文代码: ...
- Cocos2d-X 2.2嵌入MFC的子窗口
1.在cocos2dx目录下创建基于对话框的MFC工程,对话框中间放一个Picture控件 2.添加cocos2dx的相关头文件包含路径.库包含路径和依赖项,可以参考其他cocos工程设置 3.选中P ...
- Ogre嵌入MFC傻瓜全然教程(三)
经过前两两篇博文的解说.我们已经完毕了渲染工作,但仅仅是渲染而没有交互性,本篇博文我们就来加上事件的处理方法. 首先我们须要为项目加入一个帧监听类:CMyFrameListener,为了直观,在这直接 ...
- OpenCV第二课,嵌入MFC
单纯显示图片,只需链接 opencv_core2411d.libopencv_highgui2411d.lib 1.首先创建一个MFC的dlg,添加Picture Control控件 void CCO ...
- 编译VTK的MFC库
原文链接:http://blog.csdn.net/left_la/article/details/7069708 本人做了少量修改! Win7 + VS2010 + CMake2.8.6 + VTK ...
- 第01章-欢迎学习VTK
[译者:这个系列教程是以Kitware公司出版的<VTK User's Guide -11th edition>一书作的中文翻译(出版时间2010年,ISBN: 978-1-930934- ...
- 在windows上安装VTK
看了很多教程,花了1天半的时间装上了,记录下. 前置条件:我安装了VS2015,用来编译工程. 参考资料 官方:http://www.vtk.org/Wiki/VTK/Building 安装:http ...
- 配置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 ...
- 我所遭遇过的中间件--VTK
我所遭遇过的中间件--VTK Vtk是我接触的第一款软件开发包,它引导我对图形学的入门.我是先学的VTK,后学的OpenGL和D3D.VTK是专为图形学开发,特点是接口清晰,好上手,又含有大量的图像处 ...
随机推荐
- sql 语句实现可用户名、邮箱、手机号登录系统
select top 1 nid from Users where (userName collate Chinese_PRC_CS_AS=@userName or mobile collate Ch ...
- 【Codeforces 1106E】Lunar New Year and Red Envelopes
[链接] 我是链接,点我呀:) [题意] 给你k个红包,每个红包可以在si..ti的时间范围内拿走. 抢完红包之后你得到wi元,然后你需要在di+1时刻才能继续抢红包 时间是线性的从1..n 然后某个 ...
- 【hiho一下 第146周】子矩阵求和
[题目链接]:http://hihocoder.com/contest/hiho146/problem/1 [题意] [题解] 设s[i][j]表示左上角的坐标为(i,j)的n*m的矩阵的和; 有s[ ...
- ACdream 1032 Component
Component Time Limit: 5000ms Memory Limit: 64000KB This problem will be judged on ACdream. Original ...
- [poj1698]Alice's Chance[网络流]
[转]原文:http://blog.csdn.net/wangjian8006/article/details/7926040 题目大意:爱丽丝要拍电影,有n部电影,规定爱丽丝每部电影在每个礼拜只有固 ...
- Performance Metrics(性能指标1)
Performance Metrics(性能指标) 在我们开始旅行本书之前,我必须先了解本书的性能指标和希望优化后的结果,在第二章中,我们探索更多的性能检测工具和性能指标,可是,您得会使用这些工具和明 ...
- 解决Linux ssh登录马上退出问题
纠结了非常久,最终找到解决方法: 把sshd_config文件里的UsePAM改成no就能够了
- Swift和Objective-C混合编程——Swift调用OC
在iOS应用的开发中.Swift必将代替OC,两者的趋势是"短期共存,长期代替".但曾经有太多的代码是用OC语言完毕的,而Swift的开发也从 OC中继承了非常多的特性.两者也是有 ...
- .NET几大热点问题(.NET人员必读)
下面收集了关于.NET几大热点问题及简要答案,防止我们回答问题不专业的尴尬.同一时候还将一些.NET资源的相关网址罗列一二. 一.什么是.Net?它主要包含什么? .Net是为简化在第三代因特网的高 ...
- Mysql查看sql是否走事务
登陆进入server [root@gzmtest_25 ~]# su - mysql [mysql@gzmtest_25 ~]$ mysql.local Welcome to the MySQL mo ...