通过数控加工程序代码快速生成三维曲面模型的方法
技术领域
本发明涉及通过数控加工程序代码快速生成三维曲面模型的方法。
背景技术
数控机床是一种装有程序控制系统的自动化机床。该控制系统能够逻辑地处理具有控制编码或其他符号指令规定的程序,并将其译码,从而使机床动作并加工零件。操作人员通过数控装置可在加工零件前预览模型,该模型表面是根据加工时刀具形状、走刀方向、工件形状等切削条件计算出曲面关键点,并以这些理论上精确的点经过计算生成的。目前在数控机床系统中由离散的数据点生成三维曲面的方法有:1.NURBS曲面拟合的方法,通过曲面上离散的点,反求NURBS的控制点和节点法向量;2.利用三角剖分的方法,得到最优三角网,由三角网格生成曲面。第一种方法精度高,曲面光滑度好,但是反求和曲面拼接过程复杂,需要大量计算,不适快速图形显示;第二种方法生成的近似曲面光滑度比前者差,算法复杂度高,对于快速显示处理速度不理想。
发明内容
本发明所要解决的技术问题是提供一种通过数控加工程序代码的分析和处理生成三维曲面模型的方法,以克服现有由离散的数据点生成曲面的方法的不足,快速生成三维曲面模型,使数控加工操作人员在程序运行之前能够便捷地预览加工效果,方便对数控加工代码检查修改和对机床的调整。
本发明的问题是以下技术方案实现的:
通过数控加工程序代码快速生成三维曲面模型的方法,其步骤如下:
a.读取数控加工程序代码,取出刀轨移动坐标点,将坐标点的X、Y、Z值保存到一个一维数组M[N]中,数组的长度N为数控加工程序代码中坐标点的数量;
b.计算出数组M中X、Y坐标的最大值和最小值,得到X和Y坐标的尺寸范围Xrang和Yrang;设定一个曲面显示精度常数C,根据X、Y坐标的尺寸范围和曲面显示精度,创建生成一个二维数组float P[Lx][Ly],这个二维数组中的数组元素总数量L=Lx*Ly,其中Lx与Ly为该数组的尺寸,Lx=Xrang/C;Ly=Yrang/C,均取为整数;用数组M中的Z坐标的最大值来填充整个数组P作为初值,此坐标值相当于被加工物体的表面高度值;由此便获得了一个由二维数组P定义的XY平面上的网格;
c.从数组M中依次取出两个相邻的坐标点A和B,根据步骤b所得到的网格所定义的区块范围对线段AB进行划分以获得若干插值点,所述插值点是通过先求出线段AB在XY平面上的投影直线与由数组P所定义的二维网格的各个交点的X、Y坐标,再根据交点的X、Y坐标得到的;将线段AB的端点和各插值点的Z坐标分别填充到数组P中与各点X、Y坐标相对应的数组元素中;反复执行以上过程,对数组P中所有元素进行填充,在填充的过程中对于已经填充过的数组元素,如果通过插值点所计算出的Z坐标数值比当前数组元素的值要小,则用所计算出的数值替换这个数组元素;如果所计算出的数值大于或等于当前的数组元素,则不进行替换;没有被填充的数组元素保留为初始值,即刀轨加工过程中的最大值;这样数组P中每个数组元素对应一个Z坐标,由此获得由二维数组P定义的一组空间点阵列所描述的曲面模型;
d.将步骤c生成的点阵列中每相邻的三个数据点构成一个三角面,按照法向量的定义计算所有三角面的法向量;
e.初始化所有三角形顶点法向量,取以该点为顶点的所有三角形的面法向量,累加至该点法向量中,最后将所有顶点法向量归一化,只保留向量的方向信息,忽略长度信息;
f.将步骤d得到的三角面数据和步骤e得到的各顶点法向量的数据输入OpenGL或Direct3D三维图形函数库中进行渲染,实现三维图形的显示。
上述通过数控加工程序代码快速生成三维曲面模型的方法,所述一维数组M[N],其中每个元素包含X、Y、Z三个坐标值,为复合类型元素。
上述通过数控加工程序代码快速生成三维曲面模型的方法,所述曲面显示精度常数C,是由用来进行零件加工的刀具直径和形状所决定的,可以由系统的使用者根据所使用刀具的实际情况和对显示效果的要求来设定或修改。
本发明与现有技术相比所具有的优点为,1.处理速度快,使用线性插值的方法,既满足了视觉上的要求,又使处理速度加快;2.显示效果好,使用OpenGL或Direct3D实现3D效果,可以模拟各种材质,采用纹理映射使物体真实感很强,采用显示列表技术,加快显示速度,用户移动观察角度时非常流畅;3.用途广泛,可以应用在数控机床图形编程系统中,也可以集成在数控系统中对数控加工代码进行检测等。
附图说明
下面结合附图和实施方式对本发明作进一步的详细说明:
图1为本发明的实现原理流程图;
图2为本发明中按照网格区域对直线段进行插值的示意图;
图3为本发明中将网格划分为若干三角形的示意图。
具体实施方式
如图1所示是本发明的实现原理流程图,发明中生成三维曲面模型的具体方法为:
步骤1解析数控加工程序代码,取出刀轨移动坐标点。将坐标点(X,Y,Z)保存到一个一维数组M[N]中,其中每个数组元素包含X、Y、Z三个坐标值,为复合类型元素,数组的长度N为数控加工程序代码中坐标点的数量。
步骤2设定一个曲面显示精度常数C,计算出数组M中X、Y坐标的最大值和最小值,得到X和Y坐标的尺寸范围Xrang和Yrang,根据X、Y坐标的尺寸范围和曲面显示精度,创建一个二维数组float P[Lx][Ly]。
其中:曲面显示精度常数C是一个数控系统的全局参数,是由用来进行零件加工的刀具直径和形状所决定的,可以由系统的使用者根据所使用刀具的实际情况和对显示效果的要求来设定或修改;Lx与Ly为该数组的尺寸,Lx=Xrang/C,Ly=Yrang/C,均取为整数;这个二维数组中的数组元素的总数量L=Lx*Ly。
再利用步骤1读取到数组M中的Z坐标的最大值来填充整个数组P作为初值,此坐标值相当于被加工物体的表面高度值。由此便获得了一个由二维数组P定义的XY平面上的网格。
步骤3根据网格对数控加工代码中的数据进行插值并填充二维网络,获得曲面数据。如图2所示,从数组M中依次取出两个相邻的坐标点A和B,进行线性插值。首先求出线段AB在XY平面上的投影直线与由数组P所定义的二维网格的各个交点的X、Y坐标,再根据交点的X、Y坐标得到线段AB上的各插值点。将线段AB的端点和各插值点的Z坐标分别填充到数组P中与各点X、Y坐标相对应的数组元素中。
反复执行以上过程,对数组P中所有元素进行填充。在填充的过程中对于已经填充过的数组元素,如果通过插值点所计算出的Z坐标数值比当前数组元素的值要小,则用所计算出的数值替换这个数组元素;如果所计算出的数值大于或等于当前的数组元素,则不进行替换。没有被填充的数组元素保留为初始值,即刀轨加工过程中的最大值,这样数组P中每个数组元素对应一个Z坐标,由此获得由二维数组P定义的一组空间点阵列所描述的曲面模型。
步骤4计算网格中所有三角面的法向量。如图3所示,设V1(x1,y1,z1),V2(x2,y2,z2),V3(x3,y3,z3)为三角形的三个顶点,由V1,V2,V3三点形成三个向量:向量V1V2,向量V1V3和向量V2V3,则V1V2(x2-x1,y2-y1,z2-z1),V1V3(x3-x1,y3-y1,z3-z1),V2V3(x3-x2,y3-y2,z3-z2)。设三角面的法向量坐标是(x,y,z),根据法向量定义有:
根据步骤3得到的曲面数据,取其中任一三角面的三个顶点坐标,便可用以上方程组解出平面法向量的坐标x,y,z,得到三角面的法向量
步骤5计算网格各顶点的法向量。顶点法向量是与之相邻的所有三角面的法向量的平均值,其计算方法如下:
初始化所有三角形顶点法向量为
取以该点为顶点的所有三角形的法向量,累加至该点法向量中:
最后所有顶点法向量归一化,保留向量的方向信息,即:
步骤6最后将步骤4得到的三角面数据和步骤5得到的各顶点法向量的数据输入OpenGL或Direct3D三维图形函数库中进行渲染,实现三维图形的显示。
本发明的方法可以通过数控系统或个人电脑上的软件实现,作为一个独立的模块应用在数控图形编程系统中,可以对生成的加工代码进行实时的显示,方便对加工代码检查修改和对机床的调整。