从vtk/pcl源码中,分离pclVisilization 和 vtkQtWidget

背景:

vtk和pcl是优秀的三维开源引擎, 但是我们在工程中,需要集成到我们软件中,因而有了QVtkOpenglWidget等直接嵌入Qt程序的要求; 但是从vtk8.2之后,这部分源码又剔除出去了,随之影响的还有pcl 8.0系列之后的版本;

那么升级就遇到问题了, 如果在版本之前的编译我们还好说,但是随着这两个引擎的升级,新功能的迭代添加,为了适配之前的工程,我们就只能保持版本不动吗?这不可行! 这无疑是个巨大的痛点!

因而,本博主决定:从两个引擎中的源码中,分离pcl_visulization 和 vtkQtWidget,从而将渲染界面独立出来, 先看成果:

从vtk/pcl源码中,分离pclVisilization 和 vtkQtWidget_第1张图片

 从vtk/pcl源码中,分离pclVisilization 和 vtkQtWidget_第2张图片

 从vtk/pcl源码中,分离pclVisilization 和 vtkQtWidget_第3张图片

以上部分,就是抽离出来的两个库,独立编译并在qt中成功运行后的结果; 那么接下来就说说,移植之后的关键过程以及中间的坑

分离过程:

1.本博主是从pcl-1.13.1版本和vtk 8.2版本的 Rendering抽取

从vtk/pcl源码中,分离pclVisilization 和 vtkQtWidget_第4张图片

 从vtk/pcl源码中,分离pclVisilization 和 vtkQtWidget_第5张图片

 

2.这里使用的是vstudio 2019 编译器:  分别创建 一个 QtPclVisulization 和  QtVtk3DWidget库
3.将这两个引擎的源码拷贝到工程目录下,并添加进来

从vtk/pcl源码中,分离pclVisilization 和 vtkQtWidget_第6张图片从vtk/pcl源码中,分离pclVisilization 和 vtkQtWidget_第7张图片

                                                                 

 关键点一: 里面凡是涉及到 的,统一改成: "pcl/visulization/xxxx" ;保证是从本地文件读取到的
关键点二:  pcl 中,记得把这些环境配置好!

 关键三: vtk的src中,会缺少下面这些文件,记得从 Rendering中,把这些数据引入;

从vtk/pcl源码中,分离pclVisilization 和 vtkQtWidget_第8张图片

 关键点四: 里面涉及到和全局环境中重叠的部分,因而,我们要把用到的类,放到自定义的命名空间中,我这里取的XPlote, 并注意把导出宏先去掉;

从vtk/pcl源码中,分离pclVisilization 和 vtkQtWidget_第9张图片

 关键点5: 在上述分离库都完成的情况下,我们要写demo, 要使用 XPLote::QVTKWidget,我们必须添加下面的头文件以及宏,来初始化OPenGl相关的资源,否则pcl/vtkwidget 都会失败.

从vtk/pcl源码中,分离pclVisilization 和 vtkQtWidget_第10张图片

 本博主就是在这一步被坑了很多次!!!! 切记

调用实例:

从vtk/pcl源码中,分离pclVisilization 和 vtkQtWidget_第11张图片

 从vtk/pcl源码中,分离pclVisilization 和 vtkQtWidget_第12张图片

到此,我们的分离工作完成, 以后vtk或者pcl的库,任其升级变化,我们的上层软件交互都不会受到影响!

当然,其它的模块也可以这么做!

你可能感兴趣的:(qt,pcl,框架,c++,vtk,CAD)