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_OBJECTQ_INTERFACES(ccPluginInterface ccStdPluginInterface)Q_PLUGIN_METADATA(IID "cccorp.cloudcompare.plugin.TestPlugin" FILE "info.json")public://! Default constructorexplicit TestPlugin(QObject* parent = nullptr);~TestPlugin() override = default;//inherited from ccStdPluginInterfacevoid onNewSelection(const ccHObject::Container& selectedEntities) override;QList<QAction *> getActions() override;protected slots://! Slot called when associated ation is triggeredvoid doAction();private://! Associated actionQAction* 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 actionif (!m_action){m_action = new QAction(getName(),this);m_action->setToolTip(getDescription());m_action->setIcon(getIcon());//connect signalconnect(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。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1553305.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

鸢尾花书实践和知识记录[编程1-11二维和三维可视化]

作者空间 文章目录 思维导图函数使用 二维可视化方案平面散点图散点图的示例代码1&#xff1a;绘制鸢尾花的散点图代码2Plotly绘制散点图 数据类型和绘图工具的对应 平面等高线代码3生成等高线网格数据 plotly.express关键的绘图函数 Plotly的另一个模块代码4 Plotly生成的 热图…

李宏毅深度学习-梯度下降和Normalization归一化

Gradient Descent梯度下降 ▽ -> 梯度gradient -> vector向量 -> 下图中的红色箭头&#xff08;loss等高线的法线方向&#xff09; Tip1: Tuning your learning rates Adaptive Learning Rates自适应 通常lr会越来越小 Adaptive Learning Rates中每个参数都给它不同…

如何使用MethodChannel通信

文章目录 1 概念介绍2 实现方法3 经验总结我们在上一章回中介绍了Visibility组件相关的内容,本章回中将介绍Flutter与原生平台通信相关的内容.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 在移动开发领域以Android和IOS SDK开发出的应用程序叫原生开发,开发同一个程序…

Redis: Sentinel工作原理和故障迁移流程

Sentinel 哨兵几个核心概念 1 ) 定时任务 Sentinel 它是如何工作的&#xff0c;是如何感知到其他的 Sentinel 节点以及 Master/Slave节点的就是通过它的一系列定时任务来做到的&#xff0c;它内部有三个定时任务 第一个就是每一秒每个 Sentinel 对其他 Sentinel 和 Redis 节点…

【Canvas与徽章】金圈蓝底国庆75周年徽章

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>金边黑盾75周年</title><style type"text/css"&g…

万知:告别繁琐,轻松办公

零一万物这位科技创新的弄潮儿&#xff0c;带着它的最新杰作——万知&#xff0c;闪亮登场。这不仅仅是一个产品&#xff0c;它是对传统工作方式的一次轻松挑战。作为一款一站式AI问答、阅读和创作平台&#xff0c;万知旨在为用户提供高效、便捷的工作体验。万知通过集成多种智…

Suricata:开源网络分析和威胁检测

Suricata 是一款高性能、开源网络分析和威胁检测软件&#xff0c;被大多数私人和公共组织使用&#xff0c;并被主要供应商嵌入以保护他们的资产。 Suricata 功能 Suricata 提供全面的网络安全监控 (NSM) 功能&#xff0c;包括记录 HTTP 请求、捕获和存储 TLS 证书以及从网络流…

关于Vben Admin多标签页面缓存不生效的问题

情况说明 笔者在接手一个基于Vben Admin框架改造的vue3后台管理项目&#xff0c;客户要求在切换头部Tab页面时&#xff0c;不要刷新清空已经填写的表单页面或者表格。 然而&#xff0c;笔者根据Vben Admin的官方文档来配置多标签页面缓存后&#xff0c;页面每次切换后&#x…

光通信——FTTx

目录 FTTH模式 FTTO模式 FTTR模式 FTTB/CLAN/xDSL模式 FTTCabxDSL模式 根据接入光纤到用户的距离分类&#xff0c;PON可应用于光纤到交接箱&#xff08;FTTCab&#xff09;、光纤到大楼/路边&#xff08;FTTB/C&#xff09;、光纤到办公室&#xff08;FTTO&#xff0…

Tiny-universe手戳大模型TinyRAG--task4

