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 <QApplication>
#include <QMainWindow>


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


  return a.exec ();
}

在 pclviewer.cpp 裏面引入vtk_include.h

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章