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文件及相关的动态库都导入到一个文件夹中。 效果如下: