pcl msvc2015 32位 vtk8.0 qt5.9.6 点云集成开发

19年12月  因为客户电脑可能是32位,我们执着于编译windows32位的程序,msvc2015配套的相关库比较成熟。所有msvc32位算是目前的一个标准。

 

当我们使用QT为PCL项目制作UI的时候,需要让QT能够支持"QVTKWidget"。而这个"QVTKWidget"是VTK编译时添加了QT组件时,才会生成的。

PCL-1.8.1-AllInOne-msvc2015-win32.exe 下载链接 https://download.csdn.net/download/u012990344/12017364 

一般个人习惯把第三方库放到"F:/extern/"下

选择好目录,期间会弹出OpenNI2的安装弹窗 我选择F:\extern目录下

(它会自动变成F:\extern\PCL 1.8.1\3rdParty)

 

大部分"PCL-All-in-One"安装包里的VTK是没有编译QT的。

这篇博客旨在描述,编译VTK时,如何添加QT组件。

Cmake编译过程:

下载VTK源码,https://gitlab.kitware.com/vtk/vtk/tree/v8.0.0.rc

国外资源下载慢,特别是公司内网,急用淘宝代下的,以下是CSDN链接 https://download.csdn.net/download/u012990344/12017328

然后建立3个文件夹,分别命名为:

VTK_Src:将VTK的源码存放在此处,作为cmake的代码源路径

VTK_Build:cmake创建工程的,目标路径

VTK_Install:安装版本的,发布路径

然后打开Cmake,进行编译:

设置源路径及目标路径

选择编译器

初次配置,点击"Configuration"

点击Add Entry,添加CMAKE_PREFIX_PATH,设置为QT的安装路径。

点击Add Entry,添加CMAKE_DEBUG_POSTFIX,设置为"-gd"。

点击Add Entry,CMAKE_RELEASE_POSTFIX,设置为"-gr"。

用来区分debug与release版本下的dll和lib文件,不然的话创建安装文件的时候debug与release版本,名字相同相互覆盖。

勾选BUILD_SHARED_LIBIRARES及VTK_GROUP_QT

将CMAKE_INSTALL_PREFIX设置为VTK_Install的路径。默认的路径在C盘的Programfiles里面,需要管理员权限才能在默认路径下发布。

再次配置,点击"Configuration"

将"VTK_QT_VESION"改为5,如果没有cmake没有找到QT5的路径,再次设置。

OPENGL_gl_LIBRARY opengl //若没发现,可以不用管

OPENGL_glu_LIBRARY glu32 //若没发现,可以不用管

VTK_Group_Qt ☑ (check)

VTK_RENDERING_BACKEND OpenGL(注意选择的是OPENGL 还是OPENGL2 对应后面写代码的时候注意初始化哪个)

 

再次配置,点击"Configuration"

完成配置"Configuration Done"

点击生成"Generate"

完成生成"Generate Done"

创建安装文件:

打开VTK_Build路径下的 VTK.sln

在debug_x64下ALL_Build,然后only build "Install"

在release_x64下ALL_Build,然后only build "Install"

至此,在"…\VTK_Install\ plugins\designer"的路径下,就可以发现"QVTKWidgetPlugin.dll"了。

将此"QVTKWidgetPlugin.dll"(必须是release版的),添加到你的QT的designer的路径下,"C:\Qt\Qt5.6.2\5.6\msvc2015_64\plugins\designer"。

但是,在我的实际运用中QT自带的Designer打开不*.ui的文件,平且自带的qtCreator是32位的,解析不出这个64位的"QVTKWidgetPlugin.dll"控件。所以,从官网上又下载了64位的qtCreator。

最后顺利在QT的UI设计界面上,添加了QVTKWidget。

 

https://github.com/PointCloudLibrary/pcl/tree/master/doc/tutorials/content/sources/qt_visualizer

将 /tree/master/ 换成 /trunk/ . 

svn checkout 

