赞
踩
前几天刚整理好VTK8.2.0
,发现我们的项目使用的PCL自带的VTK是9.3.0
的,脸黑了快
VTK8.2.0可参考该篇博文:五、在Qt下加载QVTKWidget控件(VTK8.2.0),生成Visual Studio项目,显示点云(C++)
没办法,重新搞下VTK9.3.0
区别:VTK8.2.0
采用的是拖拽QVTKWidget控件进行相应的操作;
VTK9.3.0
把这个控件给取消掉了,但是封装了QVTKOpenGLNativeWidget
类,该类是一个自定义控件,继承了OpenGL Widget
控件。使用的时候,需要拖拽一个OpenGL Widget控件
然后提升为QVTKOpenGLNativeWidget
即可;可以看出VTK官网是提倡用户进行自定义控件的~~
我下载的是v9.3.0
老规矩,VTK-9.3.0-src存放源码,将下载好的源码文件解压到这里
VTK-9.3.0-build用于ALL_BUILD的时候存放路径
VTK-9.3.0-install-release用于INSTALL的时候存放路径
我只需要release不需要debug
附加其他内容: 既需要release又需要用到debug的操作如下:
多创建一个文件夹VTK-9.3.0-install-debug,CMake的时候build路径选择VTK-9.3.0-install-debug。
1,ALL_BUILD Release x64
2,INSTALL Release
运行完之后,将VTK-9.3.0-install-debug内容剪切到VTK-9.3.0-install-release下
这算是最终的Release
的内容 然后重复操作再次
1,ALL_BUILD Debug x64
2,INSTALL Debug
运行完之后,VTK-9.3.0-install-debug文件夹下的内容就是最终的Debug
的内容
选好源码文件位置(E:/VTK9.3.0/VTK-9.3.0-src
)和build文件位置(E:/VTK9.3.0/VTK-9.3.0-build
),直接Configure一下
选择VTK编译之后的库存放的位置,E:/VTK9.3.0/VTK-9.3.0-install-release/
我的这里系统默认是的Anaconda下的Qt路径,需要修改一下
时间有点久,生成完之后记得把 **√** 给取消掉哈
这个比较快
生成完成之后可以看到文件夹下(E:\VTK9.3.0\VTK-9.3.0-install-release
)多出来四个文件夹
ps:VTK8.2.0会生成五个文件夹,多一个plugins
新建一个Qt项目,例如:VTK9.3.0
新建一个属性表,例如:vtk930,用于配置VTK
新建一个属性表,例如:pcl_new_vtk,用于配置PCL
包含目录:E:\VTK9.3.0\VTK-9.3.0-install-release\include\vtk-9.3
库目录:E:\VTK9.3.0\VTK-9.3.0-install-release\lib
也就是文件夹E:\VTK9.3.0\VTK-9.3.0-install-release\lib
里面所有lib文件的具体名称
敲黑板!!!小技巧:
打开cmd
输入命令:
E:
cd E:\VTK9.3.0\VTK-9.3.0-install-release\lib
DIR *.lib*/b>YY.txt
// 语句的意思是将此路径下的所后缀是.lib*的文件(*.lib*
,*
为通配符,最后一个也有一个*
哈),以名称(/b
)的形式写入到YY.txt
中
将YY.txt里面的内容复制到附加依赖项即可
vtkcgns-9.3.lib vtkChartsCore-9.3.lib vtkCommonColor-9.3.lib vtkCommonComputationalGeometry-9.3.lib vtkCommonCore-9.3.lib vtkCommonDataModel-9.3.lib vtkCommonExecutionModel-9.3.lib vtkCommonMath-9.3.lib vtkCommonMisc-9.3.lib vtkCommonSystem-9.3.lib vtkCommonTransforms-9.3.lib vtkDICOMParser-9.3.lib vtkDomainsChemistry-9.3.lib vtkDomainsChemistryOpenGL2-9.3.lib vtkdoubleconversion-9.3.lib vtkexodusII-9.3.lib vtkexpat-9.3.lib vtkFiltersAMR-9.3.lib vtkFiltersCellGrid-9.3.lib vtkFiltersCore-9.3.lib vtkFiltersExtraction-9.3.lib vtkFiltersFlowPaths-9.3.lib vtkFiltersGeneral-9.3.lib vtkFiltersGeneric-9.3.lib vtkFiltersGeometry-9.3.lib vtkFiltersGeometryPreview-9.3.lib vtkFiltersHybrid-9.3.lib vtkFiltersHyperTree-9.3.lib vtkFiltersImaging-9.3.lib vtkFiltersModeling-9.3.lib vtkFiltersParallel-9.3.lib vtkFiltersParallelImaging-9.3.lib vtkFiltersPoints-9.3.lib vtkFiltersProgrammable-9.3.lib vtkFiltersReduction-9.3.lib vtkFiltersSelection-9.3.lib vtkFiltersSMP-9.3.lib vtkFiltersSources-9.3.lib vtkFiltersStatistics-9.3.lib vtkFiltersTensor-9.3.lib vtkFiltersTexture-9.3.lib vtkFiltersTopology-9.3.lib vtkFiltersVerdict-9.3.lib vtkfmt-9.3.lib vtkfreetype-9.3.lib vtkGeovisCore-9.3.lib vtkgl2ps-9.3.lib vtkglew-9.3.lib vtkGUISupportQt-9.3.lib vtkGUISupportQtQuick-9.3.lib vtkGUISupportQtSQL-9.3.lib vtkhdf5-9.3.lib vtkhdf5_hl-9.3.lib vtkImagingColor-9.3.lib vtkImagingCore-9.3.lib vtkImagingFourier-9.3.lib vtkImagingGeneral-9.3.lib vtkImagingHybrid-9.3.lib vtkImagingMath-9.3.lib vtkImagingMorphological-9.3.lib vtkImagingSources-9.3.lib vtkImagingStatistics-9.3.lib vtkImagingStencil-9.3.lib vtkInfovisCore-9.3.lib vtkInfovisLayout-9.3.lib vtkInteractionImage-9.3.lib vtkInteractionStyle-9.3.lib vtkInteractionWidgets-9.3.lib vtkIOAMR-9.3.lib vtkIOAsynchronous-9.3.lib vtkIOCellGrid-9.3.lib vtkIOCesium3DTiles-9.3.lib vtkIOCGNSReader-9.3.lib vtkIOChemistry-9.3.lib vtkIOCityGML-9.3.lib vtkIOCONVERGECFD-9.3.lib vtkIOCore-9.3.lib vtkIOEnSight-9.3.lib vtkIOExodus-9.3.lib vtkIOExport-9.3.lib vtkIOExportGL2PS-9.3.lib vtkIOExportPDF-9.3.lib vtkIOFLUENTCFF-9.3.lib vtkIOGeometry-9.3.lib vtkIOHDF-9.3.lib vtkIOImage-9.3.lib vtkIOImport-9.3.lib vtkIOInfovis-9.3.lib vtkIOIOSS-9.3.lib vtkIOLegacy-9.3.lib vtkIOLSDyna-9.3.lib vtkIOMINC-9.3.lib vtkIOMotionFX-9.3.lib vtkIOMovie-9.3.lib vtkIONetCDF-9.3.lib vtkIOOggTheora-9.3.lib vtkIOParallel-9.3.lib vtkIOParallelXML-9.3.lib vtkIOPLY-9.3.lib vtkIOSegY-9.3.lib vtkIOSQL-9.3.lib vtkioss-9.3.lib vtkIOTecplotTable-9.3.lib vtkIOVeraOut-9.3.lib vtkIOVideo-9.3.lib vtkIOXML-9.3.lib vtkIOXMLParser-9.3.lib vtkjpeg-9.3.lib vtkjsoncpp-9.3.lib vtkkissfft-9.3.lib vtklibharu-9.3.lib vtklibproj-9.3.lib vtklibxml2-9.3.lib vtkloguru-9.3.lib vtklz4-9.3.lib vtklzma-9.3.lib vtkmetaio-9.3.lib vtknetcdf-9.3.lib vtkogg-9.3.lib vtkParallelCore-9.3.lib vtkParallelDIY-9.3.lib vtkpng-9.3.lib vtkpugixml-9.3.lib vtkRenderingAnnotation-9.3.lib vtkRenderingCellGrid-9.3.lib vtkRenderingContext2D-9.3.lib vtkRenderingContextOpenGL2-9.3.lib vtkRenderingCore-9.3.lib vtkRenderingFreeType-9.3.lib vtkRenderingGL2PSOpenGL2-9.3.lib vtkRenderingHyperTreeGrid-9.3.lib vtkRenderingImage-9.3.lib vtkRenderingLabel-9.3.lib vtkRenderingLICOpenGL2-9.3.lib vtkRenderingLOD-9.3.lib vtkRenderingOpenGL2-9.3.lib vtkRenderingQt-9.3.lib vtkRenderingSceneGraph-9.3.lib vtkRenderingUI-9.3.lib vtkRenderingVolume-9.3.lib vtkRenderingVolumeOpenGL2-9.3.lib vtkRenderingVtkJS-9.3.lib vtksqlite-9.3.lib vtksys-9.3.lib vtkTestingRendering-9.3.lib vtktheora-9.3.lib vtktiff-9.3.lib vtkverdict-9.3.lib vtkViewsContext2D-9.3.lib vtkViewsCore-9.3.lib vtkViewsInfovis-9.3.lib vtkViewsQt-9.3.lib vtkWrappingTools-9.3.lib vtkzlib-9.3.lib
包含目录:
E:\Program Files\PCL 1.14.0\bin
E:\Program Files\PCL 1.14.0\3rdParty\Boost\include\boost-1_84
E:\Program Files\PCL 1.14.0\3rdParty\Eigen3\include\eigen3
E:\Program Files\PCL 1.14.0\3rdParty\OpenNI2\Include
E:\Program Files\PCL 1.14.0\3rdParty\FLANN\include
E:\Program Files\PCL 1.14.0\3rdParty\Qhull\include
E:\Program Files\PCL 1.14.0\include\pcl-1.14
发现没,没有配置PCL自带的VTK,这点要注意哈,因为之前的VTK配置过了,这里不适应PCL自带的VTK了
库目录:
E:\Program Files\PCL 1.14.0\3rdParty\OpenNI2\Lib
E:\Program Files\PCL 1.14.0\3rdParty\Qhull\lib
E:\Program Files\PCL 1.14.0\3rdParty\FLANN\lib
E:\Program Files\PCL 1.14.0\3rdParty\Boost\lib
E:\Program Files\PCL 1.14.0\lib
发现了吧,也没有配置PCL自带的VTK!
也就是你安装的PCL所在文件夹E:\Program Files\PCL 1.14.0\lib
里面所有lib文件的具体名称
配置VTK属性表中有所介绍,这里就不再赘述了,
pcl_common.lib pcl_commond.lib pcl_features.lib pcl_featuresd.lib pcl_filters.lib pcl_filtersd.lib pcl_io.lib pcl_iod.lib pcl_io_ply.lib pcl_io_plyd.lib pcl_kdtree.lib pcl_kdtreed.lib pcl_keypoints.lib pcl_keypointsd.lib pcl_ml.lib pcl_mld.lib pcl_octree.lib pcl_octreed.lib pcl_outofcore.lib pcl_outofcored.lib pcl_people.lib pcl_peopled.lib pcl_recognition.lib pcl_recognitiond.lib pcl_registration.lib pcl_registrationd.lib pcl_sample_consensus.lib pcl_sample_consensusd.lib pcl_search.lib pcl_searchd.lib pcl_segmentation.lib pcl_segmentationd.lib pcl_stereo.lib pcl_stereod.lib pcl_surface.lib pcl_surfaced.lib pcl_tracking.lib pcl_trackingd.lib pcl_visualization.lib pcl_visualizationd.lib
VTK:E:\VTK9.3.0\VTK-9.3.0-install-release\bin
PCL:E:\Program Files\PCL 1.14.0
拖拽一个openGLWidget控件
我的是QMainWindow,这里就添加一个菜单项进行打开pcd文件
右击OpenGL Widget控件,选择提升为
提升为QVTKOpenGLNativeWidget控件
基类名称:QOpenGLWidget
提升的类名称:QVTKOpenGLNativeWidget
头文件:qvtkopenglnativewidget.h
我们也可以在E:\VTK9.3.0\VTK-9.3.0-install-release\include\vtk-9.3
下也找到这个头文件
最终控件的效果如下
我的测试项目结构如下
压根没动,默认即可
#include "VTK930.h"
#include <QtWidgets/QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
VTK930 w;
w.show();
return a.exec();
}
#pragma once #include "ui_VTK930.h" #include <pcl/io/pcd_io.h> #include <pcl/visualization/pcl_visualizer.h> #include <vtkGenericOpenGLRenderWindow.h> class VTK930 : public QMainWindow { Q_OBJECT public: VTK930(QWidget *parent = nullptr); ~VTK930(); private: Ui::VTK930Class ui; pcl::PointCloud<pcl::PointXYZ>::Ptr cloud; boost::shared_ptr<pcl::visualization::PCLVisualizer> view; void initialVtkWidget(); private slots: void onOpen(); };
#include "VTK930.h" #include <QFileDialog> VTK930::VTK930(QWidget *parent) : QMainWindow(parent) { ui.setupUi(this); initialVtkWidget(); connect(ui.actionOpen, SIGNAL(triggered()), this, SLOT(onOpen())); } VTK930::~VTK930() {} void VTK930::onOpen() { pcl::PointCloud<pcl::PointXYZ>::Ptr cloud( new pcl::PointCloud<pcl::PointXYZ>()); QString fileName = QFileDialog::getOpenFileName(this, "Open PointCloud", ".", "Open PCD files(*.pcd)"); if (fileName == "") return; pcl::io::loadPCDFile(fileName.toStdString(), *cloud); view->addPointCloud(cloud, "cloud"); view->resetCamera(); view->spin(); ui.openGLWidget->update(); } void VTK930::initialVtkWidget() { vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New(); vtkSmartPointer<vtkGenericOpenGLRenderWindow> renderWindow = vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New(); renderWindow->AddRenderer(renderer); view.reset(new pcl::visualization::PCLVisualizer(renderer, renderWindow, "viewer", false)); view->setupInteractor(ui.openGLWidget->interactor(), ui.openGLWidget->renderWindow()); ui.openGLWidget->setRenderWindow(view->getRenderWindow()); }
经过这几天的学习,发现了很多问题,网上出现QTWidget控件
的大都是VTK8.2.0
版本之前的,而且VTK9.3.0
与之前的版本确实有很大的差异,还得去花功夫认真研究学习
E:\VTK9.3.0\VTK-9.3.0-install-release\include\vtk-9.3
下的QVTKOpenGLWindow.h
这个头文件就跟之前控件(QVTKWidget
)所含有的函数方法有很多差异的地方,需要多研究学习,加油吧!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。