TinyRAG 这个模型是基于RAG的一个简化版本&#xff0c;我们称之为Tiny-RAG。Tiny-RAG是一个基于RAG的简化版本&#xff0c;它只包含了RAG的核心功能&#xff0c;即Retrieval和Generation。Tiny-RAG的目的是为了帮助大家更好的理解RAG模型的原理和实现。 1. RAG 介绍 LLM会产…

一文彻底搞懂多模态 - 多模态理解+视觉大模型+多模态检索

文章目录 技术交流多模态理解一、图像描述1. 基于编码器-解码器的方法2. 基于注意力机制的方法3. 基于生成对抗网络的方法 二、视频描述三、视觉问答 视觉大模型一、通用图像理解模型二、通用图像生成模型 多模态检索一、单模态检索二、多模态检索三、跨模态检索 最近这一两周看…

自闭症寄宿学校:为孩子发掘多重才能

在教育的广阔天地里&#xff0c;每一片土壤都孕育着不同的生命&#xff0c;每一颗种子都蕴含着无限的可能。对于自闭症儿童而言&#xff0c;他们的世界或许更加独特与复杂&#xff0c;但同样充满了未被发掘的潜能与才华。在广州&#xff0c;星贝育园自闭症儿童寄宿制学校正以满…

OpenGL笔记十九之相机系统

OpenGL笔记十九之相机系统 —— 2024-10-02 晚上 文章目录 OpenGL笔记十九之相机系统1.运行1.1.游戏相机1.2.轨迹球相机 2.游戏相机与轨迹球相机切换3.博主笔记本要运行需要更改的文件更改1:28_OpenGL_CameraSystem/application/Application.cpp更改2:28_OpenGL_CameraSystem/a…

MySQL 中如何优化 DISTINCT 查询

一、引言 在 MySQL 数据库中&#xff0c;DISTINCT关键字用于查询结果集中去除重复的行。然而&#xff0c;使用DISTINCT可能会导致查询性能下降&#xff0c;特别是在处理大量数据时。本文将介绍一些优化 MySQL 中DISTINCT查询的方法。 二、理解 DISTINCT 查询的性能影响 &…

NOI Linux 2.0 使用指南 Code Blocks 手把手教会你

安装 NOI Linux 2.0 的镜像可以从 NOI 官网下载。(NOI Linux 2.0发布&#xff0c;将于9月1日起正式启用&#xff01;) 可以采用 Virtual Box 或者 VMWare 来安装虚拟机&#xff08;不建议安装实体机&#xff0c;如果想要尝试 Linux 环境&#xff0c;推荐使用 WSL 2.0&#xf…

十六字心传

中国文化传统中著名的“十六字心传”&#xff1a;“人心惟危&#xff0c;道心惟微&#xff1b;惟精惟一&#xff0c;允执厥中。 ”语出于《虞书大禹谟》。 人心与道心&#xff1a;人的人欲与天理的区别&#xff1b;所谓“人心惟危”&#xff0c;即是说人们的那种物欲情欲&…

ubuntu 18.04 cuda 11.01 gpgpu-sim 裸机编译

1&#xff0c;环境 ubuntu 18.04 x86_64 cuda 11.01 gpgpu-sim master commit 90ec3399763d7c8512cfe7dc193473086c38ca38 2&#xff0c;预备环境 一个比较新的 ubuntu 18.04&#xff0c;为了迎合 cuda 11.01 的版本需求 安装如下软件&#xff1a; sudo apt-get instal…

Vue3 proxy跨域代理

一、跨域问题 假设vue项目的运行地址为&#xff1a;http://localhost:5173&#xff0c;此时我们想要调用后端服务的rest api&#xff0c;而后端接口暴露的地址为&#xff1a;https://192.168.1.1:8080/user。 可以发现前端服务与后端服务的域名是不同的&#xff0c;默认情况下…

MySQL 中变量的使用指南

一、引言 在 MySQL 数据库中&#xff0c;变量可以帮助我们更灵活地处理数据和执行查询。变量可以存储各种类型的值&#xff0c;并且可以在 SQL 语句中进行引用和操作。本文将介绍如何在 MySQL 中使用变量&#xff0c;包括用户定义变量和系统变量&#xff0c;并分享一些实际案例…

体验鸿蒙开发第一课

Index.ets: // 导入页面路由模块 import router from ohos.router; Entry Component struct Index {State message: string 我是没头脑build() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold) // 添加一个按钮Button() {Text("Open Pa…