链接: https://pan.baidu.com/s/1Ci85MrtVHKVkxpGDYz2dXw
提取码: cueq
上一篇文章:InsaneGuy:Meshlab编写自定义插件(上) -- 源代码编译
2 添加自定义插件
MeshLab中主要插件类型有 filter plugins, i/o plugins, edit plugins,这里只介绍如何添加 filter plugins。
下面这个链接是官方给出的例子:
Meshlab Developmentmeshlab.sourceforge.net
简单来说就是 MeshLab 提供了 MeshFilterInterface 这个接口,我们只需要继承这个接口实现自己的类即可。
附件中的 “random_displacement.zip” 实现了一个让每个 vertex 产生随机位移的插件,具体代码如下:
// random_displacement.h
重点是要实现 `applyFilter()` 这个方法:
// random_displacement.cpp
把附件中的 “random_displacement.zip” 解压到 meshlab/src/my_plugins 下面:(my_plugins 文件 夹自己创建一个空的即可)
用 VS 打开 “meshlab_dev.sln”(之前由 meshlab_dev.pro 转换而来),利用 Qt5 插件打开 刚才 “meshlab/src/my_plugins/random_displacement” 中的 “random_displacement.pro” 文件:
打开后侧边栏多出了一个“random_displacement”子项目:
右键点击该子项目,选择“Properties”,在 “C/C++ -- Preprocessor -- Preprocessor Definitions” 中加入 “_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS” :
然后在 “Linker -- Input -- Additional Dependencies”中添加 glu32.lib 和 opengl32.lib:
右键点击“random_displacement”,选择“Build”,成功后在 meshlab/src/distrib 下打开 meshlab.exe 文件,此时 “Filters”菜单下多了我们刚才添加的插件功能项:
打开一个三维网格模型,处理前后分别如下图所示:
3 添加 PCL 插件
附件里还有两个插件:
- transformation_sample_plugin : 一个将三维模型绕坐标轴进行旋转变换的插件,没有 PCL 的内容,可以参考代码看看旋转是如何实现的
- pcl_icp_plugin : 一个利用 PCL 中的 ICP 算法将两个三维模型进行配准的例子
关于 PCL 的配置:
- 安装 PCL-1.8.0-AllInOne-msvc2015-win64.exe
- 检查系统环境变量里的 PCL_ROOT 是否为安装 PCL 的路径
- 在系统环境变量的 PATH 变量里加入如下内容
%PCL_ROOT%bin;%PCL_ROOT%3rdPartyFLANNbin;%PCL_ROOT%3rdPartyVTKbin;%PCL_R OOT%Qhullbin;%PCL_ROOT%3rdPartyOpenNI2Tools;
插件的添加同之前一样,利用 VS 的 Qt 插件打开相应的 .pro 文件。
注意:
- 要在每个子项目的 Properties 的 “C/C++ -- Preprocessor -- Preprocessor Definitions” 中加 入“_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS”。
- 要在每个子项目的 Properties 的 “Linker -- Input -- Additional Dependencies”中添加 glu32.lib 和 opengl32.lib
- pcl_icp_plugin 这个插件里的 .pro 文件中,我链接的是 release 版本的库,注释里有标明, 可以改成链接 debug 版本的库,但是处理速度会比较慢。如果使用 release 版本,之前的 external 项目和 meshlab_dev.pro 项目都要重新编译一次 release 的版本,在 VS 中可以切换: