matlab讀取stl文件並顯示
讀取stl文件
matlab已經包含一個函數stlread()專門用於讀入stl文件。相關幫助如下:
stlread
從 STL 文件創建三角剖分全頁折疊
語法
TR = stlread(filename)
[TR,fileformat,attributes,solidID] = stlread(filename)
說明
示例
TR = stlread(filename) 返回 triangulation 對象 TR,其中包含 STL 文件中定義的三角形。
[TR,fileformat,attributes,solidID] = stlread(filename) 返回 filename 的文件格式、屬性(文件為二進制時)以及實體標識號(文件為文本時)。
示例
全部折疊
從 STL 文本文件中讀取三角剖分
根據文件 tristltext.stl 中包含的數據創建並繪制 triangulation 對象。
TR = stlread('tristltext.stl');
triplot(TR)
輸入參數
全部折疊
filename - STL 文件名
字符向量 | 標量 string
STL 文件名,指定為字符向量或標量 string。文件名必須以 .stl 或 .STL 擴展名結尾。如果文件包含退化三角形,則 stlread 會自動刪除它們。
示例: 'stltextfile.stl'
輸出參數
全部折疊
TR - 三角剖分
triangulation 對象
三角剖分,以 triangulation 對象形式返回。
fileformat - 文件格式
'binary' | 'text'
文件格式,以 'binary' 或 'text' 返回。
attributes - 二進制屬性
uint16 向量
二進制屬性,以 uint16 向量形式返回。當輸入文件是二進制時,attributes 包含有關三角形的編碼信息。它的長度等於三角剖分中的三角形數量。如果輸入文件是文本文件,則 attributes 是空數組。
solidID - 實體分組索引
向量
實體分組索引,以標識號的向量形式返回。當輸入文件是文本文件時,標識號將每個三角形分配到三角剖分中的一個三角形分組中。當輸入文件是二進制時,solidID 包含所有文件。solidID 的長度等於三角剖分中的三角形數。
數據類型: double
另請參閱
triangulation
在 R2018b 中推出
顯示stl文件內容
stlread函數的返回結果包含兩部分內容:
- 所有點三維坐標,是一個n行3列矩陣。
- 三角剖分的三角面頂點序號,每個序號對應第一部分中的一個點。
這兩部分剛好和patch函數直接對接,因此顯示stl文件的內容就使用patch了
具體為:
patch('Faces',F,'Vertices',V) 創建一個或多個多邊形,其中 V 指定頂點的值,F 定義要連接的頂點。當有多個多邊形時,僅指定唯一頂點及其連接矩陣可以減小數據大小。為 V 中的每個行指定一個頂點。要創建一個多邊形,請將 F 指定為向量。要創建多個多邊形,請將 F 指定為矩陣,其中一行對應於一個多邊形。不要求每個面都具有相同的頂點數。要指定不同數量的頂點,請以 NaN 值填充 F。
指定面和頂點
通過指定每個唯一頂點的坐標和定義如何連接這些頂點的矩陣,創建一個多邊形。然后,繼續將兩個多邊形添加到圖窗中。
創建一個紅色正方形,四個角分別位於 (0,0)、(1,0)、(1,1) 和 (0,1)。指定 v 以使每行定義一個頂點的 (x,y) 坐標。然后,將 f 指定為要連接的頂點。通過指定 FaceColor 屬性來設置顏色。
v = [0 0; 1 0; 1 1; 0 1];
f = [1 2 3 4];
patch('Faces',f,'Vertices',v,'FaceColor','red')
通過將 f 指定為兩行矩陣來創建兩個多邊形。每一行定義一個補片的面。
v2 = [2 4; 2 8; 8 4; 5 0; 5 2; 8 0];
f2 = [1 2 3;
4 5 6];
patch('Faces',f2,'Vertices',v2,'FaceColor','green')
小結
利用matlab的stlread函數讀入stl文件,利用patch函數顯示stl文件。
遺憾的是stl文件沒有顏色,必須自己指定。