CloudCompare插件编写

CloudCompare插件编写与添加教程

预置环境:Windows10+Git+CMake3.23.3+VS2019+Qt5.14.2

编译CloudCompare工程

首先克隆CloudCompare工程,注意必须加上--recursive否则无法下载完整代码编译会失败:

git clone --recursive https://github.com/CloudCompare/CloudCompare.git

这里下载的是最新的CloudCompare的源代码,版本是2.14。
用CMake编译工程:
在这里插入图片描述
选择编译环境和目标平台:在这里插入图片描述
勾上Grouped和Advanced,点击Configure:在这里插入图片描述
修改CMAKE_INSTALL_PREFIX(可选,为了方便找到安装文件):
在这里插入图片描述
再依次点击Configure,Generate和Open Project,选择用VS2019打开.sln文件:
在这里插入图片描述
选择Release x64环境编译:
在这里插入图片描述
右键ALL_BUILD选择生成,完成后再右键INSTALL生成。第一次编译的话,需要等待较长的时间。
编译成功后,进入之前指定的install文件夹路径在CloudCompare文件夹下即可找到exe文件。打开如下图所示:
在这里插入图片描述

CloudCompare添加插件

在CloudCompare\plugins\example文件夹内有插件的编写实例可以参考,这里我们自己再编写一个。在改文件夹下新建TestPlugin文件夹,添加下述文件:
TestPlugin.h

#pragma once

#include "ccStdPluginInterface.h"


class TestPlugin : public QObject, public ccStdPluginInterface
{
	Q_OBJECT
	Q_INTERFACES(ccPluginInterface ccStdPluginInterface)
	Q_PLUGIN_METADATA(IID "cccorp.cloudcompare.plugin.TestPlugin" FILE "info.json")

public:
	//! Default constructor
	explicit TestPlugin(QObject* parent = nullptr);

	~TestPlugin() override = default;
	
	//inherited from ccStdPluginInterface
	void onNewSelection(const ccHObject::Container& selectedEntities) override;
	QList<QAction *> getActions() override;

protected slots:
	//! Slot called when associated ation is triggered
	void doAction();

private:
	//! Associated action
	QAction* m_action;
};

TestPlugin.cpp

#include "TestPlugin.h"
#include <QMainWindow>


TestPlugin::TestPlugin(QObject* parent)
	: QObject(parent)
	, ccStdPluginInterface( ":/CC/plugin/TestPlugin/info.json" )
	, m_action( nullptr )
{

}

void TestPlugin::onNewSelection(const ccHObject::Container& selectedEntities)
{
	m_action->setEnabled(true);
}

QList<QAction *> TestPlugin::getActions()
{
	//default action
	if (!m_action)
	{
		m_action = new QAction(getName(),this);
		m_action->setToolTip(getDescription());
		m_action->setIcon(getIcon());
		//connect signal
		connect(m_action, &QAction::triggered, this, &TestPlugin::doAction);
	}

	return QList<QAction *>{ m_action };
}

//persistent settings during a single session
// CoamingMeasurmentDialog::Parameters s_params;

void TestPlugin::doAction()
{
	ccLog::LogMessage("hello", 1);//这里设置TestPlugin点击一下,日志栏输出hello字样

	//currently selected entities parameters may have changed!
	m_app->updateUI();
	//currently selected entities appearance may have changed!
	m_app->refreshAll();
}

CMakeLists.txt

option( PLUGIN_STANDARD_TestPlugin "Check to install TestPlugin plugin" ON )

if (PLUGIN_STANDARD_TestPlugin)
	project( TestPlugin )
	AddPlugin( NAME ${PROJECT_NAME} )
	target_sources( ${PROJECT_NAME}	PRIVATE	${CMAKE_CURRENT_LIST_DIR}/TestPlugin.h ${CMAKE_CURRENT_LIST_DIR}/TestPlugin.cpp)
endif()

TestPlugin.png
在这里插入图片描述
info.json

{
    "type" : "Standard",
    "name" : "TestPlugin",
    "icon" : ":/CC/plugin/TestPlugin/TestPlugin.png",
    "description": "",
    "authors" : [
        {
            "name" : "",
            "email" : ""
        }
    ],
    "maintainers" : [
        {
            "name" : "",
            "email" : ""
        }
    ],
    "references" : [
        {
            "text": "" ,
            "url" : ""
        },
      {
        "text": "TestPlugin library",
        "url": ""
      },
      {
        "text": "Documentation",
        "url": ""
      }
    ]
}

TestPlugin.qrc

<RCC>
    <qresource prefix="/CC/plugin/TestPlugin" >
        <file>TestPlugin.png</file>
        <file>info.json</file>
    </qresource>
</RCC>

再去上一级目录中的CMakeLists.txt末尾添加

add_subdirectory( ${CMAKE_CURRENT_SOURCE_DIR}/TestPlugin )

仿照上面的工程再次运行CMake,若出现PLUGIN_STANDARD_TestPlugin则插件已被添加入工程中:
在这里插入图片描述
再次生成VS工程并编译,不出意外这次会快很多。这时再次打开CloudCompare.exe,插件成功被添加到右侧:
在这里插入图片描述
点击插件按钮,在下发Console区域会打印日志hello。
在这里插入图片描述

### CloudCompare 插件开发使用教程 #### 1. 编译环境准备 为了进行CloudCompare插件开发,首先需要确保能够成功编译CloudCompare源码。这一步骤至关重要,因为插件的构建依赖于CloudConnect的核心框架和库[^1]。 #### 2. 创建插件文件夹结构 在完成CloudCompare的编译之后,开发者可以基于现有的插件模板来创建自定义插件。通常情况下,可以在`plugins`目录下找到标准的插件模板文件夹。按照此模板复制并重命名一个新的文件夹作为自己的插件项目根目录[^1]。 #### 3. 修改CMake配置支持新插件CloudCompare项目的顶层 `CMakeLists.txt` 文件中,通过调用 `add_subdirectory(plugins)` 来加载所有的子模块插件路径。因此,在新增加了一个插件后,需确认该插件被正确引入到构建系统中。具体操作是在对应位置添加新的插件名称或者调整其相对路径设置[^2]。 #### 4. 实现核心接口函数 每一个有效的CloudCompare插件都需要实现一组特定的功能入口点(entry points),这些是由官方SDK文档所规定的标准化API集合。主要包括初始化方法、处理逻辑以及清理释放资源的方法等部分。以下是典型的插件类声明示例: ```cpp #include "ccMainAppInterface.h" class MyCustomPlugin : public QObject, public GenericFilter { Q_OBJECT CC_REGISTER_CLASS("MyCustomPlugin", Filter) public: MyCustomPlugin() {} ~MyCustomPlugin() {} virtual bool start(const ccHObject* obj) override; }; ``` 在此代码片段里展示了如何继承自基类并注册成为可识别类型的过滤器组件[^1]。 #### 5. 测试与调试 最后阶段涉及反复测试已编写好的插件行为是否符合预期目标,并利用IDE内置工具链执行单步跟踪分析潜在错误源头直至修复完毕为止。 --- ### 提供的相关链接建议阅读材料如下: - 官方Wiki页面关于扩展性的章节说明。 - GitHub上的开源贡献者提交记录查看实际案例学习经验分享文章。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

给算法爸爸上香

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值