python读取.stl文件
创始人
2024-05-24 01:27:34
0

目录

.1 文本方式读取 

1.2 stl解析

1.3 stl创建 

 .2 把点转换为.stl

.1 文本方式读取 

代码如下

stl_path='/home/pxing/codes/point_improve/data/003_cracker_box/0.stl'points=[]
f = open(stl_path)
lines = f.readlines()
prefix='vertex'
num=3
for line in lines:#print (line)if line.startswith(prefix):values = line.strip().split()#print(values[1:4])if num%3==0:points.append(values[1:4])num=0num+=1#print(type(line))
print(points)
f.close()

该代码可以直接将stl文件中对点直接都输出

改进版本

import numpy as npstl_path='/home/pxing/codes/point_improve/data/003_cracker_box/0.stl'
points=[]
f = open(stl_path)
lines = f.readlines()
prefix='vertex'
num=3
for line in lines:#print (line)if line.startswith(prefix):values = line.strip().split()#print(values[1:4])if num%3==0:points.append(values[1:4])num=0num+=1#print(type(line))
points=np.array(points)
f.close()
print(points.shape)
np.save("/home/pxing/codes/point_improve/feature_get/point_get/test.npy", points)

把输出的点转换为npy并且保存

1.2 stl解析

.stl文件格式如下图所示:

那么读取该文件就需要知道stl的构成

stl是一种表示三角网格的文件格式

STL只能用来表示封闭的面或者体,stl文件有两种:一种是ASCII明码格式,另一种是二进制格式

ASCII明码格式:

STL文件的首行给出了文件路径及文件名

STL三维模型就是由一系列这样的三角面片构成

三角面片的信息单元 facet 是一个带矢量方向的三角面片

每一个facet由7 行数据组成:

facet normal 是三角面片指向实体外部的法矢量坐标

outer loop 代表随后的3行数据分别是三角面片的3个顶点坐标

3顶点沿指向实体外部的法矢量方向逆时针排列

solid [filename] //文件名,可以是任何字符

facet normal [i j k] //面的法线,i、j、k为三个分量,各分量之间用空格隔开,不能用逗号隔开

outor loop

vertex [x y z] //三角面片的第一个点,x、y、z三个坐标之间要用空格隔开

vertex [x y z] //三角面片的第二个点

vertex [x y z] //三角面片的第三个点

endloop

endfacet //完成一个三角面片的定义

、、、、 //其他facet

endsolid [filename] //完成一个stl文件的定义

示例:

在电脑上新建一个txt文件,然后编辑。编辑完了之后保存,并将文件后缀名改为stl,即可完成一个创建了一个stl文件。如下图,利用文本编辑器将一个四面体的几何数据保存到文件中

效果如下图所示:

1.3 stl创建 

创建一个三角形面片

solid   mystl    
facet   normal  0 -1 0
outor   loop
vertex  -100 0 0 
vertex  100 0 0
vertex  0 0 -100 
endloop
endfacet 
end solid mystl

 .2 把点转换为.stl

import numpy as np
import sys
sys.path.append('/home/pxing/codes/grasp_ROI_get/')
from gripper_area import area_getarr=np.array(area_get.main())
#print(arr[0,0:3])
with open('stl_process/data/test1.stl','a') as file0:print('solid   mystl ',file=file0)print('facet   normal' ,0,0,0,file=file0)print('outor   loop',file=file0)print('vertex',arr[0,0],arr[0,1],arr[0,2 ],file=file0)print('vertex',arr[1,0],arr[1,1],arr[1,2 ],file=file0)print('vertex',arr[2,0],arr[2,1],arr[2,2 ],file=file0)print('endloop\nendfacet',file=file0)print('end solid mystl',file=file0)

相关内容

热门资讯

不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
安卓文字转语音tts没有声音 安卓文字转语音TTS没有声音的问题在应用中比较常见,通常是由于一些设置或者代码逻辑问题导致的。本文将...
APK正在安装,但应用程序列表... 这个问题可能是由于以下原因导致的:应用程序安装的APK文件可能存在问题。设备上已经存在同名的应用程序...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
报告实验.pdfbase.tt... 这个错误通常是由于找不到字体文件或者文件路径不正确导致的。以下是一些解决方法:确认字体文件是否存在:...