admin管理员组文章数量:1563235
1 CloudCompare
1.1 简要介绍
CloudCompare
是一个三维点云(网格)编辑和处理软件。
1.2 依赖库
1.2.1 QT
必选,CloudCompare
采用了Qt
的插件管理方式,因此需要先安装Qt
。
1.2.2 CGAL(Computational Geometry Algorithms Library,计算几何算法库)
非必选,5.0之后,CGAL
是纯头文件库,不需要编译;CloudCompare
中的Delaunay2.5D
三角化依赖CGAL
库。
CGAL
依赖了GMP
(GNU Multiple Precision Arithmetic Library
,GNU
多精度算术库)以及MPFR
(Multiple Precision Floating-Point Reliable Library
,多精度浮点舍入库);GMP
和MPFR
在Windows
下编译比较麻烦,可以直接下载对应的预编译好的二进制库文件。
1.3 源码包下载
CloudCompare
源码地址:github
:https://github/CloudCompare/CloudCompare.git
CGAL
源码地址(含预编译好的库文件,GMP
和MPFR
的库文件):github
:https://github/CGAL/cgal.git
2 Cmake构建项目
2.1 路径
源代码路径:D:/ThirdParty/cloudcompare/cloudcompare_v2.11.3
构建项目路径:D:/ThirdParty/cloudcompare/cloudcompare_v2.11.3_build
2.2 构建选项
名称 | 值 | 备注 |
---|---|---|
BUILD_TESTING | false | 减少编译时间 |
CMAKE_INSTALL_PREFIX | path | 编译时生成的安装文件路径 |
COMPILE_CC_CORE_LIB_SHARED | true | 生成dll 动态库 |
COMPILE_CC_CORE_LIB_WITH_QT | true | 使用QT ,用于并行计算 |
COMPILE_CC_CORE_LIB_WITH_CGAL | true | 使用CGAL 库,需要事先下载好CGAL 库 |
CGAL_DIR | path | CGAL 库路径 |
GMP_INCLUDE_DIR | path | GMP 库头文件包含目录 |
GMP_LIBRARY_DIR | path | GMP 库目录 |
GMP_LIBRARIES | .lib | GMP 库文件名 |
MFPR_INCLUDE_DIR | path | MFPR 库头文件包含目录 |
MFPR_LIBRARY_DIR | path | MFPR 库目录 |
MFPR_LIBRARIES | .lib | MFPR 库文件名 |
BOOST_INCLUDE_DIR | path | BOOST 库头文件包含目录 |
注:GMP和MPFR的库文件下载后,可放置在
$(CGAL)\Installation\auxiliary\gmp
。
2.3 构建项目
步骤如下:
- 指定源码路径;
- 指定构建项目路径;
- 点击
Configure
; - 按照2.2节表中的值进行设置;
- 再次点击
Configure
,直到出现Configuration done
; - 点击
Generate
,构建项目路径中将生成解决方案文件CloudCompareProjects.sln
。
点击
Configure
或Generate
后,如果顺利,会出现Configuring done
或Generating done
。
3 打开解决方案并编译
3.1 编译解决方案
点击Open Project
(或者在2.3节步骤2中指定的构建项目路径中,找到生成的解决方案文件CloudCompareProjects.sln
,通过Visual Studio
打开),打开通过Cmake
构建的项目;
选中ALL_BUILD
项目,分别在Debug
和Release
模式下,重新生成解决方案。
3.2 安装CloudCompare
选中INSTALL
项目,右击,“仅用于项目”->“仅重新生成 INSTALL
”,此时,将会在指定路径下(2.2节表中CMAKE_INSTALL_PREFIX
选项的值)生成CloudCompare.exe
。
4 插件调试
4.1 创建插件
4.1.1 创建插件文件夹
在2.1节指定源代码路径下的plugins\core\Standard
文件夹中,创建插件文件夹,例如PluginTest
,如下图所示:
4.1.2 创建插件图标
在插件文件夹PluginTest
中新建images
文件夹,并在images
文件夹下存放插件图标,如下图所示:
4.1.3 创建插件基本信息描述文件
在插件文件夹PluginTest
中创建info.json
文件,用于描述插件基本信息,代码如下:
{
"type": "Standard",
"core": true,
"name": "PluginTest",
"icon": ":/CC/plugin/PluginTest/images/icon.png",
"description": "This is a description of the test plugin.",
"authors": [
{
"name": "Miss Gao",
"email": "Miss Gao@wuxi"
}
],
"maintainers": [
{
"name": "Han Meimei",
"email": "xxxxxx@wuxi"
},
{
"name": "Lin Tao"
}
],
"references": [
{
"text": "核酸检测查询官网",
"url": "https://xinguan.nccl/"
},
{
"text": "核酸检测,人人有责"
}
]
}
对于info.json
文件,解释如下:
type
:必须项,有3种类型,分别是Standard
或GL
或I/O
;name
:必须项,表示插件的名称;icon
:插件图标路径,必须保证PluginTest/images/icon.png
路径正确,否则无法正确加载图标;description
:插件描述,显示在插件对话框中;authors
:作者,显示在插件对话框中;maintainers
:维护人员,显示在插件对话框中;references
:参考文献,显示在插件对话框中。
4.1.4 创建插件CMakeLists文件
在插件文件夹PluginTest
中创建CMakeLists.txt
文件,用于通过Cmake
配置编译插件的功能设置,代码如下:
cmake_minimum_required( VERSION 3.0 )
option( PLUGIN_STANDARD_PLUGIN_TEST "Check to install plugin_test" OFF )
if ( PLUGIN_STANDARD_PLUGIN_TEST )
project( PluginTest )
include( ../../../CMakePluginTpl.cmake )
endif()
4.1.5 创建插件接口文件
在插件文件夹PluginTest
中创建插件接口文件,例如PluginTest.h
,代码如下:
#ifndef PLUGIN_TEST_HEADER
#define PLUGIN_TEST_HEADER
#include "ccStdPluginInterface.h"
/**
用户需要实现的“getActions”,该方法将返回插件的所有操作(QAction对象);
CloudCompare会自动将这些图标添加到插件工具栏和插件菜单中;
如果插件返回多个操作,CC将为插件创建一个专用工具栏和一个子菜单;
用户需要将这些操作连接到插件中的方法。
使用ccStdPluginInterface::m_app属性可访问大多数CC组件(数据库、3D视图、控制台等)
请参阅ccMainAppInterface中的ccMainAppInterface类
**/
class CPluginTest : public QObject, public ccStdPluginInterface
{
Q_OBJECT
Q_INTERFACES(ccStdPluginInterface)
// IID(插件名)是唯一的;
Q_PLUGIN_METADATA(IID "cccorp.cloudcompare.plugin.PluginTest" FILE "info.json")
public:
explicit CPluginTest( QObject *parent = nullptr );
~CPluginTest() override = default;
// 继承于ccStdPluginInterface
void onNewSelection( const ccHObject::Container &selectedEntities ) override;
QList<QAction *> getActions() override;
private:
/*** 添加用户自定义操作 ***/
void doAction();
//! 默认操作
/**
用户可以在插件中添加任意想要的多个操作,
每个操作对应专用工具栏中的一个图标以及插件菜单中的入口
**/
QAction* m_action;
};
#endif
4.1.6 创建插件实现文件
在插件文件夹PluginTest
中创建插件实现文件,例如PluginTest.cpp
,代码如下:
#include <QtGui>
#include "PluginTest.h"
// 默认构造函数:
// 将Qt resource path传递给“info.json”文件 (在“PluginTest.qrc”文件中) ;
// 构造函数主要用于初始化插件操作和其他成员。
CPluginTest::CPluginTest( QObject *parent )
: QObject( parent )
, ccStdPluginInterface( ":/CC/plugin/PluginTest/info.json" )
, m_action( nullptr )
{
}
// 该方法用于使用或禁用插件
// 取决于当前选中的实体
void CPluginTest::onNewSelection( const ccHObject::Container &selectedEntities )
{
if ( m_action == nullptr )
{
return;
}
// 如果需要针对某种特殊的实体类型进行相关操作,可使用“ccHObjectCaster.h”中的方法,
// 或通过循环方式判段选中对象的类型,如下:
// for ( ccHObject *object : selectedEntities )
// {
// if ( object->getClassID() == CC_TYPES::VIEWPORT_2D_OBJECT )
// {
// // ... do something with the viewports
// }
// }
// 必须选中某实体,才能执行该插件
// m_action->setEnabled( !selectedEntities.empty() );
}
// 该方法返回插件中的所有操作,仅在插件被加载时被调用一次
QList<QAction *> CPluginTest::getActions()
{
// 默认操作 (如果还未被创建, 马上进行创建)
if ( !m_action )
{
// 此处使用默认的插件名,描述以及图标
// 但每个操作都有自己的插件名,描述以及图标
m_action = new QAction( getName(), this );
m_action->setToolTip( getDescription() );
m_action->setIcon( getIcon() );
// 触发用户自定义操作
connect( m_action, &QAction::triggered, this, &CPluginTest::doAction );
}
return { m_action };
}
// 当点击CC主界面中的图标或菜单栏入口时,会调用相应的操作函数,示例如下;
// 使用ccStdPluginInterface::m_app属性可访问大多数CC组件(数据库、3D视图、控制台等)
// 请参阅ccMainAppInterface中的ccMainAppInterface类
void CPluginTest::doAction()
{
if ( m_app == nullptr )
{
// 加载插件时,m_app应已被CC初始化
Q_ASSERT( false );
return;
}
/*** 此处开始执行用户的相关操作 ***/
// 例如在控制台窗口中输出一般信息,如下:
m_app->dispToConsole( " 您好!这里是江苏无锡! ", ccMainAppInterface::STD_CONSOLE_MESSAGE );
// 在控制台窗口中输出警告信息,如下:
m_app->dispToConsole( " 警告:今天做核酸检测了吗? ", ccMainAppInterface::WRN_CONSOLE_MESSAGE );
// 在控制台窗口中输出错误信息,如下:
m_app->dispToConsole( " 错误:还没做核酸检测?还不快去!苏康码要变黄了呢! ", ccMainAppInterface::ERR_CONSOLE_MESSAGE );
/*** 此处结束执行用户的相关操作 ***/
}
注:构造函数中初始化成员列表
ccStdPluginInterface( ":/CC/plugin/PluginTest/info.json" )
中的路径必须与4.1.7节中PluginTest.qrc
的路径保持一致,否则会报错!
4.1.7 创建插件路径配置文件
在插件文件夹PluginTest
中创建插件路径配置文件,例如PluginTest.qrc
,用于文件的相关路径配置,代码如下:
<RCC>
<qresource prefix="/CC/plugin/PluginTest" >
<file>images/icon.png</file>
<file>info.json</file>
</qresource>
</RCC>
4.2 Cmake编译
步骤如下:
- 在
PluginTest
插件文件夹所在目录的上级目录的CMakeLists.txt
文件中,添加如下代码:
add_subdirectory( PluginTest )
- 按照第2节的步骤,通过
Cmake
构建项目,在2.2节构建选项中,勾选PLUGIN_STANDARD_PLUGIN_TEST
插件,如下图所示:
- 生成成功的
PluginTest
插件项目如下图所示:
4.3 插件安装及运行
4.3.1 方法1:安装插件后直接运行CloudCompare
步骤如下:
- 编译插件,为了保证编译速度,只需要对该插件进行生成或重生成,如下:
生成插件的dll
库文件在如下目录:
- 安装插件,将插件安装到第2.2节中
CMAKE_INSTALL_PREFIX
指定的路径中,CloudCompare
软件才能正确加载插件的dll
库文件,安装过程如下:
- 运行
CloudCompare
软件,软件路径如下:
4.3.2 方法2:Visual Studio中调试运行
如果想要在Visual Studio
中单步调试代码,需要把第2.2节中CMAKE_INSTALL_PREFIX
路径中的所有库文件拷贝到如下位置:
若需要修改插件代码并进行调试验证,只需要单独编译插件(按照4.3.1节方法1步骤1或步骤2),并将插件的dll
库文件拷贝到如下路径:
4.4 插件运行结果
CloudCompare
软件中插件位置(插件图标为4.1.2节中的图标)如图所示:
点击PluginTest
即可执行该插件功能,效果如下:
浏览插件基本信息步骤如下:
基本信息与4.1.3节一致,如下:
版权声明:本文标题:Win10系统VS2019+Cmake+Qt5.14.2+CloudCompare2.11.3环境配置(含插件) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1725735034a1039624.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论