https://github.com/PointCloudLibrary/pcl/trunk/doc/tutorials/content/sources/qt_visualizer

上面想用cmake编译,我想直接用qmake 所以我就改了一下。

(pro文件中,链接库有空格的话,自动识别不了,后来发现带空格的链接库可以加引号解决。就加了引号)

pcl_visualizer.pro

#-------------------------------------------------
#
# Project created by QtCreator 2014-05-01T14:24:33
#
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = pcl_visualizer
TEMPLATE = app

INCLUDEPATH += "F:/extern/PCL 1.8.1/include/pcl-1.8"
INCLUDEPATH += "F:/extern/PCL 1.8.1/3rdParty/Boost/include/boost-1_64"
INCLUDEPATH += "F:/extern/PCL 1.8.1/3rdParty/Eigen/eigen3"
INCLUDEPATH += "F:/extern/PCL 1.8.1/3rdParty/FLANN/include"
INCLUDEPATH += "F:/extern/PCL 1.8.1/3rdParty/OpenNI2/Include"
INCLUDEPATH += "F:/extern/PCL 1.8.1/3rdParty/Qhull/include"
INCLUDEPATH += "F:/extern/PCL 1.8.1/3rdParty/VTK/include/vtk-8.0"


LIBS += "C:/Program Files (x86)/Windows Kits/10/Lib/10.0.10586.0/um/x86/User32.lib"
LIBS += "C:/Program Files (x86)/Windows Kits/10/Lib/10.0.10586.0/um/x86/gdi32.lib"
CONFIG(debug, debug|release) {
LIBS += "F:/extern/PCL 1.8.1/lib/*debug.lib"
LIBS += "F:/extern/PCL 1.8.1/3rdParty/Boost/lib/*mt-gd-1_64.lib"
LIBS += "F:/extern/PCL 1.8.1/3rdParty/FLANN/lib/*-gd.lib"
LIBS += "F:/extern/PCL 1.8.1/3rdParty/OpenNI2/Lib/OpenNI2.lib"
LIBS += "F:/extern/PCL 1.8.1/3rdParty/Qhull/lib/*d.lib"
LIBS += "F:/extern/PCL 1.8.1/3rdParty/VTK/lib/*-gd.lib"
} else {
LIBS += "F:/extern/PCL 1.8.1/lib/*release.lib"
LIBS += "F:/extern/PCL 1.8.1/3rdParty/Boost/lib/*mt-1_64.lib"
LIBS += "F:/extern/PCL 1.8.1/3rdParty/FLANN/lib/*.lib"
LIBS += "F:/extern/PCL 1.8.1/3rdParty/OpenNI2/Lib/OpenNI2.lib"
LIBS += "F:/extern/PCL 1.8.1/3rdParty/Qhull/lib/*.lib"
LIBS += "F:/extern/PCL 1.8.1/3rdParty/VTK/lib/*-gr.lib"
}

SOURCES += main.cpp\
        pclviewer.cpp

HEADERS  += pclviewer.h \
    vtk_include.h

FORMS    += pclviewer.ui

vtk_include.h

#ifndef VTK_INCLUDE_H
#define VTK_INCLUDE_H


/*
* 指定VTK初始化为:OpenGL版本.(编译默认)
*/
#include "vtkAutoInit.h"
VTK_MODULE_INIT(vtkRenderingOpenGL)
VTK_MODULE_INIT(vtkInteractionStyle)
VTK_MODULE_INIT(vtkRenderingFreeType)
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL)
VTK_MODULE_INIT(vtkRenderingContextOpenGL)


#endif // VTK_INCLUDE_H

main.cpp

#include "pclviewer.h"
#include 
#include 


int main (int argc, char *argv[])
{
  QApplication a (argc, argv);
  PCLViewer w;
  w.show ();


  return a.exec ();
}

在 pclviewer.cpp 里面引入vtk_include.h

 

你可能感兴趣的:(vtk)