文档库 最新最全的文档下载
当前位置:文档库 › CloudCompare插件编写

CloudCompare插件编写

CloudCompare插件编写
CloudCompare插件编写

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()函数,addFilter()函数以PCL插件的每一个工具函数的返回值为消息;

addFilter( new LoadPCD() );

调用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( new VoxelGrid()),并包含其头文件在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文件及相关的动态库都导入到一个文件夹中。

效果如下:

相关文档