Cloudcompare插件制作,matlab与C++混合编程

写在前面
由于自己写的很多处理点云的代码是用的matlab,要调用matlab的一些函数,虽然将matlab转换成C进行调用确实没太多必要,想要提速还是把代码重新用C写一遍更好,但是时间有限,只能先把matlab转成C的动态库,然后制作成cloudcompare插件。

Cloudcompare插件制作
网上大部分的Cloudcompare插件制作工程都是基于cloudcompare源代码,感觉比较麻烦,每次都需要改cmake文件,而且源码编译有很多工程,如果电脑性能不很好的话,会比较慢。
Cloudcompare插件实际上就是一些动态库,可以直接新建win32的动态库工程进行制作(我用的是VS2015和Qt5.8.0)。
在制作Cloudcompare插件之前,先把Cloudcompare源码编译一遍,主要是为了生成CCCoreLib.lib、QCC_DB_LIB.lib、QCC_GL_LIB.lib、QCC_IO_LIB.lib等一系列的lib,方便后面调用cloudcompare里面已有的一些功能(源码编译百度一下就OK,很多人都已经写得很详细了)。
在编译完Cloudcompare源码后,就可以开始制作插件了,打开VS2015,新建win32控制台应用程序,选择dll(选择不需要编译头),然后把工程里的所有cpp和h都移除(删除也行),再从cloudcompare源码的plugins下面随便哪个plugins拷贝cpp和h到新建的win32控制台应用程序目录下(我用的是qCSF.cpp和qCSF.h,可以把里面的qCSF类名都改成自己想要的名字),并把cpp和h加入工程中。
配置新建的win32控制台应用程序(也可以从编译cloudcompare源码的某个插件工程里面直接复制过来),
预处理器里面输入 WIN32;_WINDOWS;NDEBUG;_SECURE_SCL=0;QT_NO_DEBUG;NOMINMAX;_CRT_SECURE_NO_WARNINGS;__STDC_LIMIT_MACROS;QT_USE_QSTRINGBUILDER;CC_CORE_LIB_USES_DOUBLE;CC_CORE_LIB_USES_CGAL_LIB;CC_CORE_LIB_USES_QT_CONCURRENT;QT_CONCURRENT_LIB;QT_CORE_LIB;QT_OPENGL_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;QT_OPENGLEXTENSIONS_LIB;CC_GDAL_SUPPORT;CC_DXF_SUPPORT;CC_SHP_SUPPORT;CMAKE_INTDIR=“Release”;你的插件名_EXPORTS;
附加包含目录输入
D:\CloudCompare-master\build\libs\qCC_db\extern\CCCoreLib\exports;D:\CloudCompare-master\libs\qCC_db\extern\CCCoreLib\include;D:\CloudCompare-master\libs\CCPluginAPI\include;D:\CloudCompare-master\libs\CCPluginStub\include;D:\CloudCompare-master\libs\qCC_glWindow\include;D:\CloudCompare-master\libs\qCC_db\include;D:\CloudCompare-master\libs\CCFbo\include;F:\CPlusPlusLibs\gdal-2.2.0\include;D:\CloudCompare-master\libs\qCC_io\include;D:\CloudCompare-master\libs\qCC_io\extern\dxflib\src;D:\CloudCompare-master\libs\qCC_io\extern\shapelib;F:\Qt\Qt5.8.0\5.8\msvc2015_64\include;F:\Qt\Qt5.8.0\5.8\msvc2015_64\include\QtConcurrent;F:\Qt\Qt5.8.0\5.8\msvc2015_64\include\QtCore;F:\Qt\Qt5.8.0\5.8\msvc2015_64.\mkspecs\win32-msvc2015;F:\Qt\Qt5.8.0\5.8\msvc2015_64\include\QtOpenGL;F:\Qt\Qt5.8.0\5.8\msvc2015_64\include\QtWidgets;F:\Qt\Qt5.8.0\5.8\msvc2015_64\include\QtGui;F:\Qt\Qt5.8.0\5.8\msvc2015_64\include\QtANGLE;F:\Qt\Qt5.8.0\5.8\msvc2015_64\include\QtOpenGLExtensions;
附加库目录输入
D:\CloudCompare-master\build\libs\CCPluginAPI\Release\CCPluginAPI.lib;D:\CloudCompare-master\build\libs\CCPluginStub\Release\CCPluginStub.lib;D:\CloudCompare-master\build\libs\qCC_glWindow\Release\QCC_GL_LIB.lib;D:\CloudCompare-master\build\libs\qCC_io\Release\QCC_IO_LIB.lib;D:\CloudCompare-master\build\libs\qCC_io\extern\dxflib\Release\dxflib.lib;D:\CloudCompare-master\build\libs\qCC_io\extern\shapelib\Release\shapelib.lib;F:\CPlusPlusLibs\gdal-2.2.0\lib\gdal_i.lib;D:\CloudCompare-master\build\libs\qCC_db\Release\QCC_DB_LIB.lib;D:\CloudCompare-master\build\libs\qCC_db\extern\CCCoreLib\Release\CCCoreLib.lib;F:\CPlusPlusLibs\cgal-4.10-beta1\lib\CGAL-vc140-mt-4.10.lib;D:\CPlusPlusLibs\gmp\lib\libmpfr-4.lib;D:\CPlusPlusLibs\gmp\lib\libgmp-10.lib;F:\Qt\Qt5.8.0\5.8\msvc2015_64\lib\Qt5Concurrent.lib;D:\CloudCompare-master\build\libs\CCFbo\Release\CC_FBO_LIB.lib;F:\Qt\Qt5.8.0\5.8\msvc2015_64\lib\Qt5OpenGL.lib;F:\Qt\Qt5.8.0\5.8\msvc2015_64\lib\Qt5Widgets.lib;F:\Qt\Qt5.8.0\5.8\msvc2015_64\lib\Qt5OpenGLExtensions.lib;F:\Qt\Qt5.8.0\5.8\msvc2015_64\lib\Qt5Gui.lib;F:\Qt\Qt5.8.0\5.8\msvc2015_64\lib\Qt5Core.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;comdlg32.lib;advapi32.lib;
配置完之后,如果直接生成,肯定是会报错的,因为新建的是win32的程序,没法生成moc文件,所以还需要自己手动调用Qt的moc.exe编译生成moc文件,如下:
moc “D:\Work\VS-Save\CCplugin\qXXXXPlugin.h” -o “D:\Work\VS-Save\CCplugin\moc_qXXXXPlugin.cpp” -I d:\CloudCompare-master\libs\CCPluginStub\include
(最后-I d:\CloudCompare-master\libs\CCPluginStub\include是包含源码中插件的接口的一些文件,必须要,否则会出现找不到ccPluginInterface等错误,qXXXXPlugin.h是自己的插件文件)
moc结束之后,将生成的moc_qXXXXPlugin.cpp加入到新建的win32工程中,就能生成插件,将生成的插件拷贝到cloudcompare的安装目录下的plugins下面(我的是在F:\Program Files\CloudCompare\plugins),就能在cloudcompare里面识别,就能正常使用了(如果插件中包含其他ui文件,则每次改动ui文件之后,都需要重新uic一下,可以把这句命令放在项目属性->生成事件->预先生成事件->命令行,uic XXX.ui -o ui_XXX.h)。
上面这样做完,就可以每次单独做一个插件就行,不需要在做插件的时候加载那么多的工程。不足的地方就是不方便和cloudcompare的源码直接调试。

