点云技术相关产学研社区

 找回密码
 立即注册加入PCL中国点云技术相关产学研社区

扫一扫,访问微社区

查看: 12060|回复: 15

编译支持MFC的pcl::visualization静态库文件

[复制链接]
发表于 2015-8-5 21:44:37 | 显示全部楼层 |阅读模式
本帖最后由 tyzaizl 于 2016-4-28 17:10 编辑

编译支持MFCpcl::visualization静态库文件
田玉珍(长春光机所)
转载请注明出处(http://www.pclcn.org/bbs/forum.php?mod=viewthread&tid=1511&extra=
       之前作者在论坛写过一篇《如何实现基于MFC对话框的PCL显示》的帖子,大家需求非常大。最近在为PCL中国《点云库PCL学习教程》第二版,准备可视化相关应用开发实例内容的过程中,为了方便结合MFC开发,萌生了将pcl::mfc_visulization编译成lib库文件的想法,在《如何实现基于MFC对话框的PCL显示》中讲了利用修改后的pcl::visualization模块代码进行MFC开发,今天将修改后的pcl::visualization模块编译成可以直接引用的静态链接库,将编译过程展示给大家,希望对没有接触过qt的朋友们提供方便之处。需要注意的是,为了修改后的代码稳定性肯定不如官方提供的原生代码,而且提供修改代码及编译方法是为了供大家学习使用,请勿商用。本文的内容及具体修改pcl::visualization的过程将在《点云库PCL学习教程》第二版中详细介绍,等书出版后大家可以关注。
闲话少说,进入正题,首先将编译工具版本信息列出。
1 所需工具版本信息
  
工具
  
下载地址
  
PCL-1.6.0-AllInOne-msvc2010-win32.exe
  
  
vtk5.8
  
    
http://download.qt.io/archive/qt/4.8/4.8.6/
  
Visual  Studio2010
  
-
这里需要解释一下,需用官网all_in_one安装包的目的是为了让更多的更简单的使用作者提供的修改代码,在安装all_in_one安装包时不要安装vtk,vtk单独编译。Cmake配置vtk时,选择编译动态链接库,选Advanced,出现VTK_USE_GUISUPPORT选项,再次configure,出现VTK_USE_MFC选项如果你想使用qt,可以顺手把VTK_USE_QT选项也选上,当然前提是必须先安装qt4.x(qt5.x好像不支持vtk5.x),可以把vtk的安装路径选择在pcl/3rdparty/VTK文件内,这个随意,然后利用generate。利用VS2010编译VTK,编译过程中需要注意vtkMFC工程是默认多字符集编译的生成的,如果你希望你的工程是UNICODE的,则需要修改工程属性(可能还需要其他注意事项,但这个是必须修改的),否者你自己的工程只能选者多字符集(Use Multi-Byte Character Set)。
      还有一点,作者尝试修改pcl1.8未成功,但是修改后的pcl1.6visualization可以用在pcl1.8+vtk6.2,它相当于一个独立文件,如果用pcl1.8+pcl::mfc_visualization,所提供的修改源代码需要再进行部分修改。
编写CMakeLists.txt文件
  1. cmake_minimum_required(VERSION 2.8)

  2. project(mfc_visualization)

  3. set(SUBSYS_NAME mfc_visualization)
  4. set(SUBSYS_NAME_INC mfc_visualization_1_6)
  5. #查找PCL
  6. find_package(PCL REQUIRED)
  7. #设置源文件
  8. set(srcs
  9.         src/point_picking_event.cpp
  10.         src/interactor_style.cpp
  11.         src/point_cloud_handlers.cpp
  12.         src/pcl_visualizer.cpp
  13.         src/histogram_visualizer.cpp
  14.         src/common/common.cpp
  15.         src/common/io.cpp
  16.         src/common/shapes.cpp
  17.         src/cloud_viewer.cpp
  18.         src/image_viewer.cpp
  19.         src/window.cpp
  20.         src/range_image_visualizer.cpp
  21.         src/common/float_image_utils.cpp
  22.         src/vtk/pcl_image_canvas_source_2d.cpp
  23.         )
  24. if("${VTK_MAJOR_VERSION}.${VTK_MINOR_VERSION}" VERSION_LESS "5.6")
  25.     # A custom interactor is necessary on VTK 5.4 and below
  26.     list(APPEND srcs src/interactor.cpp)
  27. endif("${VTK_MAJOR_VERSION}.${VTK_MINOR_VERSION}" VERSION_LESS "5.6")
  28. #设置头文件
  29. set(incs
  30.         include/pcl/${SUBSYS_NAME_INC}/cloud_viewer.h
  31.         include/pcl/${SUBSYS_NAME_INC}/histogram_visualizer.h
  32.         include/pcl/${SUBSYS_NAME_INC}/image_viewer.h
  33.         include/pcl/${SUBSYS_NAME_INC}/interactor_style.h
  34.         include/pcl/${SUBSYS_NAME_INC}/pcl_visualizer.h
  35.         include/pcl/${SUBSYS_NAME_INC}/registration_visualizer.h
  36.         include/pcl/${SUBSYS_NAME_INC}/point_cloud_handlers.h
  37.         include/pcl/${SUBSYS_NAME_INC}/keyboard_event.h
  38.         include/pcl/${SUBSYS_NAME_INC}/point_picking_event.h
  39.         include/pcl/${SUBSYS_NAME_INC}/mouse_event.h
  40.         include/pcl/${SUBSYS_NAME_INC}/window.h
  41.         include/pcl/${SUBSYS_NAME_INC}/range_image_visualizer.h
  42.         include/pcl/${SUBSYS_NAME_INC}/interactor.h
  43.         include/pcl/${SUBSYS_NAME_INC}/vtk.h
  44.         )

  45. set(common_incs
  46.         include/pcl/${SUBSYS_NAME_INC}/common/actor_map.h
  47.         include/pcl/${SUBSYS_NAME_INC}/common/common.h
  48.         include/pcl/${SUBSYS_NAME_INC}/common/io.h
  49.         include/pcl/${SUBSYS_NAME_INC}/common/ren_win_interact_map.h
  50.         include/pcl/${SUBSYS_NAME_INC}/common/shapes.h
  51.         include/pcl/${SUBSYS_NAME_INC}/common/float_image_utils.h
  52.         )

  53. set(impl_incs
  54.         include/pcl/${SUBSYS_NAME_INC}/impl/histogram_visualizer.hpp
  55.         include/pcl/${SUBSYS_NAME_INC}/impl/pcl_visualizer.hpp
  56.         include/pcl/${SUBSYS_NAME_INC}/impl/image_viewer.hpp
  57.         include/pcl/${SUBSYS_NAME_INC}/impl/registration_visualizer.hpp
  58.         include/pcl/${SUBSYS_NAME_INC}/impl/point_cloud_handlers.hpp
  59.         )

  60. set(common_impl_incs "include/pcl/${SUBSYS_NAME_INC}/common/impl/shapes.hpp")

  61. set(vtk_incs
  62.         include/pcl/${SUBSYS_NAME_INC}/vtk/pcl_image_canvas_source_2d.h
  63.         )
  64. #VTK和PCL头文件位置
  65. include_directories(${VTK_INCLUDE_DIRS} ${PCL_INCLUDE_DIRS})
  66. #VTK和PCL库文件位置
  67. link_directories(${VTK_LIBRARY_DIRS} ${PCL_LIBRARY_DIRS})
  68. #添加PCL依赖项
  69. add_definitions(${PCL_DEFINITIONS})
  70. #添加当前工程src文件位置
  71. include_directories("${CMAKE_CURRENT_SOURCE_DIR}/include/")
  72. #定义编译生成的dll文件和lib文件的位置
  73. set( CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${PROJECT_SOURCE_DIR}/bin/bin )
  74. set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${PROJECT_SOURCE_DIR}/bin/lib )
  75. #定义工程lib文件名
  76. set(LIB_NAME "pcl_${SUBSYS_NAME}")
  77. #编译生成静态lib库文件
  78. ADD_LIBRARY("${LIB_NAME}" STATIC  ${srcs} ${incs} ${common_incs} ${impl_incs} ${common_impl_incs} ${vtk_incs})
  79. #ADD_EXECUTABLE("${LIB_NAME}"  ${srcs} ${incs} ${common_incs} ${impl_incs} ${common_impl_incs} ${vtk_incs})
  80. #工程依赖的附加库文件     
  81. if("${VTK_MAJOR_VERSION}.${VTK_MINOR_VERSION}" VERSION_LESS "5.6")
  82.       target_link_libraries("${LIB_NAME}" pcl_common pcl_io pcl_kdtree vtkCommon vtkWidgets vtkHybrid vtkFiltering vtkRendering ${OPENGL_LIBRARIES})
  83. else()
  84.       target_link_libraries("${LIB_NAME}" ${PCL_LIBRARIES} ${VTK_LIBRARIES} ${OPENGL_LIBRARIES})
  85. endif()
