一種基於Grid模型的STL模型建模方法與流程
2023-09-12 22:44:45 1
本發明涉及一種基於Grid模型的STL模型建模方法,具體為基於Grid模型的STL模型建模方法,屬於地理信息技術轉換領域。
背景技術:
數字高程模型(Digital Elevation Model),簡稱DEM,是通過有限的地形高程數據實現對地形曲面數位化模擬(即地形表面形態的數位化表達)它是用一組有序數值陣列形式表示地面高程的一種實體地面模型,是數字地形模型(Digital Terrain Model,簡稱DTM)的一個分支。Grid模型即規則格網模型,是表徵地形表面的重要存儲模式,也是當前數字高程模型主流表現形式之一。該模型是將區域空間切分為規則的格網單元,每個格網單元對應一個高程數值,已廣泛應用於城市規劃與管理、軍事戰術戰略指揮等領域。ESRI Grid格式為美國ESRI公司目前表徵Grid規則格網模型的最為常見格式之一。
Grid模型(如圖1a所示)具有規則的行列間距相等的格網,行列數分別為ncols和nrows;每個格網單元(cellsize,單元格大小)對應一個高程值(h)。其中,ESRI Grid文件格式是ArcGIS軟體官方的柵格數據存儲模式,其結構包括文件頭格式和數據格式,柵格的空間位置由左下角像元的位置決定。文件頭格式是由關鍵字和配對的信息組成,數據格式部分在文件頭後面,各像元值由空格分隔。ESRI Grid模型的數據文本呈現如下面數據示例。
數據示例:
STL(Stereo lithography)模型即三維實體模型,實體模型是在三角形所確定三個數據點數據的基礎上,由一組通過空間位置,在不同平面內的線相互連接而成,實體模型是建立三維模型的基礎。三維實體模型可通過三角化處理得到3D列印模型。該模型的文件格式是美國3D SYSTEM公司於1988年制定的接口協議,已發展成當前工業界主流標準。由於STL構模簡單、易理解,用三角網表示3D列印模型,可廣泛應用於快速成形、虛擬實境、數控加工、有限元分析等3D列印技術領域。
STL模型(圖1b)是一種用許多空間小三角面片(三角網)逼近三維實體表面的數據模型,STL模型的數據通過給出組成三角形法向量的3個分量(用於確定三角面片的正反方向)及三角形的3個頂點坐標來實現。STL模型表現為STL數據文件格式,一個完整的STL文件記載了組成實體模型的所有三角形面片的法向量數據和頂點坐標數據信息。每個三角形頂點的排列順序遵循右手法則。目前STL文件分為ASCII明碼格式和二進位格式兩種。
所述STL模型的存儲ASCII格式如下:
其中:①為自定義文件頭;②為三角面片法向量的三個分量值;④為三角面片三個頂點的坐標;⑧為完成一個三角面片定義。
當前,Grid模型不能被主流的3D列印設備生產商所支持,不能直接3D列印。現有已公開的中國專利CN105479742A中公開的基於NSDTF-DEM數據的紙基3D列印方法,其中公開的轉換方式是基於特定的第三方軟體來實現轉換生成模型,並僅能夠進行紙基3D列印,不具有通用性。因此,開發一種能夠轉換2D模型數據至3D模型數據的通用轉換方法是本領域轉換時亟待解決的問題。
技術實現要素:
針對現有技術存在的上述問題,本發明的目的是提供一種。
為實現上述發明目的,本發明採用的技術方案如下:
基於Grid模型的STL模型建模方法,通過轉換Grid模型並建立六面綜合牆,生成三角網後輸出STL模型,連接3D印表機即可列印該STL模型。
優選的,基於Grid模型的STL模型建模方法包括如下步驟:
a.讀取Grid模型,以左下角坐標為起始坐標,從左到右、從下往上讀取至右上角高程點,同時以格網單元間隔(cellsize)讀取高程值和計算坐標點值,並寫入對應數組;
b.模型尺度轉換,將Grid模型的地理坐標及高程值按比例縮放,列印模型坐標;
c.粗胚STL模型建模,對Grid模型進行立體式抬升,建立南牆、北牆、東牆及西牆四側牆,與底部及地表面構成六個綜合牆;
d.按照右手法則,構建側牆三角網,側牆邊緣相鄰兩頂點及其對應底部頂點兩兩連接,形成兩個三角形;
e.根據右手法則構建底部三角網及地表面三角網;
f.以Grid模型左下角為起點,從左到右、從下往上依次生成三角面,建立STL模型。
優選的,讀取Grid模型時,讀取信息包括地理坐標點值及高程值,Grid模型左下角坐標為原點坐標(xllcorner,yllcorner),行列數分別為nrows和ncols,讀取過程依次從原點坐標第一行開始從左向右,從下往上進行,直到最右上角高程點;每間隔單元(cellsize)獲取一個高程點,該高程點坐標可通過計算得到(xllcorner+n*cellsize,yllcorner+n*cellsize)。
將所有高程點的坐標及高程值,按照所述的讀寫順序分別寫入,用於存儲X坐標數組(xList[nrows*ncols])、Y坐標數組(yList[nrows*ncols])、和高程值數組(hList[nrows*ncols])。
優選的,模型尺度轉換步驟具體為:計算地理坐標點值的縮放比例因子,計算出列印X軸和Y軸坐標,設置基準高,計算出高程的縮放比例因子,計算出列印Z軸坐標,
已知Grid模型地理坐標區域範圍(minLon,minLat,maxLon,maxLat),高程數組hList[nrows*ncols],STL 3D列印模型的胚具規格(Length*width*height),求解該兩模型間的尺寸轉換過程:
①、計算兩模型間在X和Y軸上的縮放比例因子:
scaleX=(maxLon-minLon)/Length;
scaleY=(maxLat-minLat)/Width;
②、設置基準高(BaseHeight),作為列印模型的基座:
BaseHeigth=heigth/4;//取經驗值height/4
③、計算兩模型間在Z軸上的縮放比例因子:
graph=hList.Max-hList.Min;//高程最大值與最小值差
scaleZ=graph/(height-BaseHeight);
④、計算列印模型的坐標:
X=(lon-minLon)/scaleX;//X---列印模型X軸坐標
Y=(lat-minLat)/scaleY;//Y---列印模型Y軸坐標
Z=BaseHeight+(h-hList.Min)/scaleZ。
更優選的,立體式抬升Grid模型時,以基準高為抬升尺度。
更優選的,構建側牆三角網時,南牆三角面頂點為逆時針方向排列,北牆三角面頂點為順時針方向排列,圖4a中,南牆a、b、z和w四相鄰頂點(即高程點),其中a和b為地表面最南邊緣的兩個頂點,z和w為對應底部頂點,a和b連接線L1,a和z連接線L2,b和w連接線L3,b和w連接線L4。生成STL模型,新增b和z的連接線L0,繼而形成兩個三角形S1(a、b、z)和S2(b、z、w)。
以S1(a、b、z)為例,求解該三角形的法向量,遵循以下計算步驟:
var ab:Object=new Object;
ab.x=a.x-b.x;
ab.y=a.y-b.y;
ab.h=a.h-b.h;
var bc:Object=new Object;
bz.x=b.x-z.x;
bz.y=b.y-z.y;
bz.h=b.h–z.h;
然後計算法線,即另一個向量。求該三角形的法向量(norm):
var norm:Object=new Object;
norm.x=(ab.y*bz.h)-(ab.h*bz.y);
norm.y=-((ab.x*bz.h)-(ab.h*bz.x));
norm.z=(ab.x*bz.y)-(ab.y*bz.x);
北牆(圖4b)、東牆(圖4a)和西牆(圖4b)類同。
更優選的,底部三角網構建時,以左下角(0,0,0)點為起始點,對角兩條相鄰邊上各點為終點,按順時針方向依次連接起始點與各點,形成若干三角形,以相鄰邊上第一個連接點及最後一個連接點各自為起始點,連接(0,0,0)點鄰邊上各點,形成若干反向三角形,所有的三角形間均無重疊。
更優選的,底部三角網構建時,以區域內非邊界點的任一點為起始點,按逆時針方向連接邊界各點,形成若干不重疊的三角形。
更優選的,構建地表三角網時,以四個相鄰高程點為端點形成三角形,連接時兩點間高程差大於等於另兩點的高程差。
將Grid模型轉換和生成STL模型的三角網:以Grid模型左下角(原點)為起始點,從左到右(橫軸),從下到上(縱軸),依次生成三角面;與此同時,根據STL模型的右手法則,嚴格依照順序,記錄該三角面的三個頂點和求得其法向量;藉助編程,創建一個讀寫函數,按照表徵STL模型的存儲規則(ASCII格式),輸出並保存成*.stl文件格式。
與現有技術相比,本發明採用的方法通過分析STL模型和Grid模型的結構特徵,以ESRI Grid模型為切入,藉助計算機編程,實現Grid模型向STL模型的轉換與生成。該方法有效解決了當前Grid模型無法直接生成3D列印模型的問題,有效擴展了二維地形圖的立體實物呈現,極大提升了其應用價值,特別是軍事領域及地理測繪分析領域。
總之,本發明提供的方法所生成的3D列印模型精緻、效果較好,可直接列印成3D地形模型。該轉換與生成方法,可為其它數字高程模型(如HGT模型、TIN模型)轉換與生成STL列印模型提供有益方法借鑑。
附圖說明
圖1是本發明提供的轉換生產方法的流程圖。
圖2是本發明提供的轉換生產方法的Grid模型高程點讀取過程示意圖。
圖3是本發明提供的轉換生產方法的粗胚級STL模型生成示意圖。
圖4是本發明提供的轉換生產方法的牆面三角網生成示意圖。
圖5是本發明提供的轉換生產方法的底部三角網生成示意圖。
圖6是本發明提供的轉換生產方法的地表面三角網生成示意圖。
具體實施方式
下面結合實施例及對比例對本發明作進一步詳細、完整地說明。
實施例1
圖1為本發明的基於Grid模型的STL模型建模方法流程圖,如圖所示,本方法包括如下步驟:
(1)讀寫步驟:讀寫步驟用於Grid模型的數據文件讀取。以下為ESRI Grid數據存儲文件為本發明方法的實施例,圖2為該案例可視化所呈現的Grid模型。按照圖中讀取規則,以箭頭指示方向為讀取方向,讀取並計算出每個高程點的坐標(x,y)及高程值(h),並分別寫入xList[25],yList[25]和hList[25]數組。
在本實施例中,可編程讀取下列基礎參數:
ncols=5,nrows=5,cellsize=2,xllcorner=2.0,yllcorner=5,hList等。進而可得到該Grid模型地理坐標區域範圍:(2.02.012.0,12.0),高程數據hList[25]如下:
高程數組:hList[25]={10.0,10.0,10.0,10.0,10.0,
10.0,20.0,20.0,20.0,10.0
10.0,20.0,40.0,20.0,10.0,
10.0,20.0,20.0,20.0,10.0,
10.0,10.0,10.0,10.0,10.0};其中hList.Max=40;hList.Min=10;
通過公式(xllcorner+n*cellsizeyllcorner+n*cellsize)計算,其中n=0~4,分別得到:
X數組:xList[25]={2.0,4.0,6.0,8.0,10.0//Grid模型X軸坐標
2.0,4.0,6.0,8.0,10.0
2.0,4.0,6.0,8.0,10.0
2.0,4.0,6.0,8.0,10.0
2.0,4.0,6.0,8.0,10.0};
Y數組:yList[25]={2.0,2.0,2.0,2.0,2.0//Grid模型Y軸坐標
4.0,4.0,4.0,4.0,4.0
6.0,6.0,6.0,6.0,6.0,
8.0,8.0,8.0,8.0,8.0,
10.0,10.0,10.0,10.0,10.0}。
(2)建模步驟:該步驟用於Grid模型至STL模型的轉換與生成。該步驟具體子步驟為:
第一步:模型尺度轉換。本實施例中,3D列印胚模具的規格[5*5*5],將Grid模型的高程點坐標及其高程值,根據以下步驟和公式,轉換至新的模型尺寸,形成新的坐標點數組。
①、計算兩模型間在X和Y軸上的縮放比例因子:
scaleX=(12-2)/5=2;
scaleY=(12-2)/5=2;
②、設置基準高(BaseHeight),作為列印模型的基座:
BaseHeigth=5/4=1.25;//取經驗值height/4
③、計算兩模型間在Z軸上的縮放比例因子:
graph=40-10=30;//高程最大值與最小值差
scaleZ=30/(5-1.25)=8;
④、計算列印模型的坐標:
X=(lon-2)/2;//X---列印模型X軸坐標
Y=(lat-2)/2;//Y---列印模型Y軸坐標
Z=1.25+(h-10)/8;
H3List[25]={1.25,1.25,1.25,1.25,1.25//列印模型Z軸坐標
1.25,2.50,2.50,2.50,1.25,
1.25,2.50,3.75,2.50,1.25,
1.25,2.50,2.50,2.50,1.25,
1.25,1.25,1.25,1.25,1.25};
X3List[25]={0.0,1.0,2.0,3.0,4.0//列印模型X軸坐標
0.0,1.0,2.0,3.0,4.0
0.0,1.0,2.0,3.0,4.0
0.0,1.0,2.0,3.0,4.0
0.0,1.0,2.0,3.0,4.0};
Y3List[25]={0.0,0.0,0.0,0.0,0.0//列印模型Y軸坐標
1.0,1.0,1.0,1.0,1.0
2.0,2.0,2.0,2.0,2.0,
3.0,3.0,3.0,3.0,3.0,
4.0,4.0,4.0,4.0,4.0}。
第二步:粗胚級STL模型生成。如圖3所示,以基準高(BaseHeigth=1.25)為尺度,對Grid地表模型進行立體式抬升,作為列印模型的基座,進而形成粗胚級)STL模型,即未生成三角面的STL模型。該模型生成了六個綜合牆,即南牆、北牆、東牆、西牆、底部、地表面等六個綜合牆(面)。
第三步:牆面三角網生成。如圖4a所示,遵循右手法則,構建南牆三角面的三個頂點排列順序為逆時針方向。在圖4a中,南牆a、b、z和w四相鄰頂點(即高程點),其中a和b為地表面最南邊緣的兩個頂點,z和w為對應底部頂點,a和b連接線L1,a和z連接線L2b和w連接線L3,b和w連接線L4。生成STL模型,新增b和z的連接線L0,繼而形成兩個三角形S1(a、b、z)和S2(b、z、w)。
以S1(a、b、z)為例,其中a(2,0,1.25)、b(1,0,1.25)和z(1,0,0),求解該三角形的法向量,遵循以下步驟:
var ab:Object=new Object;
ab.x=2–1=1;
ab.y=0–0=0;
ab.h=1.25–1.25=0;
var bc:Object=new Object;
bz.x=1-1=0;
bz.y=0-0=0;
bz.h=1.25–0=1.25;
計算該三角形的法向量。求該三角形的法向量(norm):(0,0,0)
varnorm:Object=newObject;
norm.x=(0*1.25)-(0*0)=0;
norm.y=-((1*0)-(0*0))=0;
norm.z=(1*0)-(0*1)=0;
北牆(圖4b)、東牆(圖4a)和西牆(圖4b)類同。
第四步:底部三角網生成。本實施例選擇「底部無需新增點」方案。在附圖5(b)中,左下角為底部原點和起點,按照順時針方向,發射狀連接斜對面(頂)點,形成「射式」三角網,形成附圖(b)中的第1、2、3、4、5、6等六個三角形,然後以斜上角第一個(頂)點為起點,順時針方向「射狀式」連接其右斜對面的(頂)點,形成附圖(b)中的第7、8、9、10等四個三角形。同理,以斜下角第一個(頂)點為起點,順時針方向「射式」連接其左斜對面的(頂)點,形成圖(b)中的第11、12、13、14等四個三角形。
第五步:地表面三角網生成。在附圖6中,四個相鄰頂點a、b、c和d,若a點與c點高程差大於等於d點與b點高程差,則是a和c的連線,進而形成△adc和△cba兩個三角形(圖6a);若a點與c點高程差小於d點與b點高程差,則是b和d的連線,進而形成△dcb和△adb兩個三角形(圖6b)。
(3)輸出步驟:將Grid模型轉換和生成STL模型的三角網以ASCII格式輸出,並輸出並保存成*.stl文件格式。如下圖S1(abz)片段。最終生成效果見圖1b。
實施例2
本實施例與實施例1的區別僅在於,本實施例中的第四步:底部三角網生產與實施例1不同。
本實施例中選擇新增點方案,如附圖5(a)所示,在區域內非邊界處選擇任意一點為頂點,左下角(0,0,0)點為起點,連接頂點與起點,並沿逆時針方向遍歷整個區域,每個方向設若干點,將整個區域劃分為若干個無重合的三角形,其中各邊與頂點連接的點可以是均勻設置的,也可以是不均勻的。
最後有必要在此說明的是:以上實施例只用於對本發明的技術方案作進一步詳細地說明,不能理解為對本發明保護範圍的限制,本領域的技術人員根據本發明的上述內容作出的一些非本質的改進和調整均屬於本發明的保護範圍。