matlab与C++混合编程
前面写了,自己想用C调用matlab的dll,然后制作成cloudcompare插件,但是有个问题是安装的cloudcompare(2.11beta 64位)和matlab(R2019b)都依赖于hdf5.dll,而且两个软件依赖的hdf5.dll版本不一样(可能还有其他冲突的库,我在做完插件在cloudcompare里面调用的时候总是显示类似HD5Rereference无法定位于动态库libmat.dll的错误,导致mclInitializeApplication无法启动,也就没法调用matlab生成的dll,应该是cloudcompare和matlab依赖的库有冲突),尝试了很多方法,没法解决。后面只能是在插件里面调用exe,exe里面调用matlab生成的dll,这样才不会导致冲突(matlab的m文件生成C的dll在网上也有,就不写了,Qt调用外部exe并传参,在网上也有,也不写了)。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CloudCompare提供了中文翻译文件,可以使用这个文件将CloudCompare软件汉化成中文。该文件位于CloudCompare源码的路径...\CloudCompare-2.6.3.1\qCC\tr\translation_chinese.ts中。 如果您需要CloudCompare的汉化包,可以自行下载。需要注意的是,上传的是QLinguist的ts文件,不是发布版的qm文件。您可以下载后使用QLinguist进行翻译,然后发布即可。 如果您想继续上面提到的文章,了解如何制作CloudCompare的汉化包,可以继续阅读下一篇文章。这篇文章将介绍如何制作汉化包,但请注意,作者是CMake的初学者,所以文章中提供的方法可能不是最佳的。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [CloudCompare:汉化](https://blog.csdn.net/xinjiang666/article/details/100353669)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [cloudcompare汉化包](https://download.csdn.net/download/hehe549124/10188981)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [cloudcompare汉化包制作](https://blog.csdn.net/hehe549124/article/details/78975517)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值