基于HAJIF系统的汽车部件模型库设计与实现
2021-07-14许向彦罗国伟王立凯
许向彦,罗国伟,王立凯
(1.中国飞机强度研究所,陕西 西安 710065;2.广东亚太新材料科技有限公司,广东 肇庆 526000)
1 引 言
HAJIF是中国飞机强度研究所研发的一款大型有限元分析软件,其功能全面,具备静力、屈曲、模态等通用分析求解能力,在诸多航空产品结构分析中获得应用。当前,随着军民融合的不断深入,以及工业CAE软件自主化的紧迫需求,HAJIF软件所服务的行业也从航空航天领域拓展到轨道交通、汽车等领域。
汽车工业中,汽车零部件是构成汽车主机的基础,精确无误的汽车零部件有限元模型是得到整车正确分析结果的基本保证。基于HAJIF平台建立的汽车部件模型库,作为零部件模型与分析软件之间的连接纽带,可以集成前人优秀的建模经验及技巧,同时,鉴于HAJIF结构分析软件的国产自主化,可以有效保证该模型库的延续性,方便后续修改与改进。
本文以HAJIF平台为依托,基于XML与OpenGL技术实现了汽车零部件模型库的搭建。该模型库可以同时存储STL几何模型与BDF、HJF等有限元模型,支持将其无缝加载至HAJIF系统中进行显示与分析,具有一定的工程实用价值。
2 相关技术
2.1 XML
XML(Extensible Markup Language)是一种类似于HTML的标记语言,但是XML没有使用预定义的标记。因此,XML允许根据自己的设计需要定义专属的标记。这是一种十分有用的可存储、可搜索和可共享的格式存储数据的方法。更重要的是,因为XML的基本格式是标准化的,所以如果跨系统或平台共享或传输XML,无论是在本地还是在互联网上,接收方仍然可以根据标准化的XML语言解析数据。
XML文件的读取技术有3种:分别是QXmlStreamReader、DOM和SAX。考虑到所建立的汽车部件模型库需要具备模型动态添加与删除的功能,同时综合上述3种XML文件读取技术的各自特点,本文最终选用DOM技术进行XML文件的读取与处理。
DOM将XML文档描述为一棵树结构,Tree数据结构的每个节点表现为一个XML标记或者XML标记内的文本项。树形结构精确地描述了XML文档中标记间以及文本项间的相互关联性。下述XML文档为系统中存储汽车部件模型的部分信息,包含部件名称及部件信息:
其所对应的DOM树如图1所示。
图1 XML文档对应DOM树
由于利用DOM技术可以将XML文档转换为树形数据结构,所以通过完成树形结构的递归遍历即可完成XML文档的完整读取。反之,将用户在模型库中所做的修改保存至XML文档中即可完成零部件模型信息的修改。
2.2 OpenGL
OpenGL是一项成熟的图形化显示技术。在OpenGL中,所有模型都处于3D空间中,而屏幕和窗口只能以2D像素数组输出,所以,OpenGL的大部分工作是把3D坐标转变为屏幕适应的2D像素。3D坐标转变为2D坐标的处理过程是由OpenGL的图形渲染管线管理。本文通过在OpenGL固定渲染管线中加入自定义可编程着色器,完成STL几何模型的图形化显示。
OpenGL的固定渲染管线一般包含以下几个步骤:(1)顶点变换。顶点变换作为渲染管线中的首个处理模块,所包含的信息非常多,模型的各项操作都在此模块中完成。(2)图元装配。图元装配阶段将顶点变换模块输出的所有顶点作为输入,并将所有的点装配成指定图元的形状输出。(3)几何装配。几何装配模块会把图元装配阶段的输出数据当作其输入,可以通过产生新的顶点构造新的图元来生成其他形状。几何装配阶段的输出既可以输出至纹理装配模块使图形更为逼真,也可以直接发送至光栅化阶段。(4)纹理装配。纹理装配的作用在于其可以通过添加模型细节使得模型或场景更为逼真。(5)光栅化。光栅化阶段会把图元映射为屏幕或窗口中相应的像素,生成供片段着色阶段使用的片段。(6)片段操作。片段着色阶段的主要目的是计算一个像素的最终表现形式。在该阶段中,利用着色器编程语言编写相应脚本可以自定义设置模型输出颜色及光照效果。
在固定渲染管线的基础上,本文利用图形着色语言编写顶点着色器与片段着色器,完成模型的控制与自定义显示。顶点着色器与片段着色器的代码片段如下所示:
(1)顶点着色器
#version 120
attribute vec3 vertex_position;
uniform mat4 transform_matrix;
uniform mat4 view_matrix;
varying vec3 ec_pos;
void main() {
gl_Position = view_matrix*transform_matrix*vec4(vertex_position, 1.0);
ec_pos = gl_Position.xyz;
}
(2)片段着色器
#version 120
uniform float zoom;
varying vec3 ec_pos;
void main() {
vec3 base3 = vec3(0.99, 0.96, 0.89);
vec3 base2 = vec3(0.92, 0.91, 0.83);
vec3 base00 = vec3(0.40, 0.48, 0.51);
vec3 ec_normal = normalize(cross(dFdx(ec_pos), dFdy(ec_pos)));
ec_normal.z *= zoom;
ec_normal = normalize(ec_normal);
float a = dot(ec_normal, vec3(0.0, 0.0, 1.0));
float b = dot(ec_normal, vec3(-0.57, -0.57, 0.57));
gl_FragColor = vec4((a*base2 + (1-a)*base00)*0.5 +(b*base3 + (1-b)*base00)*0.5, 1.0);
}
3 系统框架及子模块设计
本系统依照XML文件完成系统初始化配置,同时对外开放3种类型的接口,分别是模型增加删除的修改接口、模型信息的显示接口,以及模型与HAJIF系统或几何模型图形化显示模块的交互接口。系统框架设计图如图2所示。
图2 系统框架设计图
对于模型增加与删除接口,用户完成模型修改后,通过将相关信息写入XML配置文件中完成模型信息的保存与更新。以XML数据为基础的系统搭建完成了数据与系统的分离,使模型数据的分享更为便捷。用户可以导出模型相关文件与配置文件,进而分享给其他人。与此同时,用户也可以直接导入从别处获得的模型库,快速实现相互共享。
对于模型显示接口,系统提供统一的数据结构,模型具备以下属性:(1)模型名称;(2)模型文件;(3)模型描述信息;(4)模型图片;(5)模型附加文件。这5项属性可以较为完整地描述一个模型的相关信息。
本系统同时支持汽车零部件的有限元模型与几何模型的存储,有限元模型的存储意义在于其可以固化前人的有限元建模经验,而几何模型的存储则可以固化前人的设计经验,经典的设计结构对后续设计人员的工作具有重要的指导作用。
在计算机图形应用系统中,STL文件是一种描述三角形网格的标准格式,其具有ASCII码格式与二进制两种格式。主流的CAD系统均可输出STL格式的几何模型,鉴于此,本系统同时提供STL几何模型的图形化显示接口。
几何模型图形化模块的设计逻辑如图3所示。当STL几何模型从汽车部件模型库中导入进来时,通过STL模型解析器首先判断STL几何模型文件格式,对于ASCII格式与二进制格式分别处理解析得到模型顶点与面法线相关信息,将所有信息传入可编程渲染管线中进行渲染,同时通过设计模型交互模块获取用户的操作信息(旋转,平移,放大缩小),继而在几何模型中反馈显示。
图3 几何模型显示模块逻辑设计图
4 软件实现
本系统基于Visual Studio 2010,采用面向对象思想,依托HAJIF系统搭建完成,主要涉及到的Qt库有QtGui库、QtOpenGL库、QGLShaderProgram库、QDomDocument库及QTreeWidget库。几何模型显示模块的界面设计如图4所示。
图4 几何模型显示模块界面
几何模型显示模块支持用户与模型的交互,用户可以通过鼠标操作实现模型的旋转、缩放及平移。图5是测试模型经过一定程度的缩放、平移与旋转后的模型显示图。
图5 模型交互显示图
几何模型显示模块作为其中一个功能点,可以满足用户的基本需求。相对于几何模型显示功能,有限元模型的有效管理以及与HAJIF系统的无缝连接会发挥更为重要的作用。
图6描述了某汽车左前门防撞梁的模型信息,通过加载接口,可以将该模型直接导入HAJIF系统中,通过HAJIF系统可直接提交该模型的求解计算,计算结果如图7所示。完整的模型信息展示以及与HAJIF系统的无缝连接大大提高了分析人员的工作效率。
图6 左前门防撞梁导入HAJIF系统图
图7 左前门防撞梁计算结果图
5 结束语
本文以HAJIF平台为依托,基于XML与OpenGL技术完成了汽车部件模型库的搭建,可以同时集成包含大量建模经验的有限元模型数据与包含设计经验的几何模型数据,大大提高了有限元分析人员的分析效率。自定义的XML配置与HAJIF分析软件的国产自主化保证了该系统的可拓展性与可延续性,具有一定的工程实用价值。