预置环境: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。