admin 管理员组文章数量: 1184232
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环境配置(含插件) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1754950120a3054102.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论