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

相关文章

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

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

k8s按需创建PV和使用PVC详解

《k8s按需创建PV和使用PVC详解》Kubernetes中,PV和PVC用于管理持久存储,StorageClass实现动态PV分配,PVC声明存储需求并绑定PV,通过kubectl验证状态,注意回收... 目录1.按需创建 PV(使用 StorageClass)创建 StorageClass2.创建 PV

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

Linux创建服务使用systemctl管理详解

《Linux创建服务使用systemctl管理详解》文章指导在Linux中创建systemd服务,设置文件权限为所有者读写、其他只读,重新加载配置,启动服务并检查状态,确保服务正常运行,关键步骤包括权... 目录创建服务 /usr/lib/systemd/system/设置服务文件权限:所有者读写js,其他

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

idea+spring boot创建项目的搭建全过程

《idea+springboot创建项目的搭建全过程》SpringBoot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目,:本文主要介绍idea+springb... 目录一.idea四种搭建方式1.Javaidea命名规范2JavaWebTomcat的安装一.明确tomcat

Java中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例解析

《Java中的分布式系统开发基于Zookeeper与Dubbo的应用案例解析》本文将通过实际案例,带你走进基于Zookeeper与Dubbo的分布式系统开发,本文通过实例代码给大家介绍的非常详... 目录Java 中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例一、分布式系统中的挑战二

C#实现SHP文件读取与地图显示的完整教程

《C#实现SHP文件读取与地图显示的完整教程》在地理信息系统(GIS)开发中,SHP文件是一种常见的矢量数据格式,本文将详细介绍如何使用C#读取SHP文件并实现地图显示功能,包括坐标转换、图形渲染、平... 目录概述功能特点核心代码解析1. 文件读取与初始化2. 坐标转换3. 图形绘制4. 地图交互功能缩放

基于Go语言开发一个 IP 归属地查询接口工具

《基于Go语言开发一个IP归属地查询接口工具》在日常开发中,IP地址归属地查询是一个常见需求,本文将带大家使用Go语言快速开发一个IP归属地查询接口服务,有需要的小伙伴可以了解下... 目录功能目标技术栈项目结构核心代码(main.go)使用方法扩展功能总结在日常开发中,IP 地址归属地查询是一个常见需求:

Git打标签从本地创建到远端推送的详细流程

《Git打标签从本地创建到远端推送的详细流程》在软件开发中,Git标签(Tag)是为发布版本、标记里程碑量身定制的“快照锚点”,它能永久记录项目历史中的关键节点,然而,仅创建本地标签往往不够,如何将其... 目录一、标签的两种“形态”二、本地创建与查看1. 打附注标http://www.chinasem.cn