纳金网
标题:
用AutoCAD获取仿真系统的三维模型
[打印本页]
作者:
她。
时间:
2012-3-27 08:50
标题:
用AutoCAD获取仿真系统的三维模型
实体模型的描述
仿真系统三维实体模型的建立,首先由现有的造型软件AutoCAD建立几何模型,然后通过它的数据交换文件DXF文件,仿真系统获得AutoCAD生成的实体模型的数据,建立系统自身的实体模型。
一个完整的DXF文件由四个段和文件结尾组成,它们的顺序是:
(1)标题段。该段记录了AutoCAD所有标题变量的当前值,这些标题变量记录了AutoCAD的当前工作环境。
(2)表段。该段包含了七种表,按顺序是:视窗表、线型表、图层表、字样表、用户坐标表、尺寸标注式样表和应用程序标识表,这些表记录了当前图形编辑的支撑环境。
(3)块段。该段记录了每一个块的定义,记录了这些块的名字、类型、基点及组成该块的所有成员。
(4)实体段。该段定义了每个实体的种类,所在图层名、颜色、线型、厚度、实体描述字及有关几何数据。
(5)文件结尾。只有“”和“EOF”两行。
具体内容由若干组构成,每个组占两行,第一行为组代码,第二行为跟随值,组代码相当于数据名称的代码,跟随值是数据的具体值。DXF实体分类和IGES类似,几何实体包括如点、直线、圆弧、多义线、三维平面、轨迹等;描述实体包括如尺寸标注、属性定义、正文、块属性等;结构实体包括如型、块、子实体等。
AutoCAD将形体表面作三角形剖分,即所有的表面(包括平面、曲面)都用三角形面片来近似表示。
三维形体的几何、拓扑信息都记录在实体(ENTITIES)段中,其由多个POLYLINE实体描述组成,每个POLYLINE实体对应AutoCAD中的体素和由扫描产生的基本形体。
POLYLINE实体描述中的信息包括:形体的所有顶点坐标;组成三角形面片的顶点号,顶点按符合右手法则的顺序排列。
AME是一个真三维的实体造型系统,系统的输入主要采用CSG及扫描两种方式。实体在计算机内同时采用CSG及B-rep两种表示模式,先将用户的输入用CSG树的结构加以记录,然后随着造型进程转换为B-rep表示。从13.0开始,AutoCAD首次使用了ACIS(AmericaCommitteeforInteroperableStandard)技术,将实体造型系统集成到AutoCAD的核心模块上,实体造型已成了其基本功能。ACIS技术允许对实体做更完整更精确的描述,在建立复杂实体时,仍需对基本体素做布尔操作,但计算机内不再使用CSG树,而是利用ACIS机制生成实体的B-rep表示。
3、系统所要求的模型数据结构
系统中部件之间干涉检验的求交算法是部件间的边面求交,随后还要进行交点和三角形的包含性检验,以及判断部件是否相交,其中包括使用包围体的加速措施。算法要求点的几何信息,面方程的获得要求面和点的拓扑关系F→{V},边方程的获得需要边和邻面的拓扑关系E→{F},还需要边和端点的拓扑关系E→{V},部件及体素要求有包围体的数据。
真实感图形的生成算法要求正确地计算各顶点的法向量,以反应物体真实表面,所以要有法向量数据。真实感显示还要求部件的材质信息。动画的实现要求部件的装配方向信息。布局调整要求部件的变换矩阵数据。在参考翼边结构的基础上,针对本仿真系统对各种信息、数据的要求,结合DXF文件的特点,特作如下处理:
整个系统的图形由组成装配的各个部件(包括减速器、电机、万向节等)的图形组成,通常一个部件在同一次造型中完成,因此可将一个部件形体作为一个DXF文件输出,每个部件对应一个DXF文件,DXF文件中包括组成部件形体的所有体素,以及其边界数据。但是,DXF文件考虑的仅仅是几何、拓扑信息,而没有材质这样的物理信息,一个部件往往由不同材质的零部件组成,因此在真实感图形显示时必须有材质信息。为了增加材质信息,将同一材质的体素作为同一DXF文件输出,这样多个体素集组成一个部件形体。因此建立链表结构TXT记录装配部件的信息,链表结构DXF记录一部件中同材质的体素集的信息,链表结构POLYLINE记录体素的信息。
由于AutoCAD记录体素的几何、拓扑信息使用的是B-rep表示法,因此针对体素,我们的仿真系统采用类似翼边结构的数据结构,建立了顶点、边、面链表结构,其中由于边链表的生成算法是通过遍历面链表,对应三角形面中的任意两个顶点都生成一条边,因此会产生一条边记录两次,为了方便删除链表结点,边采用双链表结构。点的几何信息包括点的坐标,以及点的法向量;面的几何信息包括面的属性,面的法向量以及其方程系数。建立了点、边、面间的三种拓扑关系,即E→{V},E→{F},F→{V}。数据结构下图所示。
仿真系统实体模型的数据结构图 根据仿真系统的要求,用C语言描述的图形链表数据结构如下:
typedefstructvertex{//顶点
doublecoordinate[3];//顶点坐标(x,y,z)
doublevector[3];//顶点法向量
structvertex*next;//顶点链表中下一个节点
}VERTEX;
typedefstructedge{//边
structedge*ahead;//边链表中上一个节点
structvertex*vertex[2];//顶点链表中边的两个端点
structface*face[2];//边的两个邻面
structedge*next;//边链表中下一个节点
}EDGE;
typedefstructface{//面
intattributte;//曲面标记
structvertex*vertex[3];//顶点链表中面的三个顶点
doublevector[4];//三角形面片的平面方程系数
structface*next;//面链表中下一个节点
}FACE;
typedefstructpolyline{//体素
structvertex*hvertex;//体素顶点链表的头节点
structedge*hedge;//体素边链表的头节点
structface*hface;//体素面链表的头节点
floatboxvertex[6];//体素包围长方体的6个确定参数
//(体素中最大和最小的X,Y,Z坐标值)
structpolyline*box;//指向包围长方体的指针
structpolyline*next;//体素链表中的下一个节点
}POLYLINE;
typedefstructdxf{//同材质体素集
intmaterial;//材质
structpolyline*hpolyline;//体素集的体素链表的头节点
structdxf*next;//体素集链表的下一个节点
}DXF;
typedefstructheadedge{//边链表的头节点
structedge*hedge;//边链表的头节点
structheadedge*next;//边链表的头节点链表的下一个节点
}HEADEDGE;
typedefstructheadface{//面链表的头节点
structface*hface;//面链表的头节点
structheadface*next;//面链表的头节点链表的下一个节点
}HEADFACE;
typedefstructtxt{//形体
charname[20];//形体名
intdir;//装配方向
doublematrix[3];//形体变换阵
structdxf*hdxf;//体素集链表的头节点
structheadface*hhface;//面链表的头节点链表的头节点
structheadedge*hhedge;//边链表的头节点链表的头节点
floatboxvertex[6];//形体包围长方体的6个确定参数
//(体素中最大和最小的X,Y,Z坐标值)
structpolyline*box;//指向包围长方体的指针
structtxt*next;//形体链表的下一个节点
}TXT;
系统具体实现中,通过链表数据结构读入数据文件,建立组成仿真的各形体的实体模型主要步骤包括:
(1)由读入装配文件建立各形体(TXT)的链表,以及形体的体素集(DXF)链表;
(2)由DXF文件提供的各体素边界顶点坐标和面的顶点号,建立各体素(POLYLINE)链表以及它的顶点(VERTEX)链表和面(FACE)链表;
(3)再由遍历面链表建立边(EDGE)链表;
(4)根据形体各体素的边、面链表,建立形体的边(HEADEDGE)链、面(HEADFACE)链。
4、结束语
总结以上论述,将本图形仿真系统三维几何模型的实现过程简单归纳就是:根据设计结果,利用AutoCAD建立各部件的三维模型,输出DXF文件。模型的建立可采用交互式,也可采用参数化的方法,标准件可建立图形库。由仿真系统直接调用DXF文件,计算各部件在仿真系统中的插入位置,并确定仿真装配顺序及路径,建立装配文件。在实体模型基础上,在OpenGL环境中建立几何模型,实现真实感图形、装配动画、位置调整以及其他一些观察功能(如旋转动画、各个视图、放缩等等)。我们所介绍的这种方法,相信会对其它类似系统的图形建模提供借鉴。
欢迎光临 纳金网 (http://rs.narkii.com/club/)
Powered by Discuz! X2.5