一種基于stl模型的切片分層方法
【技術領域】
[0001]本發明屬于計算機應用技術領域,具體地說,涉及一種3D打印技術中,基于STL模型的切片分層方法。
【背景技術】
[0002]目前,3D打印領域最常用的打印數據,是通過STL (Stereo Litbography)模型來獲取的。
[0003]具體的,是將一個切片平面與整個STL模型由下至上的相交計算一遍,因而判斷某個三角形面片與切片平面是否相交,需要遍歷整個三角形面片集合,計算出交線之后還要進行交線的有序性排列;但,這種算法中,共邊的三角形面片會進行兩次計算,得到的其實是同一個目標點,計算冗余大。雖然在有些算法中,會對整個模型進行拓撲排序,進而簡化獲取交線之后的排序操作,但是,對整個模型進行拓撲排序,本身的計算量就很大,導致了目前對STL模型進行分層的速度偏慢。
【發明內容】
[0004]本發明提供了一種基于STL模型的切片分層方法,通過對STL文件的三角形面片進行分組排序,對三角形面片進行分組矩陣和活性三角形面片表的建立,在較小的范圍內,建立局部的三角形面片鄰接拓撲信息,能夠獲得較高的切片效率,解決現有技術中分層速度慢的技術問題。
[0005]為解決上述技術問題,本發明采用以下技術方案予以實現:
提出一種基于STL模型的切片分層方法,包括:確定切片分層數目;確定STL模型的每個三角形面片所在的層數;針對每層切片建立分組矩陣,并生成活性三角形面片表;所述分組矩陣中包含切片方向與切片平面相交的三角形面片集合;所述活性三角片表中存儲所述分組矩陣中所有三角形面片的索引號;基于活性三角形面片表,確定每層中各三角形面片的鄰接關系;對每層切片求交后,結合所述鄰接關系生成每層切片對應的輪廓環,以得到完整截面輪廓。
[0006]進一步的,所述確定切片分層數目,具體為:確定分層厚度;根據所述STL模型的高度和所述分層厚度,確定切片分層數目。
[0007]進一步的,所述確定分層厚度,具體為:計算所述STL模型中,每個三角形面片的最小縱向高度和最大縱向高度;根據最大縱向高度與最小縱向高度的差值,計算每個三角形面片的縱向高度;選取最小縱向非零高度作為分層厚度。
[0008]進一步的,所述確定STL模型的每個三角形面片所在的層數,具體為:若三角形面片的最小縱向高度小于第i層切面的高度,而其最大縱向高度大于所述第i層切面的高度,則所述三角形面片處于第i層;其中,所述i為從I開始、小于等于分層數目的整數。
[0009]進一步的,所述確定各三角形面片的鄰接關系,具體為:基于一個三角形面片,確定與其相鄰的三個三角形面片。
[0010]進一步的額,所述生成切面輪廓環,具體為:從第j層切片的活性三角形面片表中的第一個三角形面片開始,計算所述第一個三角形面片與所述第j層切片的交點;根據三角形面片的鄰接關系,找到與所述第一個三角形面片的鄰接三角形面片,并求出其與所述第j層切片的交點;根據三角形面片的鄰接關系,找到與所述鄰接三角形面片的鄰接三角形面片,并求出其與所述第j層切片的交點;根據三角形面片的鄰接關系,直至找到活性三角形面片表中最后一個三角形面片,求出其與所述第j層切面的交點,得到所述切面輪廓環;其中,所述j為從I開始、小于等于分層數目的整數。
[0011]進一步的,在生成切片輪廓環之后,所述方法還包括:去除冗余數據點;保存輪廓環數據;其中所述冗余數據點包括重合點和共線點。
[0012]與現有技術相比,本發明的優點和積極效果是:本發明提出的基于STL的切片分層方法中,首先計算STL模型中所有的三角形面片的縱向高度,手動設定分層厚度,或者選取最小縱向非零高度作為切片分層厚度,根據分層厚度能夠確定分層數目,針對每個分層建立分組矩陣,并生成存儲分組矩陣中所有三角形面片的索引號的活性三角形面片表;分組矩陣中,包含切片方向與切片平面相交的三角形面片的集合;該分組矩陣的建立,降低了對STL模型所有三角形面片位置排序的運算量,而活性三角形面片表的建立,保證了在切片處理過程中,只有活性三角形面片表中的三角形面片參與和切片平面的求交計算,減少了進行三角形面片與切片平面位置關系判斷的次數;根據鄰接關系,尋找活性三角形面片表中每個三角形面片的鄰接三角形面片,能夠縮小搜索比較范圍,有效減少建立拓撲關系的工作量,因此,對于每個與切片平面相交的三角形面片,只需計算一個邊的交點,基于鄰接關系,與三角形面片鄰接的三角形面片可以繼承其一個交點,即兩個相鄰三角形面片的共邊與切片平面的交點只需計算一次,能顯著減少計算量;在切片過程中可直接獲得有向封閉的輪廓環,避免了交線段連接關系的搜索判斷;基于上述改善,本發明提出的方法基于減少的計算量和判斷次數,有效提高了分層速度,解決了現有技術中分層速度慢的技術問題。
[0013]結合附圖閱讀本發明實施方式的詳細描述后,本發明的其他特點和優點將變得更加清楚。
【附圖說明】
[0014]圖1為本發明實施例提出的基于STL模型的切片分層方法流程圖;
圖2為本發明實施例中三角形面片與切片平面的位置關系圖;
圖3為本發明實施例中提出的活性三角形面片表的建立示意圖。
【具體實施方式】
[0015]本發明的設計思路在于,對STL模型整體分組排序,借助活性三角形面片表和鄰接關系,在較小的三角形面片范圍內建立拓撲關系,在此基礎試上再進行切片平面與三角形面片的相交計算,能夠減少切面平面與三角形面片的位置判斷次數,然后對交線進行排序,獲得有序的輪廓環,以便于打印,能夠顯著提升分層速度。
[0016]下面結合附圖對本發明的【具體實施方式】作進一步詳細地說明。
[0017]如圖1所示,為本發明實施例提出的基于STL模型的切片分層方法流程圖,包括如下步驟:
步驟Sll:確定切片分層數目。
[0018]確定切片分層數目是根據分層厚度決定的,確定分層厚度后,根據STL模型的高度和分層的厚度,例如將STL模型的高度與分層厚度相除,可以確定切片的分層數目;而確定分層厚度的依據是:首先計算STL模型中,每個三角形面片的最小縱向高度和最大縱向高度,然后根據最大縱向高度與最小縱向高度的差值得到每個三角形面片的縱向高度,選取所有縱向高度中最小縱向非零高度值作為分層厚度,也即能夠保證即使是具有最小縱向高度的三角形面片,也能夠與切片平面相切;或者,根據實際情況手動設定分層厚度也可。
[0019]步驟S12:確定STL模型的每個三角形面片所在的層數。
[0020]該步驟的目的在于建立分組矩陣,使得每個分組矩陣中包含與一個切片平面相交的所有三角形面片,因此,在此之前,需要確定每一個三角形面片所處的層數。
[0021]假設STL模型的縱向坐標,也即通常所指的Z軸坐標的最小值為零,若不為零,可以通過坐標平移變換成為零,然后根據每個三角形面片的最小縱向高度Zmin來確定其最先出現在哪一層。
[0022]令Zi (i=l,2,...,η)表示第i層切片平面的縱向高度,則與第i層切片平面相切的三角形面片滿足以下關系:z1-l ( Zmin〈Zi且Zmax彡Zi,如圖2中的三角形面片a所示,也即,若三角形面片的最小縱向高度小于第i層切面的高度,而其最大縱向高度大于第i層切面的高度,則該三角形面片處于第i層,這其中,i為從I開始、小于等于分層數目η的整數。
[0023]一些特殊情況的處理如下:當存在滿足Z1-1 ( Zmin<Zmax<Zi或Zi_l〈Zmin=Zmax<Zi的三角形面片時,如圖2所示的三角形面片b,其本身不與切片平面相交,若將其丟棄,會導致模型上微小特征丟失,這也是步驟Sll中選取所有縱向高度中最小縱向高度值作為分層厚度的原因,需要保證分層厚度小于、至少等于最小縱向高度,以實現保留模型上的微小特征。對于Z1-1=Zmin=Zmax或者Zi= Zm