CloudCompare:Plugins插件功能的调用
1、引言
CloudCompare作为一款强大的点云与网格处理系统,提供了很多插件功能。
2、问题
在CMake时勾选了很多插件功能,但是生成后的Plugins是灰色无法使用的。
3、思考
这个问题也是CloudCompare机制的亮点之一。在此引用某大佬的话:“1)cmake只是生成可以供各种ide编译的工程文件 并不是生成插件dll; 2)生成了插件dll 要查看输出目录是否正确 vs的工程默认输出的插件dll exe是找不到的 要放到同一目录下 把dll放到plugins目录下 这个目录是exe默认搜索dll的位置。”
4、发现
(1)首先查看CloudCompare安装目录下有plugins文件夹,里面存在很多插件功能的dll;
(2)然后查看源码mainwindow.cpp中的函数:ccPluginInterface* MainWindow::getValidPlugin(QObject* plugin)、
void MainWindow::loadPlugins()、bool MainWindow::dispatchPlugin(QObject *plugin)。
其中很重要的是一句话:m_pluginsPath = QCoreApplication::applicationDirPath()+QString("/plugins");
也就是说需要读取CloudCompare生成目录下的plugins目录里面的dll,获取插件功能。
//部分代码已删除
void MainWindow::loadPlugins()
{menuPlugins->setEnabled(false);menuShadersAndFilters->setEnabled(false);toolBarPluginTools->setVisible(false);toolBarGLFilters->setVisible(false);//"static" pluginsforeach (QObject *plugin, QPluginLoader::staticInstances())dispatchPlugin(plugin);ccConsole::Print(QString("Application path: ")+QCoreApplication::applicationDirPath());//plugins are in bin/pluginsm_pluginsPath = QCoreApplication::applicationDirPath()+QString("/plugins");ccConsole::Print(QString("Plugins lookup dir.: %1").arg(m_pluginsPath));QStringList filters;filters << "*.dll";QDir pluginsDir(m_pluginsPath);pluginsDir.setNameFilters(filters);foreach (QString filename, pluginsDir.entryList(filters)){QPluginLoader loader(pluginsDir.absoluteFilePath(filename));QObject* plugin = loader.instance();if (plugin){ccConsole::Print(QString("Found new plugin: '%1'").arg(filename));if (dispatchPlugin(plugin)){m_pluginFileNames += filename;}else{delete plugin;plugin = 0;ccConsole::Warning("\tUnsupported or invalid plugin type");}}else{delete plugin;plugin = 0;ccConsole::Warning(QString("[Plugin] %1")/*.arg(pluginsDir.absoluteFilePath(filename))*/.arg(loader.errorString()));}}
}
5、解决
以qRANSAC_SD为例
在CloudCompare的build位置\qCC\Release目录下新建文件夹plugins
将CC的build位置\plugins\qRANSAC_SD\Release\QRANSAC_SD_PLUGIN.dll
复制到CC的build位置\qCC\Release\plugins目录下
CloudCompare:Plugins插件功能的调用相关推荐
- php打印模板插件,smarty的插件功能是smarty模板的精华
一,smarty插件介绍 smarty的插件放在/smarty/libs/plugins下面,它为程序的开发提供了很大的方便,例如:{$yesterday|date_format:"%H:% ...
- gulp plugins 插件介绍
原文:http://ju.outofmemory.cn/entry/103253 鸟窝 2014-11-28 3020 阅读 gulp Gulp是一个构建工具, 功能类似grunt, 以及Java生态 ...
- mysql plugin 调用_MySQL插件接口的调用方式
author:sufei 版本:8.0.16 一.简介 首先简单说明一下插件的实现原理 在程序的合适位置(挂钩处)安插相应的函数指针,相应的结构类似:if (fun_ptr != null) fun_ ...
- embedv.php_PHP与视频播放插件功能实现,非常简单
PHP与视频播放插件功能实现,非常简单 龙行 PHP 2018-8-28 2579 0评论 最近在研究maccms所以会接触到这个ckplayer播放器,那么如何 php与视频 ...
- html中表单的校验的插件,功能强大的jquery.validate表单验证插件
本文实例为大家分享了jquery.validate表单验证的使用方法,供大家参考,具体内容如下 1 .表单验证的准备工作 在开启长篇大论之前,首先将表单验证的效果展示给大家. 1.点击表单项,显示帮助 ...
- go 查找模块位置_如何使用Go语言插件功能?
背景 在我做 C 语言开发的时候,为了让程序有更好的扩展性,通常选择将需要扩展的功能实现为插件,通过加载 so 文件的方式导入插件中的函数.当我学 Golang 的时候,很希望能有这样的插件功能.终于 ...
- 「初探」小程序插件功能
「初探」小程序插件功能 3月13日,小程序发布了新功能-- 小程序插件.即,在小程序基础库 1.9.6 版本上,允许开发者开发插件,同时将插件提供给其它小程序使用.微信小程序在构建自己生态的征程上,又 ...
- IntelliJ IDEA Plugins 插件整理
IntelliJ IDEA Plugins 插件整理 插件库位置 查看类 jclasslib Bytecode viewer `查看字节码` 创建类 GsonFormat `通过JSON生成实体类` ...
- 【Nvidia DeepStream5.0】Gst-nvtracker插件功能说明
Gst-nvtracker Gst-nvtracker插件允许DeepStream 管道使用一个底层跟踪器来跟踪具有唯一ID的检测目标.它支持任何实现NvDsTracker API的底层库,包括三个参 ...
最新文章
- mysql 5.8 新特性_MySQL 5.4的新特性解析
- Java中获取数据库中两个时间的相差秒数
- 巨型机是一种什么的超级计算机,这个世界其实是一个超级计算机
- 模糊搜索怎么实现_干货 | 你真的了解自己是怎么搜索的吗_01
- 计算机房的英语用谐音怎么读,“人机对话”学英语 发音不准就过不了电脑关...
- elementui的css文件没有引入_Python中引入模块详细介绍,使用模块的过程中注意事项教程...
- 畅销书主编推出 MATLAB 春季班,限量优惠+送百G资料!
- oracle 序列验证脚本,oracle 生成序列脚本
- 大数据之-Hadoop3.x_Yarn_公平调度器---大数据之hadoop3.x工作笔记0146
- CSS基础——盒子模型【学习笔记】
- 九、面向对象三大特征(三)—— 多态
- 51单片机4位抢答器_倒计时可调仿真设计
- ubuntu硬盘序列号怎么查询_Ubuntu系统下查看硬盘信息
- 工作那些事(十)谈谈技术主管(总监)
- 挑筋(挑治)疗法——针挑治疗痔疮
- Pytorch实战__反向攻击(Adversarial Attack)
- 数字媒体技术作业题代码:matlab将三个灰度图片转化成一个彩色图片
- ros --- 录制imu bag包 和 imu标定
- 山这边,山那边[泥巴网]
- shell中awk,find,grep学习