复制代码
    将附件提供的压缩包文件(mfc_visualization_1_6_src(Lib).rar)下载到本地,解压得到源码,在文件夹内新建文件夹bin,打开cmake进行配置,得到vs2010工程。打开工程mfc_visualization.sln,进行编译,最终会在工程目录下得到
/lib/ pcl_mfc_visualization.lib
    利用该静态库,参照《如何实现基于MFC对话框的PCL显示》,可以完成pclMFC对话框可视化。利用lib库文件可以不用在编译过程中浪费时间。

附件提供了编译好的lib文件及头文件,如果大家的环境和我一样,则可以直接使用,将头文件路径和
lib文件添加到工程属性中。





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册加入PCL中国点云技术相关产学研社区

x
回复

使用道具 举报

 楼主| 发表于 2015-8-5 21:46:21 | 显示全部楼层
时隔两年再次发帖,希望大家支持
回复 支持 反对

使用道具 举报

发表于 2015-8-8 21:28:55 | 显示全部楼层
谢谢田博士的分享。我的是PCL1.7.2+VC2010+XP32,直接利用这个已经编译好了的静态库文件,参照《如何实现基于MFC对话框的PCL显示》,可以完成pcl的MFC对话框可视化吗???
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-8-11 20:20:30 | 显示全部楼层
抬头纹 发表于 2015-8-8 21:28
谢谢田博士的分享。我的是PCL1.7.2+VC2010+XP32,直接利用这个已经编译好了的静态库文件,参照《如何实现基 ...

