当前位置:MFC金属板材成形网 > 正文

三维钣金STL三维数据显示平台的软件开发

2020-02-28 10:03:56 来源: 轻工科技
收藏
导读: 【摘 要】 利用VC++ 6.0编程软件和OpenGL图形显示处理技术、对钣金类零件进行三维重构方法的研究,实现基于 OpenGL的钣金STL数据三维显示平台的开发。软件平台可以读取STL三维数据,并进行数据转换,以及显示、旋转、平移等图形操作 功能。提供数据接口,方便二次开发,利于科研生产等虚拟显示平台的进一步使用。 【关键词】 VC++ 6.0;OpenGL;STL数据;三维显示平台

1 前言


钣金三维数据显示平台是机械生产中的一个细分——钣金 加工制造自动化软件研发的重要方向,也是钣金加工设计软件 的基础平台,是该工业领域研究的核心技术,在钣金产品图形化 设计、分析、仿真领域应用广泛。同时,该技术也可以被广泛的 应用于其他行业如:家具制造行业、传统制衣行业、机器人运动 仿真开发、科学计算求解器等其他的数字化计算机图形领域[1]。


本文利用面向对象的VC 6.0++,一款集成化、可视化的编程 软件平台进行基于windows平台下的基础应用程序框架部分的 软件编写和模块搭建。结合目前主流的图形开发程序开发包 OpenGL,进行相关的编程,实现了钣金STL数据的三维显示平 台开发。


2 系统构成


三维钣金STL三维数据显示平台的软件基于OpenGL图形 开发库,具有钣金STL数据读取模块、钣金STL数据显示模块、 图形变换模块等几部分组成,具体如图1所示。主要编程环境是 VC++ 6.0,图形显示技术采用了OpenGL,并且调用了其中的图 像变换函数,完成图像的显示、变换等功能。




3 STL数据简介和数据读取


3.1 钣金三维STL数据


在三维数字化图形设计领域,对于三维显示的格式选择尤 为重要,三维设计软件的厂家很多都利用自己的软件市场优势, 各自在不同的领域有所特长,并推广自己的数据格式。三维显示格式很多,常用的有IGS,SAT,OBJ,STL等。这些方法各有优 缺点,相互之间并不兼容和通用。


这其中,结合钣金三维数据量、数据结构的自身特点,本文 采用的是标准化STL数据。该数据作为一种标准的三维数据接 口,对传统点阵三维矩阵式数据进行了三角面片形式的处理。 描述一个点云的三维数据主要是细分成众多相邻近的三角面网 格。其中有两个参数非常重要:一个是每个小三角网络顶点的 三个坐标数据,我们利用(xi,yi,zi)(注i=1,2,3)来进行表示。另外 一个就是对应小三角面片的法向矢量数据,我们利用{n1,n2,n3} 进行表达。在三角顶点和法向矢量的确定时,我们利用右手定 则进行确定。


对于STL的计算机数据格式,本文采用了ASCII码的数据 格式[2]。虽然相较于计算机处理速度较快的另外一种二进制的 格式而言损失了一定的处理速度。但是基于Windows平台下, 对于大量文件数据的读取却可以很方便。同时后期的软件测 试、软件使用很方便,对其他辅助软件提供数据利用的便利。兼 容Matlab软件进行大规模数据的处理,还可以科学计算,矩阵求 解。兼容Excel软件,可以进行中小规模数据的分析和图形化展 示。


3.2 钣金三维STL数据


为了能够正确地读取STL模型的原始数据,更好地利用 OpenGL技术将三维图形显示出来,并实现对其操作,在充分了 解STL文件的基础上,还必须理解它的结构。


对于钣金的STL的数据模型,我们进行了数据结构的分析。 在此基础上设计数据结构,后续数据格式的统一,方便文件数据 的读写操作:


Plate[钣金零件名称]//名字;


patch normal n1,n2,n3//法矢量;


outer loop peak Px1,Py1,Pz1//第1个顶点;


peak Px2,Py2,Pz2//第2个顶点;


peak Px3,Py3,Pz3//第3个顶点;


endloop endpatch//数据结尾;


endPlate[零件名]//信息结束。


3.3 STL数据读取


本文首先应用C++的标准IO库的ifstream类型定义对象绑 定待读取的钣金STL文件[3];再采用Getdata函数从STL文件中 读入数据。STL文件由文件路径及文件名、三角面片法向量、三 角形面片的顶点、三角形顶点定义开始、结束、定义结束等标识 符构成,数据读取函数为ReadSTL()。


