• 热门专题

VS2010(X64)&PCL点云库学习Part2AsimpletestofPCLinMFC

作者:  发布日期:2016-04-11 21:28:25
Tag标签:云库  
  • 本文主要介绍如何将PCL的控制台程序移植到MFC中,基本内容还是按照上一篇PCL配置博文来继续讲解的。

    1、新建MFC程序



    2、应用程序类型对话框中,勾选基于对话框,一直下一步,或者直接点击完成。
    3、配置环境:主要包括添加include文件夹、lib文件夹和添加.lib库文件

     

    (1)添加include文件夹

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

     

    Include:
    D:Program FilesPCL 1.6.0rdPartyBoostinclude;D:Program FilesPCL 1.6.0rdPartyEigeninclude;D:Program FilesPCL 1.6.0rdPartyFLANNinclude;D:Program FilesPCL 1.6.0rdPartyQhullinclude;D:Program FilesPCL 1.6.0rdPartyVTKincludetk-5.8;D:Program FilesOpenNIInclude;D:Program FilesPCL 1.6.0includepcl-1.6


    (2)添加bin文件夹

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

     

    <strong>lib:——注意OpenNILib64</strong>
    D:Program FilesPCL 1.6.0rdPartyBoostlib;D:Program FilesPCL 1.6.0rdPartyQhulllib;D:Program FilesPCL 1.6.0rdPartyFLANNlib;D:Program FilesPCL 1.6.0rdPartyVTKlibtk-5.8;D:Program FilesPCL 1.6.0lib;D:Program FilesOpenNILib64

    
     (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中的程序是可以调用控制台程序运行的,在功能上是一样的,只是界面上略有区别。

延伸阅读:

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规