可以,但费劲
回复 支持 反对

使用道具 举报

发表于 2015-8-22 15:52:32 | 显示全部楼层
田博士,可以把基于MFC对话框的PCL显示的简单工程源码发我一份吗?我的邮箱是412828668@qq.com。谢谢!
回复 支持 反对

使用道具 举报

发表于 2015-8-26 14:39:23 | 显示全部楼层
谢谢楼主
回复 支持 反对

使用道具 举报

发表于 2015-8-27 15:47:28 | 显示全部楼层
我按照上面说的安装all_in_one安装包时不要安装vtk,vtk单独编译,一些错误修改过之后,出现了下面的链接问题

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册加入PCL中国点云技术相关产学研社区

x
回复 支持 反对

使用道具 举报

发表于 2015-8-28 13:17:05 | 显示全部楼层
你好,我是新手,只能下载1000k的附件,能发一份到我邮箱吗?谢谢了
回复 支持 反对

使用道具 举报

发表于 2015-8-28 13:18:47 | 显示全部楼层
我的邮箱是1348786884@qq.com
回复 支持 反对

使用道具 举报

发表于 2015-9-16 19:57:32 | 显示全部楼层
终于看到啦,不错。。。。
回复 支持 反对

使用道具 举报

本版积分规则

QQ|小黑屋|点云技术相关产学研社区 ( 陕ICP备13001629号 )

GMT+8, 2024-4-28 21:39 , Processed in 2.549754 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表