本发明涉及一种基于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)点为起点,连接顶点与起点,并沿逆时针方向遍历整个区域,每个方向设若干点,将整个区域划分为若干个无重合的三角形,其中各边与顶点连接的点可以是均匀设置的,也可以是不均匀的。
最后有必要在此说明的是:以上实施例只用于对本发明的技术方案作进一步详细地说明,不能理解为对本发明保护范围的限制,本领域的技术人员根据本发明的上述内容作出的一些非本质的改进和调整均属于本发明的保护范围。