[英]STL file to a readable text file
我現在正在研究 3d 模型(stl 文件等)以及它是如何從頭開始制作的。 我需要使用什么軟件來查看 stl 文件中的內容,如下所示:
solid dart
facet normal 0.00000E+000 0.00000E+000 -1.00000E+000
outer loop
vertex 3.10000E+001 4.15500E+001 1.00000E+000
vertex 3.10000E+001 1.00000E+001 1.00000E+000
vertex 1.00000E+000 2.50000E-001 1.00000E+000
endloop
endfacet
endsolid dart
我一直在尋找這些類型的軟件,但到目前為止,沒有運氣。
STL 文件有 ASCII 格式和二進制格式。 大多數 STL 文件是二進制格式,不能作為文本打開。 要更改格式,可以使用 CAD 程序(在“另存為”中更改選項)。
在ASCII格式中,表示如下:
solid dart
facet normal 0.00000E+000 0.00000E+000 -1.00000E+000
outer loop
vertex 3.10000E+001 4.15500E+001 1.00000E+000
vertex 3.10000E+001 1.00000E+001 1.00000E+000
vertex 1.00000E+000 2.50000E-001 1.00000E+000
endloop
endfacet
endsolid dart
因此,只有 ASCII 格式允許手動檢查頂點坐標。
MeshLab ( http://www.meshlab.net ) 是一種廣泛使用的 3D 模型開源查看器,可以很好地處理所有 STL 變體(以及許多其他 3D 文件)。 適用於 mac/win/linux
還有一個在線版本可以在您的瀏覽器中運行http://www.meshlabjs.net
numpy-stl 做你想做的事:
from stl import mesh
your_mesh = mesh.Mesh.from_file('3dtest.stl')
your_mesh.save('3dascii.stl',mod=stl.Mode.ASCII)
但是,如果您希望它通過二進制轉換來完成,我在 python3 上編寫的簡單代碼參考: https://www.fabbers.com/tech/STL_Format#Sct_binary
import struct
def ffb(x):
return str(round(struct.unpack('f',x)[0],6))
f=open('3dtest.stl','rb')
print(f.read(84))
temp=''
for j in range(4):
temp='facet normal: '
for i in range(3):
temp=temp+ffb(f.read(4))+' '
print (temp)
for n in range(3):
temp='vertex: '
for i in range(3):
temp=temp+ffb(f.read(4))+' '
print (temp)
attr=f.read(2)
print('###################################')
f.close()
temp=temp[:-1]
print(temp)
結果:
b'MESH-MESH-MESH-MESH-MESH-MESH-MESH-MESH-MESH-MESH-MESH-MESH-MESH-MESH-MESH-MESH\n\x0c\x00\x00\x00'
facet normal: 0.0 1.0 0.0
vertex: 12.671906 11.296659 0.0
vertex: -11.984282 11.296659 0.0
vertex: -11.984282 11.296659 10.0
###################################
facet normal: 0.0 1.0 -0.0
vertex: 12.671906 11.296659 0.0
vertex: -11.984282 11.296659 10.0
vertex: 12.671906 11.296659 10.0
###################################
facet normal: 1.0 0.0 0.0
vertex: 12.671906 -10.8055 0.0
vertex: 12.671906 11.296659 0.0
vertex: 12.671906 11.296659 10.0
###################################
facet normal: 1.0 0.0 0.0
vertex: 12.671906 -10.8055 0.0
vertex: 12.671906 11.296659 10.0
vertex: 12.671906 -10.8055 10.0
###################################
相同的二進制 STL 通過 numpy-stl 轉換為文本:
solid MESH-MESH-MESH-MESH-MESH-MESH-MESH-MESH-MESH-MESH-MESH-MESH-MESH-MESH-MESH-MESH
facet normal 0,000000 246,561890 0,000000
outer loop3
vertex 12,671906 11,296659 0,000000
vertex -11,984282 11,296659 0,000000
vertex -11,984282 11,296659 10,000000
endloop
endfacet
facet normal 0,000000 246,561890 -0,000000
outer loop
vertex 12,671906 11,296659 0,000000
vertex -11,984282 11,296659 10,000000
vertex 12,671906 11,296659 10,000000
endloop
endfacet
facet normal 221,021591 0,000000 0,000000
outer loop
vertex 12,671906 -10,805500 0,000000
vertex 12,671906 11,296659 0,000000
vertex 12,671906 11,296659 10,000000
endloop
endfacet
facet normal 221,021591 0,000000 0,000000
outer loop
vertex 12,671906 -10,805500 0,000000
vertex 12,671906 11,296659 10,000000
vertex 12,671906 -10,805500 10,000000
endloop
endfacet
numpy-stl 代碼:
from stl import mesh
your_mesh = mesh.Mesh.from_file('3dtest.stl')
your_mesh.save('3dascii.stl',mod=stl.Mode.ASCII)
我建議您通過任何語言或渲染器將 3d 繪圖放在一個循環中。 將錯誤轉發到 >/dev/null 並編輯文件以查看實時發生的情況。 我認為那將是最好的研究。 當然,在 window 上檢查各種幾何形狀的樣本 output stls 時。
您可以使用我制作的開源 STL-Viewer 軟件。 它支持二進制和 ASCII 格式的 STL 文件。 這是鏈接: https : //github.com/batu92k/STL-Viewer
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.