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" plugins
	foreach (QObject *plugin, QPluginLoader::staticInstances())
		dispatchPlugin(plugin);

	ccConsole::Print(QString("Application path: ")+QCoreApplication::applicationDirPath());

	//plugins are in bin/plugins
	m_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目录下

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

累了就要打游戏

把我养胖,搞代码

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值