分享好友 数控技术首页 数控技术分类 切换频道

用AutoCAD获取仿真系统的三维模型

2019-03-28 00:00590

  摘 要 本文通过阐述Visual C++读取AutoCAD图形系统三维图形文件DXF的原理和方法,说明了利用AutoCAD实体造型功能拓展C++语言的三维建模能力,是一种在计算机仿真系统中值得推广应用且简便易行的方法。
  关键词 AutoCAD图形库,计算机图形学,机械CAD,Visual C+ +

1 引言

  建立三维实体模型,用合适的数据结构储存组成装配的各部件的几何、拓扑信息,是实现实时动画及计算机仿真的基础。要生成高逼真度的图像,首先要生成高质量的三维实体模型。目前在众多的计算机仿真系统中,普遍采用OpenGL建立系统的三维真实感图形。但是OpenGL只能通过其基本图元来绘制几何模型,不具备实体造型能力。OpenGL中提供了十几个生成三维实体模型的辅助库函数,这些函数均以aux作为函数名的前缀。球体、立方体、圆柱等简单的模型,可以利用这些辅助函数来实现,如函数auxSolidSphere(GLdouble r),绘制一半径为r的实心球体。但是用这些函数建立复杂的三维实体模型非常困难。
  由于简单地用图元来绘制各部件或者重新开发一个几何造型系统不现实,所以只有考虑采用现有的造型软件建立几何模型,例如,用户可以通过其它建模工具3D MAX、AutoCAD等来辅助建立三维实体模型数据库。然后通过数据交换标准由仿真系统获得造型软件生成的实体模型的数据,用适当的数据结构来储存这些几何、拓扑信息,以建立仿真系统的实体模型。造型软件中,AutoCAD的应用广泛、造型功能强、二次开发以实现参数化的能力而且它的图形交换文件DXF为大多数CAD软件所接受,同时, AutoCAD的DXF文件中对于三维实体的描述是采用三角形面片逼近的方法,而在OpenGL函数库中,提供了这种绘制三角形面片的方法,从而为三维实体的绘制提供了简便的途径。所以,我们在最近研制的起重机部件装配仿真系统中用AutoCAD作为造型软件。

2 实体模型的描述

  仿真系统三维实体模型的建立,首先由现有的造型软件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(America Committee forInteroperable Standard)技术,将实体造型系统集成到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语言描述的图形链表数据结构如下:
typedef struct vertex{                            //顶点
double coordinate[3];                   //顶点坐标(x,y,z)
double vector[3];                          //顶点法向量
struct vertex *next;                    //顶点链表中下一个节点
}VERTEX;
typedef struct edge{                              //边
struct edge *ahead;                     // 边链表中上一个节点
struct vertex * vertex[2];               // 顶点链表中边的两个端点
struct face * face[2];                      //边的两个邻面
struct edge *next;                      // 边链表中下一个节点
}EDGE;
typedef struct face{                              //面
int attributte;                             //曲面标记
struct vertex * vertex[3];               // 顶点链表中面的三个顶点
double vector[4];                   //三角形面片的平面方程系数
struct face *next;                      // 面链表中下一个节点
}FACE;
typedef struct polyline{                           //体素
struct vertex * hvertex;                  //体素顶点链表的头节点
struct edge * hedge;                      //体素边链表的头节点
struct face * hface;                      //体素面链表的头节点
float boxvertex[6];                // 体素包围长方体的6个确定参数
                         //(体素中最大和最小的X,Y,Z坐标值)
struct polyline * box;                   //指向包围长方体的指针
struct polyline * next;                  //体素链表中的下一个节点
}POLYLINE;
typedef struct dxf{                         //同材质体素集
int material;                                //材质
struct polyline * hpolyline;              //体素集的体素链表的头节点
struct dxf * next;                    //体素集链表的下一个节点
}DXF;
typedef struct headedge{                      //边链表的头节点
struct edge *hedge;                        //边链表的头节点
struct headedge *next;              //边链表的头节点链表的下一个节点
}HEADEDGE;
typedef struct headface{                      //面链表的头节点
struct face *hface;                        //面链表的头节点
struct headface *next;              //面链表的头节点链表的下一个节点
}HEADFACE;
typedef struct txt{                               //形体
char name[20];                             //形体名
int dir;                                //装配方向
double matrix[3];                          //形体变换阵
struct dxf * hdxf;                      //体素集链表的头节点
struct headface * hhface;               //面链表的头节点链表的头节点
struct headedge * hhedge;               //边链表的头节点链表的头节点
float boxvertex[6];                // 形体包围长方体的6个确定参数
                         //(体素中最大和最小的X,Y,Z坐标值)
struct polyline * box;                   //指向包围长方体的指针
struct txt * next;                     //形体链表的下一个节点
}TXT;
  系统具体实现中,通过链表数据结构读入数据文件,建立组成仿真的各形体的实体模型主要步骤包括:
  (1)由读入装配文件建立各形体(TXT)的链表,以及形体的体素集(DXF)链表;
  (2)由DXF文件提供的各体素边界顶点坐标和面的顶点号,建立各体素(POLYLINE)链表以及它的顶点(VERTEX)链表和面(FACE)链表;
  (3)再由遍历面链表建立边(EDGE)链表;
  (4)根据形体各体素的边、面链表,建立形体的边(HEADEDGE)链、面(HEADFACE)链。

