CloudCompare插件开发之点云如何创建、保存并显示?

2024-03-11 18:20

本文主要是介绍CloudCompare插件开发之点云如何创建、保存并显示?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 0.引言
  • 1.创建插件工程
  • 2.代码编写
  • 3.显示点云
  • 4.保存点云

0.引言

  CloudCompaer是一款优秀的开源软件,在点云处理时可以根据实际要求开发合适的插件,在实际使用中,创建点云、保存点云、显示点云的操作较为基础,为了使这些操作得到总结,本文实现创建点云、保存并显示。

1.创建插件工程

  创建插件流程见:CloudCompare如何进行二次开发之插件开发?。
  本文创建的插件文件名:OperateData_1;
  CloudCompare中插件名:处理数据1。

2.代码编写

  (1)引入头文件

#include "qinputdialog.h"
#include "ccPointCloud.h"
#include "qfiledialog.h"

  (2)编写代码
  在这里插入图片描述

// This is an example of an action's method called when the corresponding action
// is triggered (i.e. the corresponding icon or menu entry is clicked in CC's  
// main interface). You can access most of CC's components (database,  
// 3D views, console, etc.) via the 'm_app' variable (see the ccMainAppInterface  
// class in ccMainAppInterface.h).  
void OperateData_1::doAction()  
{  if (m_app == nullptr)  {  // m_app should have already been initialized by CC when plugin is loaded  Q_ASSERT(false);  return;  }  //创建点云  ccPointCloud* myPc = new ccPointCloud(QString("myPc"));  int pointCount = 10000;//设置创建10000个点  myPc->reserve(pointCount);  for (size_t i = 0; i < pointCount; i++)  {  float angle = (i % 360)*3.1415926 / 180;  float x = 100 * cos(angle);  float y = 100 * sin(angle);  float z = int(i / 360) * 1;  const CCVector3* vcc = new CCVector3(x, y, z);  myPc->addPoint(*vcc);  }  //保存点云  QString dirPath = QFileDialog::getExistingDirectory(nullptr, "please select a saving path");  if (dirPath.isEmpty()) {  m_app->dispToConsole("The user did not select a folder.");  return;  }  QString filename =  QString(myPc->getName());  QFile file(dirPath + "\\" + filename + ".txt");  if (!file.exists()) {  file.open(QIODevice::ReadWrite | QIODevice::Text);  file.close();  }  file.open(QIODevice::Text | QIODevice::Truncate | QIODevice::WriteOnly);  QTextStream out(&file);  int precision = 3;  for (int i = 0; i<myPc->size(); i++) {  float x = myPc->getPoint(i)->x;  float y = myPc->getPoint(i)->y;  float z = myPc->getPoint(i)->z;  out << QString("%1,%2,%3").arg(x, 0, 'r', precision).arg(y, 0, 'r', precision).arg(z, 0, 'r', precision) << endl;  }  file.close();  //显示点云  std::vector<ccHObject*> allCloud;  allCloud.push_back(myPc);  ccHObject* CloudGroup = new ccHObject(QString("CloudGroup"));  for (size_t i = 0; i < allCloud.size(); i++)  {  CloudGroup->addChild(allCloud[i]);  }  m_app->addToDB(CloudGroup);  m_app->refreshAll();  m_app->updateUI();  
}

3.显示点云

  在这里插入图片描述

4.保存点云

  在这里插入图片描述

参考资料:
[1] fandq1223. 创建点云文件、加载点云文件; 2016-11-15 [accessed 2023-04-17].
[2] 渡航奥. C/C++库函数及函数大全; 2019-09-05 [accessed 2023-04-17].
[3] 小修勾. 《QT+PCL 第一章》点云文件保存; 2022-03-20 [accessed 2023-04-17].
[4] 萘和. cloudCompare插件开发——保存点云颜色; 2021-08-13 [accessed 2023-04-17].
[5] kingkee. 【Qt】QString 格式化参数; 2019-12-01 [accessed 2023-04-17].

这篇关于CloudCompare插件开发之点云如何创建、保存并显示?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/798647

相关文章

Agent开发核心技术解析以及现代Agent架构设计

《Agent开发核心技术解析以及现代Agent架构设计》在人工智能领域,Agent并非一个全新的概念,但在大模型时代,它被赋予了全新的生命力,简单来说,Agent是一个能够自主感知环境、理解任务、制定... 目录一、回归本源:到底什么是Agent?二、核心链路拆解:Agent的"大脑"与"四肢"1. 规划模

JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)

《JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)》:本文主要介绍如何在IntelliJIDEA2020.1中创建和部署一个JavaWeb项目,包括创建项目、配置Tomcat服务... 目录简介:一、创建项目二、tomcat部署1、将tomcat解压在一个自己找得到路径2、在idea中添加

Java利用Spire.Doc for Java实现在模板的基础上创建Word文档

《Java利用Spire.DocforJava实现在模板的基础上创建Word文档》在日常开发中,我们经常需要根据特定数据动态生成Word文档,本文将深入探讨如何利用强大的Java库Spire.Do... 目录1. Spire.Doc for Java 库介绍与安装特点与优势Maven 依赖配置2. 通过替换

idea粘贴空格时显示NBSP的问题及解决方案

《idea粘贴空格时显示NBSP的问题及解决方案》在IDEA中粘贴代码时出现大量空格占位符NBSP,可以通过取消勾选AdvancedSettings中的相应选项来解决... 目录1、背景介绍2、解决办法3、处理完成总结1、背景介绍python在idehttp://www.chinasem.cna粘贴代码,出

Python+wxPython开发一个文件属性比对工具

《Python+wxPython开发一个文件属性比对工具》在日常的文件管理工作中,我们经常会遇到同一个文件存在多个版本,或者需要验证备份文件与源文件是否一致,下面我们就来看看如何使用wxPython模... 目录引言项目背景与需求应用场景核心需求运行结果技术选型程序设计界面布局核心功能模块关键代码解析文件大

C++多线程开发环境配置方法

《C++多线程开发环境配置方法》文章详细介绍了如何在Windows上安装MinGW-w64和VSCode,并配置环境变量和编译任务,使用VSCode创建一个C++多线程测试项目,并通过配置tasks.... 目录下载安装 MinGW-w64下载安装VS code创建测试项目配置编译任务创建 tasks.js

使用C#导出Excel数据并保存多种格式的完整示例

《使用C#导出Excel数据并保存多种格式的完整示例》在现代企业信息化管理中,Excel已经成为最常用的数据存储和分析工具,从员工信息表、销售数据报表到财务分析表,几乎所有部门都离不开Excel,本文... 目录引言1. 安装 Spire.XLS2. 创建工作簿和填充数据3. 保存为不同格式4. 效果展示5

java创建xls文件放到指定文件夹中实现方式

《java创建xls文件放到指定文件夹中实现方式》本文介绍了如何在Java中使用ApachePOI库创建和操作Excel文件,重点是如何创建一个XLS文件并将其放置到指定文件夹中... 目录Java创建XLS文件并放到指定文件夹中步骤一:引入依赖步骤二:创建XLS文件总结Java创建XLS文件并放到指定文件

VS Code中的Python代码格式化插件示例讲解

《VSCode中的Python代码格式化插件示例讲解》在Java开发过程中,代码的规范性和可读性至关重要,一个团队中如果每个开发者的代码风格各异,会给代码的维护、审查和协作带来极大的困难,这篇文章主... 目录前言如何安装与配置使用建议与技巧如何选择总结前言在 VS Code 中,有几款非常出色的 pyt

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三