Win10系统VS2019+Cmake+Qt5.14.2+CloudCompare2.11.3环境配置(含插件)

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依赖了GMPGNU Multiple Precision Arithmetic LibraryGNU多精度算术库)以及MPFRMultiple Precision Floating-Point Reliable Library,多精度浮点舍入库);
GMPMPFRWindows下编译比较麻烦,可以直接下载对应的预编译好的二进制库文件。

1.3 源码包下载

CloudCompare源码地址:
githubhttps://github.com/CloudCompare/CloudCompare.git

CGAL源码地址(含预编译好的库文件,GMPMPFR的库文件):
githubhttps://github.com/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_TESTINGfalse减少编译时间
CMAKE_INSTALL_PREFIXpath编译时生成的安装文件路径
COMPILE_CC_CORE_LIB_SHAREDtrue生成dll动态库
COMPILE_CC_CORE_LIB_WITH_QTtrue使用QT,用于并行计算
COMPILE_CC_CORE_LIB_WITH_CGALtrue使用CGAL库,需要事先下载好CGAL
CGAL_DIRpathCGAL库路径
GMP_INCLUDE_DIRpathGMP库头文件包含目录
GMP_LIBRARY_DIRpathGMP库目录
GMP_LIBRARIES.libGMP库文件名
MFPR_INCLUDE_DIRpathMFPR库头文件包含目录
MFPR_LIBRARY_DIRpathMFPR库目录
MFPR_LIBRARIES.libMFPR库文件名
BOOST_INCLUDE_DIRpathBOOST库头文件包含目录

注:GMP和MPFR的库文件下载后,可放置在$(CGAL)\Installation\auxiliary\gmp

2.3 构建项目

image.png
步骤如下:

  1. 指定源码路径;
  2. 指定构建项目路径;
  3. 点击Configure
  4. 按照2.2节表中的值进行设置;
  5. 再次点击Configure,直到出现Configuration done
  6. 点击Generate,构建项目路径中将生成解决方案文件CloudCompareProjects.sln

点击ConfigureGenerate后,如果顺利,会出现Configuring doneGenerating done

3 打开解决方案并编译

3.1 编译解决方案

点击Open Project(或者在2.3节步骤2中指定的构建项目路径中,找到生成的解决方案文件CloudCompareProjects.sln,通过Visual Studio打开),打开通过Cmake构建的项目;
选中ALL_BUILD项目,分别在DebugRelease模式下,重新生成解决方案。
image.png

3.2 安装CloudCompare

image.png
选中INSTALL项目,右击,“仅用于项目”->“仅重新生成 INSTALL”,此时,将会在指定路径下(2.2节表中CMAKE_INSTALL_PREFIX选项的值)生成CloudCompare.exe

4 插件调试

4.1 创建插件

4.1.1 创建插件文件夹

在2.1节指定源代码路径下的plugins\core\Standard文件夹中,创建插件文件夹,例如PluginTest,如下图所示:
image.png

4.1.2 创建插件图标

在插件文件夹PluginTest中新建images文件夹,并在images文件夹下存放插件图标,如下图所示:
image.png

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.cn"
		}
	],
	"maintainers": [
		{
			"name": "Han Meimei",
			"email": "xxxxxx@wuxi.cn"
		},
		{
			"name": "Lin Tao"
		}
	],
	"references": [
		{
			"text": "核酸检测查询官网",
			"url": "https://xinguan.nccl.org.cn/"
		},
		{
			"text": "核酸检测,人人有责"
		}
	]
}

对于info.json文件,解释如下:

  • type:必须项,有3种类型,分别是StandardGLI/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编译

步骤如下:

  1. PluginTest插件文件夹所在目录的上级目录的CMakeLists.txt文件中,添加如下代码:

add_subdirectory( PluginTest )

  1. 按照第2节的步骤,通过Cmake构建项目,在2.2节构建选项中,勾选PLUGIN_STANDARD_PLUGIN_TEST插件,如下图所示:

image.png

  1. 生成成功的PluginTest插件项目如下图所示:

image.png

4.3 插件安装及运行

4.3.1 方法1:安装插件后直接运行CloudCompare

步骤如下:

  1. 编译插件,为了保证编译速度,只需要对该插件进行生成或重生成,如下:

image.png
生成插件的dll库文件在如下目录:
image.png

  1. 安装插件,将插件安装到第2.2节中CMAKE_INSTALL_PREFIX指定的路径中,CloudCompare软件才能正确加载插件的dll库文件,安装过程如下:

image.png

  1. 运行CloudCompare软件,软件路径如下:

image.png

4.3.2 方法2:Visual Studio中调试运行

如果想要在Visual Studio中单步调试代码,需要把第2.2节中CMAKE_INSTALL_PREFIX路径中的所有库文件拷贝到如下位置:
image.png
若需要修改插件代码并进行调试验证,只需要单独编译插件(按照4.3.1节方法1步骤1或步骤2),并将插件的dll库文件拷贝到如下路径:
image.png

4.4 插件运行结果

CloudCompare软件中插件位置(插件图标为4.1.2节中的图标)如图所示:
image.png
点击PluginTest即可执行该插件功能,效果如下:
image.png
浏览插件基本信息步骤如下:
image.png
基本信息与4.1.3节一致,如下:
image.png

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
搭建点云开发环境需要安装以下软件: 1. Visual Studio 2017:用于编写C++代码。 2. Qt 5.10.1:用于构建GUI界面。 3. PCL 1.8.1:点云库。 4. VTK 8.0:用于可视化点云数据。 以下是具体的步骤: 1. 安装 Visual Studio 2017,选择 C++ 工作负载。此外,还需要安装 CMake。 2. 下载 Qt 5.10.1 安装包并安装。需要安装的组件有:Qt 5.10.1 MSVC2017 64-bit、Qt Visual Studio Tools、Qt Charts 和 Qt Data Visualization。 3. 下载 PCL 1.8.1 for Windows,并解压到一个目录下。 4. 下载 VTK 8.0 for Windows,并解压到一个目录下。 5. 打开 CMake,设置源代码路径为 PCL 的根目录,设置构建路径为一个新的目录(例如:PCL_build)。点击 Configure,选择 Visual Studio 15 2017 Win64 作为生成器,点击 Finish。 6. 在 CMake 中,找到 VTK_DIR 设置项,将其设置为 VTK 的安装目录(例如:D:/VTK-8.0.0/build)。点击 Configure,然后点击 Generate。 7. 打开 Visual Studio 2017,选择 File > New > Project,选择 Qt Widgets Application。设置项目名称、位置和解决方案名称,然后点击 Create。 8. 在项目属性中,选择 C/C++ > General,将 Additional Include Directories 设置为 PCL 的 include 目录(例如:D:/PCL-1.8.1/include/pcl-1.8)和 VTK 的 include 目录(例如:D:/VTK-8.0.0/include/vtk-8.0)。 9. 在项目属性中,选择 Linker > General,将 Additional Library Directories 设置为 PCL 的 lib 目录(例如:D:/PCL-1.8.1/lib)和 VTK 的 lib 目录(例如:D:/VTK-8.0.0/build/bin/Release)。 10. 在项目属性中,选择 Linker > Input,将 Additional Dependencies 设置为以下库:pcl_common_release.lib、pcl_io_ply_release.lib、pcl_visualization_release.lib、vtkCommonCore-8.0.lib、vtkFiltersCore-8.0.lib、vtkInteractionStyle-8.0.lib、vtkRenderingCore-8.0.lib。 11. 编写代码并构建项目,即可开始点云开发。 以上是在 Windows 10、Visual Studio 2017、Qt 5.10.1、PCL 1.8.1 和 VTK 8.0 环境下的点云开发环境搭建步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值