4 结束语

  总结以上论述,将本图形仿真系统三维几何模型的实现过程简单归纳就是:根据设计结果,利用AutoCAD建立各部件的三维模型,输出DXF文件。模型的建立可采用交互式,也可采用参数化的方法,标准件可建立图形库。由仿真系统直接调用DXF文件,计算各部件在仿真系统中的插入位置,并确定仿真装配顺序及路径,建立装配文件。在实体模型基础上,在OpenGL环境中建立几何模型,实现真实感图形、装配动画、位置调整以及其他一些观察功能(如旋转动画、各个视图、放缩等等)。我们所介绍的这种方法,相信会对其它类似系统的图形建模提供借鉴。

举报
收藏 0
打赏 0
轻松提高数控机床精度
随着我国经济的飞速发展,数控机床作为新一代工作母机,在机械制造中已得到广泛的应用,精密加工技术的迅速发展和零件加工精度的

0评论2025-01-04313

加工中心刀具长度补偿怎么用?
在数控加工中,刀具长度补偿是一种重要的措施,用于消除机床变形、热变形等因素引起的误差,保证加工精度,从而提高培训效率,减

0评论2024-12-18400

加工中心主轴定位角度怎么调?
  在数控加工领域,加工中心主轴的定位角度是影响加工精度和效率的重要因素之一。正确调整主轴的定位角度可以提高加工质量,减

0评论2024-12-11496

简述机器人加装电主轴就选Kasite 4060ER-S的理由
  近年来,随着科技的不断发展,机器人作业已经渗透到各个领域,尤其在工业制造领域,更加随处可见。高精密切割、铣削、雕刻、

0评论2024-05-20707

机器人主轴怎么选?Kasite高速电主轴满足你的需求
  机器人发展到现在越来越受到人们的欢迎和重视,现在很多传统行业都在生产作业中引入了工业机器人,随着机器人的改进和优化,

0评论2023-10-231208

机械臂加装2.2KW大力矩电主轴,就选MSIY-80电主轴
机械臂想加装大力矩电主轴,用于铸钢等硬质材料去毛刺,铣削等加工,可以考虑MSIY-80电主轴,外径80mm,重量4.8公斤,可搭配轴向或径向浮动刀柄配套使用。

0评论2023-08-261203

每天早上打开数控机床时有没有必要热机?
工厂使用精密数控机床(加工中心、电火花、慢走丝等机床)进行高精密加工,你是否有这样的经验:每天早上开机进行加工,首件的加

0评论2023-08-151093