STL与PLY格式转化

news/2024/11/17 7:19:29/

一、STL转化为PLY

利用PCL库中vtk_lib_io实现,#include <pcl/io/vtk_lib_io.h>,C++语言。

提供一个用于测试的数据:

通过网盘分享的文件:ply_stl
链接: https://pan.baidu.com/s/1xnO5s2kiUf0Cs35XVyfTHA?pwd=xmax 提取码: xmax

#include <pcl/point_types.h>
#include <pcl/io/pcd_io.h>
#include <pcl/io/vtk_lib_io.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <vector>
#include <iostream>using namespace pcl;
using namespace std;int main()
{// 读取STL文件vtkSmartPointer<vtkSTLReader> reader4 = vtkSmartPointer<vtkSTLReader>::New();reader4->SetFileName("mesh.stl");reader4->Update();// stl 格式 转出到 ply 格式vtkSmartPointer<vtkPolyData> polydata = vtkSmartPointer<vtkPolyData>::New();polydata = reader4->GetOutput();polydata->GetNumberOfPoints();// 保存ply数据vtkSmartPointer<vtkPLYWriter> plyWriter = vtkSmartPointer<vtkPLYWriter>::New();plyWriter->SetFileName("stl2plyData.ply");plyWriter->SetInputConnection(reader4->GetOutputPort());plyWriter->SetFileTypeToASCII();plyWriter->SetColorModeToOff();plyWriter->Update();plyWriter->Write();// 从 ply 格式 转为 pcd 格式PointCloud<PointXYZ>::Ptr cloudPcd(new PointCloud<PointXYZ>());io::vtkPolyDataToPointCloud(polydata, *cloudPcd);// 保存pcd数据io::savePCDFileASCII("ply2PcdData.pcd", *cloudPcd);visualization::PCLVisualizer vis("cloud visualization");vis.getRenderWindow()->GlobalWarningDisplayOff();vis.addCoordinateSystem(5.0);vis.addPointCloud(cloudPcd);while (!vis.wasStopped()){vis.spinOnce();}return 0;
}

二、PLY转化为STL

利用python语言,需要安装numpy-stl安装包。

提供一个用于测试的数据:

通过网盘分享的文件:ply_stl
链接: https://pan.baidu.com/s/1xnO5s2kiUf0Cs35XVyfTHA?pwd=xmax 提取码: xmax

python">import numpy as np
from stl import meshdef read_ply(file_path):with open(file_path, 'rb') as f:header = f.readline()while not header.startswith(b'element vertex'):header = f.readline()vertex_count = int(header.split()[-1])print("vertex_count = ", vertex_count)while not header.startswith(b'element face'):header = f.readline()face_count = int(header.split()[-1])print("face_count = ", face_count)while not header.startswith(b'end_header'):header = f.readline()# 读取顶点数据vertices = []for i in range(vertex_count):header = f.readline()header = header.split()[:3]for j in range(len(header)):vertices.append(float(header[j]))vertices = np.array(vertices).reshape(-1, 3)# 读取面数据faces = []for i in range(face_count):header = f.readline()header = header.split()[1:]for j in range(len(header)):faces.append(int(header[j]))faces = np.array(faces).reshape(-1, 3)return vertices, facesdef create_stl(vertices, faces, output_file):cube = mesh.Mesh(np.zeros(faces.shape[0], dtype=mesh.Mesh.dtype))for i, f in enumerate(faces):for j in range(3):cube.vectors[i][j] = vertices[f[j], :]# save stl filecube.save(output_file)if __name__ == '__main__':vertice, face = read_ply('mesh.ply')print(vertice.shape)print(face.shape)create_stl(vertice, face, 'mesh.stl')

ply数据格式展示


http://www.ppmy.cn/news/1531337.html

相关文章

微服务的优点及在云原生时代的合理落地方式

云计算de小白 那么&#xff0c;微服务到底能给业务带来什么好处&#xff1f;在云原生时代&#xff0c;如何更合理地实现微服务&#xff1f; 架构没有好坏之分&#xff0c;只有适合与不适合。然而&#xff0c;当我们对比微服务架构与单体架构时&#xff0c;可以发现微服务有以…

Xcode 16 上传AppStore遇到第三方库 bitcode 的问题

Xcode 16 上传AppStore遇到第三方库 bitcode 的问题 最近两天更新了Xcode 16&#xff0c;然后正好要发布新版本的App&#xff0c;打包Adhoc没问题&#xff0c;但是上传AppStoreConnect或者TestFlight就不行解决方案参考资料 最近两天更新了Xcode 16&#xff0c;然后正好要发布新…

足球预测模型理论:足球数据分析——XGBoost算法实战

简介&#xff1a;本文将探讨如何使用XGBoost算法进行足球数据分析&#xff0c;特别是足球运动员身价估计。我们将通过实例和生动的语言&#xff0c;解释XGBoost算法的原理和实际应用&#xff0c;帮助读者理解复杂的技术概念&#xff0c;并提供可操作的建议和解决问题的方法。 足…

Android LiveData 数据倒灌

相关类型的文章很多&#xff0c;这里只做个人总结和其余的方法推荐 1.什么是数据倒灌&#xff1f; 所谓的“数据倒灌”&#xff1a;其实是类似粘性广播那样&#xff0c;当新的观察者开始注册观察时&#xff0c;会把上次发的最后一次的历史数据传递给当前注册的观察者。 一方…

汽车信息安全 -- 存到HSM中的密钥还需包裹吗?

目录 1.车规芯片的ROM_KEY 2.密钥加密与包裹 3.瑞萨RZ\T2M的密钥导入 4.小结 在车控类ECU中&#xff0c;我们通常把主控芯片MCU中的HSM以及HSM固件统一看做整个系统安全架构的信任根。 所以大家默认在HSM内部存储的数据等都是可信的&#xff0c;例如CycurHSM方案中使用HSM…

如何在银河麒麟操作系统中关闭IPv6

如何在银河麒麟操作系统中关闭IPv6 1、临时关闭IPv62、永久关闭IPv6方法一&#xff1a;通过sysctl.conf方法二&#xff1a;通过GRUB配置 1、3、 验证IPv6是否已关闭 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在当前的网络环境中&#…

计算机网络第四章——网络层

网络层的主要任务就是把分组从源端传到目的端&#xff0c;为分组交换网上的不同主机提供通信服务。网络层的传输单位是数据报。 网络层的主要功能&#xff1a; 功能一&#xff1a;路由选择与分组转换 功能二&#xff1a;异构网络互联 功能三&#xff1a;拥塞控制 一.SDN 路由…

时序必读论文13|ICLR24 “又好又快”的线性SOTA时序模型FITS

论文标题&#xff1a;FITS: Modeling Time Series with 10k Parameters 开源代码&#xff1a;https://anonymous.4open.science/r/FITS/README.md 前言 FITS&#xff08;Frequency Interpolation Time Series Analysis Baseline&#xff09;这篇文章发表于ICLR2024&#xff…