2007PLM征文之26:面向虚拟装配零件模型重构的实现
一、引言
虚拟装配是当前制造业研究的热点,建模是虚拟装配的前提和基础,利用现有的三维CAD软件进行建模,目前市场上的一些商用三维CAD软件(本案以UG软件为例)虽都是基于特征(主要是几何形状特征)的建模系统,但这些系统的信息模型还只限于几何信息和拓扑信息,为设计后续的制造、装配、评价等过程提供的信息还是远远不能满足实际工作中的需要,即使对其二次开发也不足以满足虚拟装配各环节建模的需求,基于此,针对虚拟装配,需要建立一个比较理想的操作平台,在继承CAD系统产品设计信息的基础上,还需添加一些与装配有关的工程语义信息,建立具有完整信息的虚拟装配信息模型,以满足虚拟装配后续各环节的需要。
由于三维CAD软件是以几何造型为基础的,最突出的功能是几何造型,利用其强大的造型功能,对产品的零件进行建模,虚拟装配平台的装配体中零部件组成信息、零件的几何显示信息、特征参数信息所需零件的信息可以从三维CAD软件中通过转化、提取、解析、匹配来获得,因此,虚拟装配建模首先要考虑的是三维CAD与虚拟装配平台连接的桥梁。综合考虑,由于VRML具有分布式、交互式、平台无关、三维场景、多媒体集成、逼真自然等基本特征。被称为“第二代WEB”[1]。当前绝大多数CAD软件都支持VRML2.0格式文件的导出。基于此,可将建模的零件导出VRML格式。在导出的VRML格式文件丢失了零件的特征参数信息,仅仅是零件的几何显示数据信息,所以需要从两方面着手,一方面利用上述的几何显示数据,另一方面通过UG Open API对零件的特征参数进行提取,然后通过一定的特征匹配算法将其关联在一起,即可完成从CAD建模到虚拟装配平台零件模型的重构,虚拟装配体系结构如图1所示。

图1 虚拟装配系统结构图
二、导出几何显示信息分析
定义:面集是由一组相邻的三角面片构成。
从三维CAD软件中导出VRML 格式的文件,主要涉及的节点有Transform节点、Shape节点、Appearance节点、Material节点、IndexedFaceSet节点、Coordinate节点、Normal节点等。显示零件几何模型时所涉及的VRML节点群以及这些节点之间的关系如图2所示。IndexedFaceSet节点用于面几何造型,一系列以IndexedFaceSet节点作为geometry域值的Shape节点的集合,它用面集描述几何模型的一个表面,利用coordIndex域的值提供了一张形如[…,-1,i1,i2,i3,-1,…]的列表,描述构成三角面片的规则,每个数字都是对应面的Coordinate类型节点的point域中坐标点的索引值(0 - n,n=边缘点的总数-1)。每三个点后面有一个-1,结尾的-1省略,这样在对文件读取时,每遇到-1,就构成一个三角面,直到把一个面的所有三角面片读完之后,该面就拥有了一个面集(多个小三角面片),所有面的面集组合在一起,就构成了零件的模型。

三、基于OpenGL的VRML文件解析器
对于VRML文件的数据,可以分成显示几何模型数据和零件场景描述两部分[2]。
3.1、定义CVrmlFileparse类对VRML格式文件解析
class CGLVrmlParse : public CGLFileParse//VRML文件解析器
{
public:
int Run(CString filename, CGLPart3d * part);
void StoreMesh(CGLMesh3d * pMesh);//构造和析构
CGLVrmlParse();
virtual CGLVrmlParse(); //确定面集IndexedFaceSet 大小,用顶点个数和面片个数表示
int SizeMesh(int *pNbVertex,int *pNbFace);//存储面集的信息
int ReadMesh(CVRMLSceneGraph3d *pSceneGraph);//检查面集是否有效
int CheckVersion();//到文件缓存区中file.Read(m_pBuffer,m_SizeFile);
int Run(CString filename,CVRMLSceneGraph3d *pSceneGraph);//将VRML信息解析到OpenGL场景中
……
};
本文为e-works原创投稿文章,未经e-works书面许可,任何人不得复制、转载、摘编等任何方式进行使用。如已是e-works授权合作伙伴,应在授权范围内使用。e-works内容合作伙伴申请热线:editor@e-works.net.cn tel:027-87592219/20/21。
