CloudCompare插件编写

更新时间:2024-04-09 19:22:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1、 进入源码目录E:\\OpenSource\\OpenLidar\\CloudCompare\\trunk-2.5.0\\qCC\\plugins,在该文

件夹下有一个“qDummyPlugin”的文件夹,拷贝它到当前文件夹,并改名为“qMyPlugin”。进入文件夹内部,会发现有将头文件及CPP名字都改为“qMyPlugin”,将CMakeLists.txt文件中多有的“DUMMY”都用自己的插件名代替,最后进入…\\plugins\\CMakeLists.txt中,在文件的最后添加插件的链接:add_subdirectory (qMyPlygin);

2、 修改头文件以及CPP文件,实现插件功能;在头文件中把所有Dummy替换成My,并将

宏定义中的DUMMY替换成MY;

在CPP文件中也与dummy进行相关操作; 3、 CMake编译,在VC2010中生成工程

qPCL插件运行

getActions()加载插件的各子项的每一个工具函数的返回值为消息; addFilter( new LoadPCD() );

,调用addFilter()函数,addFilter()函数以PCL插件

调用connect()函数,这是QT的消息,将filter的信号newEntity()与当前对象的槽函数handleNewEntity()链接,触发handleNewEntity(),将打开PCD文档这一按钮添加到工具条中。 loadPCD()在被点击到时,会弹出相关对话框,调用文件读取函数,它得到的知识PCD文件的路径,并将其存储在路径数组m_filename中;

在函数compute()中,通过loadSensorMessage()函数将点云加载进来,多个点云的加载时通过for循环将m_fileneme中的个点云加载进来的。

loadSensorMessage()函数如下:

至此,点云被加载进内存; addFilter( new SavePCD() ); 加载保存PCD文件的相关功能;

addFilter( new NormalEstimation());

NormalEstimation():实现对点云的法线进行估计 获取视图点云数据的

在qPCL插件上添加其他功能 首先在CloudCompare源文件路径:

E:\\OpenSource\\OpenLidar\\CloudCompare\\trunk-2.5.0\\qCC\\plugins\\qPCL\\PclUtils\\filters 该文件下,添加自己想要的插件的头文件和源文件,可以直接创建其中某个插件的副本,然后更名为自己想要的额插件,以添加VoxelGrid为例:

如果需要弹出对话框进行参数设置,则需使用Qt designer进行对话框的设计,保存文件生成ui文件

在左边的Widget Box中可以拖动相关事件到对话框中,在右边的参数设置栏中可以修改其参数,比如类名等;

得到的ui文件在VC2010中打开便可看到其对话框的标题设置、变量名及初始值。

在设置好对话框后将ui文件放入到如下路径中:

CloudCompare\\trunk-2.5.0\\qCC\\plugins\\qPCL\\PclUtils\\filters\\dialogs; 并建立源文件及头文件,也可以对已有的文件拷贝(推荐)

资源建立好后,就开始修改CloudCompare的代码。

在qPCL.cpp中的getAction()函数中添加addFilter( newVoxelGrid()),并包含其头文件在CPP文件中#include

如果是从原有文件考过来的副本,那么进入VoxelGrid.h中进行相关的代码修改即可。

其中修改的部分由宏定义、类名、构造函数、以及成员变量(此处的成员变量时用来传递体素化栅格叶大小的浮点型的数据)。 然后是在源文件中进行修改:

利用查找替换功能,将原类名全部替换成VoxelGrid,并添加相关头文件以及对话框头文件:

在构造函数中进行插件说明修改,使得插件在鼠标移动到该处的时候其下方会出现相关的说明

从对话框中获取参数的函数也需要正对具体情况进行修改。

在算法实现函数compute()函数中调用相关滤波算法的实现:

工具条相关图标的添加(这个很重要,如果添加错误可能导致图标对应的功能紊乱)

之后就是在filtering.cpp中添加voxelgrid()函数,在此之前要在该cpp文件中添加相关头文件

最重要的是要在头文件中对该函数进行声明,然后在qPCL.cpp中声明filtering.h(否则voxelgrid()函数无法识别)

最后一步,对VoxelGridDlg.h和VoxelGridDlg.cpp文件进行修改

VoxelGridDlg.h修改如下,主要是修改宏定义、添加头文件,类名可以不做修改,但类从何处继承而来就需要改好:

VoxelGridDlg.cpp修改如下,也只需要改写ui的继承关系即可。

至此重新生成工程,在生成INSTALL就可以把EXE文件及相关的动态库都导入到一个文件夹中。 效果如下:

本文来源:https://www.bwwdw.com/article/f46r.html

Top