码迷,mamicode.com
首页 > 编程语言 > 详细

《VS2010(X64)&PCL点云库学习》Part 2 A simple test of PCL in MFC

时间:2016-04-11 12:22:47      阅读:432      评论:0      收藏:0      [点我收藏+]

标签:

《VS2010(X64)&PCL点云库学习》Part 2 A simple test of PCL in MFC                                                                            


本文主要介绍如何将PCL的控制台程序移植到MFC中,基本内容还是按照上一篇PCL配置博文来继续讲解的。

1、新建MFC程序技术分享

技术分享

2、应用程序类型对话框中,勾选基于对话框,一直下一步,或者直接点击完成。

3、配置环境:主要包括添加include文件夹、lib文件夹和添加.lib库文件

(1)添加include文件夹

技术分享

你可以把安装目录D:\Program Files\PCL 1.6.0\改成自己的安装目录  项目右击—>属性—>C/C++—>附加包含目录

Include:
D:\Program Files\PCL 1.6.0\3rdParty\Boost\include;D:\Program Files\PCL 1.6.0\3rdParty\Eigen\include;D:\Program Files\PCL 1.6.0\3rdParty\FLANN\include;D:\Program Files\PCL 1.6.0\3rdParty\Qhull\include;D:\Program Files\PCL 1.6.0\3rdParty\VTK\include\vtk-5.8;D:\Program Files\OpenNI\Include;D:\Program Files\PCL 1.6.0\include\pcl-1.6
技术分享

(2)添加bin文件夹

 项目右击—>属性—>链接器—>常规—>附加库目录

<strong><span style="color:#ff0000;">lib:——注意OpenNI\Lib64</span></strong>
D:\Program Files\PCL 1.6.0\3rdParty\Boost\lib;D:\Program Files\PCL 1.6.0\3rdParty\Qhull\lib;D:\Program Files\PCL 1.6.0\3rdParty\FLANN\lib;D:\Program Files\PCL 1.6.0\3rdParty\VTK\lib\vtk-5.8;D:\Program Files\PCL 1.6.0\lib;D:\Program Files\OpenNI\Lib64

技术分享

技术分享
(3)添加.lib库文件

dubug模式,链接器->输入->附加依赖项 添加(注意和Lib文件夹下的.lib文件比对,一般后缀带_debug和_gd的为调试模式):

opengl32.lib
pcl_kdtree_debug.lib
pcl_io_debug.lib
pcl_search_debug.lib
pcl_segmentation_debug.lib
pcl_apps_debug.lib
pcl_features_debug.lib
pcl_filters_debug.lib
pcl_visualization_debug.lib
pcl_common_debug.lib
flann_cpp_s-gd.lib
libboost_system-vc100-mt-gd-1_47.lib
libboost_filesystem-vc100-mt-gd-1_47.lib
libboost_thread-vc100-mt-gd-1_47.lib
libboost_date_time-vc100-mt-gd-1_47.lib
libboost_iostreams-vc100-mt-gd-1_47.lib
vtkalglib-gd.lib
vtkCharts-gd.lib
vtkCommon-gd.lib
vtkDICOMParser-gd.lib
vtkexoIIc-gd.lib
vtkexpat-gd.lib
vtkFiltering-gd.lib
vtkfreetype-gd.lib
vtkftgl-gd.lib
vtkGenericFiltering-gd.lib
vtkGeovis-gd.lib
vtkGraphics-gd.lib
vtkhdf5-gd.lib
vtkHybrid-gd.lib
vtkImaging-gd.lib
vtkInfovis-gd.lib
vtkIO-gd.lib
vtkjpeg-gd.lib
vtklibxml2-gd.lib
vtkmetaio-gd.lib
vtkNetCDF-gd.lib
vtkNetCDF_cxx-gd.lib
vtkpng-gd.lib
vtkproj4-gd.lib
vtkRendering-gd.lib
vtksqlite-gd.lib
vtksys-gd.lib
vtktiff-gd.lib
vtkverdict-gd.lib
vtkViews-gd.lib
vtkVolumeRendering-gd.lib
vtkWidgets-gd.lib
vtkzlib-gd.lib
技术分享

技术分享

(4)修改平台为活动(x64),此步很关键,不然64位机没法编译通过。

技术分享

4、添加代码

(1)添加基本的include文件相关的全局变量以及部分代码的修改
// PCL_MFCDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "PCL_MFC.h"
#include "PCL_MFCDlg.h"
#include "afxdialogex.h"
#undef min 										//新加代码//
#undef max 										//新加代码//

//pcl 
#include <pcl/visualization/cloud_viewer.h>
#include <iostream>
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>
//#ifdef _DEBUG 											//注释掉//
//#define new DEBUG_NEW 										//注释掉//
//#endif												 //注释掉//
using namespace pcl;										//新加代码//
// 用于应用程序“关于”菜单项的 CAboutDlg 对话框


int user_data;
void viewerOneOff (pcl::visualization::PCLVisualizer& viewer)
{
	viewer.setBackgroundColor (1.0, 0.5, 1.0);
	pcl::PointXYZ o;
	o.x = 1.0;
	o.y = 0;
	o.z = 0;
	viewer.addSphere (o, 0.25, "sphere", 0);
	std::cout << "i only run once" << std::endl;

}

void viewerPsycho (pcl::visualization::PCLVisualizer& viewer)
{
	static unsigned count = 0;
	std::stringstream ss;
	ss << "Once per viewer loop: " << count++;
	viewer.removeShape ("text", 0);
	viewer.addText (ss.str(), 200, 300, "text", 0);
	//FIXME: possible race condition here:
	user_data++;
}

// 用于应用程序“关于”菜单项的 CAboutDlg 对话框

class CAboutDlg : public CDialogEx……//后面是MFC自动生成的函数

(2)在资源视图中的主对话框视图中,拖入按钮控件,caption设置为TestPCL,ID设置为IDC_TEST。
技术分享
(3)设置完毕后,双击按钮,会回到PCL_MFCDlg.cpp文件中,光标定位到函数CPCL_MFCDlg::OnBnClickedTest()。添加源代码,此处的代码是第一篇文章的源码,只有最后一句稍作修改。
void CPCL_MFCDlg::OnBnClickedTest()
{
	// TODO: 在此添加控件通知处理程序代码
	pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZRGBA>);
	pcl::io::loadPCDFile ("bridge2.pcd", *cloud);
	pcl::visualization::CloudViewer viewer("Cloud Viewer");    
	//showCloud函数是同步的,在此处等待直到渲染显示为止
	viewer.showCloud(cloud);
	//该注册函数在可视化时只调用一次
	viewer.runOnVisualizationThreadOnce (viewerOneOff);
	//该注册函数在渲染输出时每次都调用
	viewer.runOnVisualizationThread (viewerPsycho);
	while (!viewer.wasStopped ())
	{
		//在此处可以添加其他处理
		user_data++;
	}
	UpdateData(FALSE); //由cloud_viewer中的return 0; 改为UpdateData(FALSE);
}

5、调试运行:

技术分享
技术分享技术分享
技术分享
小结:
1)将控制台程序转移到MFC中的基本步骤如上所示,基本的函数都没有太大的变化,只有很少的地方有改动;
 2)MFC中的程序是可以调用控制台程序运行的,在功能上是一样的,只是界面上略有区别。


《VS2010(X64)&PCL点云库学习》Part 2 A simple test of PCL in MFC

标签:

原文地址:http://blog.csdn.net/sinat_24206709/article/details/51118977

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!