具体的数据结构是函数调用和后续变换的基础。在软件具 体的编程设计时,本文采用自定义的数据结构来定义每个小的 钣金三角片的信息:


Struct STLSanJiao


{ float Peak[3][3]; // 3顶点坐标 float Normal[3]; //法向矢量 };


4 基于OpenGL的STL数据显示技术


OpenGL(Open Graphics Library)是个一个专业的图形程序 接口。它用于三维图像,是一个功能强大,调用方便的底层图形 库。而且在函数库中包含了STL的三角面片数据支持函数[4]。


4.1 三维图形显示和透视功能的实现


对于一个良好的三维显示平台,图形的显示功能、透视功能、 光照功能等具有至关重要的作用。而图形显示接口技术OpenGL 具有良好的接口,可以实现真实感的三维图形显示功能。


对于三角面片的显示,在库中也有对应的函数glBegin()和 glEnd()。在OpenGL中投影是进行模型显示的关键技术,主要 有正投影和透视投影这2种类型[5]。由于透视投影更符合人类 视觉,使模型显示的效果更具有真实感,为本文所采用的方法。 透视通过对应的几个函数进行表达,实现各个方向、高度和远近 等视觉显示的功能。


4.2 钣金三维数据变换功能的实现


4.2.1 钣金三维数据的缩放功能


针对钣金三维数据数据量中小规模,显示刷新率和更新率 的特点,对应缩放功能的函数可以设计为:


void PlateScale (float x, float y, float z, float N){}


这个函数的输入量是3个缩放参数因子,针对分别是x,y,z 三个轴。变换的数学原理是利用矩阵的乘法,把当前矩阵和变 换目标进行计算。如果比例因子大于1说明是放大操作,小于1 是缩小操作,等于1是不变操作。这个函数还可以对不同的单一 轴进行比例的放大和缩小操作。以及比例尺的变化通过参数N 进行参数传递。函数的返回值为空,函数实现的是钣金三维数 据的缩放功能。


4.2.2 钣金三维数据的旋转功能


针对钣金三维数据的结构面片化、厚度薄的特点,相应旋转 功能的函数可以设计为:


void PlateSpin (float x, float y, float z, float JiaoDu){}


该函数的前3个输入参数是旋转方向上任意点坐标,这个点 的x,y,z坐标是旋转点。通过第4个旋转角度的参数,后续的变 化和这个点进行矩阵的乘法运算并得出结果。旋转角度是有正 负的float型变量。函数的输出为空,函数实现的是钣金三维数据的旋转操作功能。


4.2.3 钣金三维数据的平移功能


针对钣金三维数据的折弯等结构多的结构特点,对应功能 的平移变换函数设计思路为:


void PlateMoveTo(float x, float y, float z){}


3个输入参数当前钣金数据在x, y, z三个轴方向上的偏移 量。函数返回值为空,函数实现钣金三维数据的平移操作功能。 函数的当前矩阵和输入偏移量生成的矩阵进行矩阵运算,得出 的新矩阵就是最后实现平移功能后的目标矩阵。


5 实验和结论


本实验的硬件环境是Intel Xeon CPU,主频3.4GHZ, 8G内 存。软件系统环境为win7的64位操作系统,实验对象是一钣金 产品零件STL数据, 图2是采用本文方法设计的软件中的该组钣 金三维数据的显示效果图。图3是利用编制的函数实现各种变 换方法(缩放、旋转、平移)操作的显示的效果。



由图2、图3可以看出,采用上述方法建立的三维钣金STL 三维数据显示平台,显示效果可以达到预期效果。并且具有良 好的数据接口,可以继续在此平台上完成各种图形软件的特殊 定制和二次开发,方便科研生产、设计交流。本软件的开发,为 后续钣金设计分析的研究工作提供了良好的三维显示平台,也 同时为科研和生产提供了一套方便二次开发和使用的三维图形 数据显示、变换平台。









相关阅读: MFC转载 知识类文章

分享到:

声明: 本网站为冲压和钣金业内信息集合和展示平台,欢迎不同的声音和观点,为行业人士提供参考,文章并不代表MFC的观点。书面刊用本站及MFC《金属板材成形》的原创文章,必须获得MFC的书面授权;电子平台转载,则必须注明作者和出处,对于盗版、冒名和不注明出处等行为以及由此产生的负面后果,MFC保留追究的权利。

我来说两句(共0条评论,0人参与)注册 登录 |

  • 最新评论
    暂无评论

品牌展厅365天全天候线上展厅

推荐专题

 

微信公众号

冲压钣金门户

扫描或搜索关注