魏永乐, 晁彩霞
(辽宁工程技术大学机械工程学院,辽宁 阜新 123000)
基于ObjectARX开发工程图模块的研究
魏永乐, 晁彩霞
(辽宁工程技术大学机械工程学院,辽宁 阜新 123000)
三维实体建模在机械产品的设计过程中得到了广泛应用,但二维工程图仍是当前指导生产和进行技术交流必不可少的文件。为了从三维实体模型快速得到二维工程图,利用ObjectARX二次开发工具,在AutoCAD平台上开发工程图模块,实现了实体模型向工程图的快速转化以及自动标注。工程图生成在模型空间,方便后续操作。通过实例证明该工程图模块能够从特征实体模型中提取工程图的相关信息,快速生成二维工程图,大大提高用户的工作效率。
计算机应用;工程图模块;二次开发;ObjectARX;AutoCAD
随着计算机技术的迅速发展,CAD技术已经在机械行业得到了广泛的应用。CAD技术的应用加快了机械产品开发进程、提高了生产效率和产品质量、降低了生产成本。目前,许多机械产品的设计都是从三维实体建模开始的,这符合工程实际和人的思维习惯,形象直观、真实感强,并且可以在实体模型上进行有限元分析等各种计算,有利于产品的优化设计。然而,二维工程图在当前产品的设计和制造过程中,作为重要的技术文档仍是不可缺少的。
AutoCAD作为Autodesk公司的主导产品,其功能强大、操作简单、二次开发方便等优点在机械、电子、模具等领域得到了极为广泛的应用。AutoCAD可以进行产品三维实体建模,而且许多学者在其上开发了特征建模系统,建立了包含全生命周期各阶段信息的零件特征信息模型[1-4]。如何从已有的零件特征信息模型中提取相关信息快速创建二维工程图,对于满足生产需求、提高用户的设计效率、缩短产品开发周期具有重要意义。本文以AutoCAD为平台,利用ObjectARX开发工具开发了工程图模块,实现了由三维特征实体模型向二维工程图的快速转化。
根据零件工程图所表达的内容,所设计开发的工程图模块主要应具有以下功能:设置图纸幅面、创建视图、标注尺寸和粗糙度、填写标题栏和技术要求等,其中创建视图功能最为重要,其它功能都是在视图的基础之上进行的。该工程图模块的功能结构如图1所示。
图1 工程图模块功能结构
设置图纸幅面:设置工程图幅面大小和方向。
创建视图:创建表达零件结构所需的各视图。
标注尺寸和粗糙度:标注零件的基本尺寸、尺寸公差、几何公差和表面粗糙度等。
填写标题栏和技术要求:填写标题栏中的相关信息,以及零件加工时的技术要求。
根据工程图模块的功能结构可知,视图的创建和尺寸标注是工程图模块的核心。由于文章篇幅所限,重点讨论创建视图功能和尺寸标注功能的设计与开发过程。
2.1 视图的创建
AutoCAD具有采用命令方式创建视图的功能,但创建过程复杂,而且生成的视图位于布局空间,使用户操作不太方便。与其相比,利用ObjectARX开发的工程图模块创建视图操作简单,且生成的视图位于模型空间,使用户后续的操作如同在AutoCAD中直接绘制工程图一样,操作起来更加熟悉、方便。
2.1.1 AutoCAD创建视图方法
AutoCAD创建视图的方法主要是采用MView命令方式,其创建视图的主要步骤如下[5-6]:
1) 切换到布局空间(Layout1或Layout2),并设置图纸和打印机选项;
2) 删除已有的视图(系统自动生成的一个视图);
3) 输入MView命令,输入生成视图个数N,然后用鼠标指定各个视图的大小和位置;
4) 激活左上角的视图,从菜单View/3D View中选择Front选项,将其设置为前视图;
5) 输入Zoom命令,选择Scale项,输入比例系数,显示模型;
6) 输入Solprof命令,选择实体模型,其它的提示直接回车即可,提取前视图的轮廓线;
重复步骤第4)~6)步,获得实体模型的其它视图的轮廓线;
7) 打开图层管理对话框,会发现系统自动创建了几个图层,其中以PV为前缀的图层记录可见轮廓线,以PH为前缀的图层记录不可见轮廓线,将其线型设置为Hidden类型;
8) 将0层关闭,即可看到新创建的视图。
由以上步骤可以看出,采用Mview命令创建视图步骤繁琐、重复操作多、效率低;更糟糕的是,提取出的各视图轮廓线,虽然是平面图形,但各视图没有进行坐标变换,不在同一个平面上,如果在模型空间观察显示很乱,难以辨认,更不易后续处理,如图2所示。
图2 模型空间观察视图
2.1.2 工程图模块创建视图
1) 基本视图的创建
基本视图包括主视图、左视图、俯视图、后视图、右视图和仰视图,创建基本视图的设计开发思路如下,其实现流程图如图3所示。
(1) 应用AutoCAD现有的创建视图的命令,如Layout,-View,Solprof等命令,设置实体模型各个视图,并提取出各个视图的轮廓线;
(2) 调用ObjectARX中提供的坐标变换函数和实体操作函数,将提取出的轮廓线在模型空间进行坐标变换,将所有视图都转换到XOY面内适当位置;
(3) 将可见轮廓线添加到SolidLayer层,将不可见轮廓线添加到HiddenLayer层。
创建基本视图的关键代码如下:
acedCommand(RTSTR,"layout",RTSTR,"_n",RTS TR,"View",0);//创建View布局
acedCommand(RTSTR,"layout",RTSTR,"",RTSTR ,"View",0);//进入View布局
acedCommand(RTSTR,"mspace",0);//激活视图……
acedSSGet(NULL,NULL,NULL,NULL,ss);//构造选择集,选中三维实体模型
acedSSName(ss,0,m_SolName);//获得实体名
for(int i=0;i<3;i++)
{ acedCommand(RTSTR,"-view",RTSTR,s[i],0) ;//设置front、top或left视图
acedCommand(RTSTR,"solprof",RTENAME, m_SolName,RTSTR,"",RTSTR,"Y",RTSTR,"Y",R TSTR,"Y",0);//提取视图的轮廓线 }
acedCommand(RTSTR, "Model",RTSTR, "",0); //进入模型空间
……
for(int i=0;i<6;i++)
{ ……
//构造选择集,选中该可见或不可见轮廓线
acedSSGet("X",NULL,NULL,&eb,ss);
ident_init(mat);//初始化坐标变换矩阵
mat[0][3]=m_LviewX;//X轴平移量
……
acedXfromSS(ss,mat);//进行坐标变换
if(strcmp(LayerPrefix[i], "PV") //可见轮廓
{ ……
//将选择集中的实体放入SolidLayer层
pEnt->setLayer(SolidLayerId); }
if(strcmp(LayerPrefix[i], "PH") //不可见轮廓
{ ……
//将选择集中的实体放入HiddenLayer层
pEnt->setLayer(HiddenLayerId); }
}
acedCommand(RTSTR,"layout",RTSTR,"_d",RTS TR,"View",0);//删除View布局
2) 剖视图的创建
创建剖视图的设计开发思路如下:
(1) 确定剖切平面的位置;
(2) 调用三维实体的getSection()函数,获得实体的剖面;
(3) 将剖面进行坐标变换,将其变换到XOY面的合适位置,对其进行修整并添加剖面线,得到剖视图。
创建剖切视图的关键代码如下:
AcGePlane *pPlane=new AcGePlane();//剖切平面switch(m_RefPlane)//选择参考平面
{case 1://以XOY平面为参考平面
Vect.set(0,0,1);//设置剖切平面的法向量
Orig.set(0,0,m_Dist);//设置剖切平面位置
pPlane->set(Orig,Vect);//设置剖切平面
break;
case 2://以YOZ平面为参考平面
…… }
acedSSGet(NULL,NULL,NULL,NULL,ss);//构造选择集,选中三维模型
……
pObj->getSection(pPlane,pSectProf);//获得剖切面的轮廓线
……
pSectProf->transformBy(mat);//对轮廓线进行坐标变换
//将剖面轮廓添加到块表记录中
……
pBlockTableRecord->appendAcDbEntity(entityId, pSectProf);
2.2 工程图的标注
工程图中的标注主要有尺寸公差、几何公差、粗糙度和文本注解等信息,是工程图必不可少的组成部分。由于采用Mview命令创建视图时,不记录三维模型与视图的关联信息,故尺寸公差和粗糙度等标注无法自动生成,创建视图之后需要手工标注。下面讨论如何利用ObjectARX提供的尺寸公差类,从零件特征模型提取标注信息,实现尺寸公差、几何公差、粗糙度等自动标注。
2.2.1 AutoCAD标注公差和粗糙度
AutoCAD系统具有强大的尺寸标注功能,提供了多种标注方法,可以满足不同行业的图形的标注要求,但在标注公差和粗糙度方面AutoCAD还存在很多的缺点。
1) 尺寸公差的标注
AutoCAD中尺寸公差标注的一般步骤是:先查找并确定上、下偏差值,再利用“标注样式管理器”建立一种“标注样式”,设置上偏差、下偏差、前缀等有关参数。每标注一个不同的尺寸公差都要返回“标注样式管理器”中重新进行设置[7]。其明显的缺点就是上、下偏差需人工查找确定,标注时需要反复设置标注样式,效率低。
2) 几何公差的标注
AutoCAD虽然具有几何公差的标注功能,但其功能不完善,实际应用很不方便,如指引线与公差项不能统一标注,没提供基准要素的标注。通常的解决办法是将几何公差和基准符号做成带属性的块,标注时利用插入命令将其插入到指定的位置,然后修改其属性,使用不太方便[8]。
3) 粗糙度的标注
AutoCAD不具有粗糙度的标注功能,用户通常是将粗糙度符号定义成带属性的图块,进行标注时利用插入命令将其插入到指定位置并输入旋转一定角度,然后修改其属性[9]。
2.2.2 工程图模块公差和粗糙度自动标注
针对AutoCAD在标注方面的不足,工程图模块开发了尺寸公差、几何公差和粗糙度自动标注功能,简化了操作步骤,提高了设计效率。
1) 尺寸公差标注
在ObjectARX中尺寸类(AcDbDimesion)是由AcDbEntity类派生而来的,AcDbDimesion类又派生出7个子类,利用这7个子类,可以开发多种标注形式,如两线定角标注、三点定角标注、对齐标注等。
在进行零件特征建模时,很多尺寸公差已经输入到零件特征信息模型之中,为了避免重复输入、提高设计效率,标注尺寸公差时,用户可以从图形数据库中选择所要标注的尺寸,提取出相应公差信息进行标注。当图形数据库中没有公差信息时,用户也可以直接输入尺寸值、公差代号和公差等级,从公差数据库表中查出上下偏差值,进行标注。尺寸公差的标注界面如图4所示。
尺寸公差标注的步骤[7]:
(1) 从特征对象中获得尺寸公差的参数或直接查询出公差的参数,确定标注类型;
(2) 根据标注类型,创建相应尺寸类对象(AcDbAlignedDimension,AcDbDiametricDimension等);
(3) 拾取所要标注的轮廓线或尺寸标注线的起点和终点,确定尺寸线和标注文本的位置;
(4) 将所创建的尺寸对象添加到图形数据库的模型空间。
图4 尺寸公差标注
2) 几何公差标注
几何公差的标注主要应用了AcDbLeader和AcDbFcf 两类。AcDbLeader类用于生成公差的指引线,AcDbFcf类用于生成公差的主体。几何公差的设计与开发思路与尺寸公差标注类似,其标注界面如5图所示。
图5 几何公差标注
几何公差标注的步骤[8]:
(1) 从特征对象中获得几何公差参数或直接查询出公差参数;
(2) 创建指引线对象(AcDbLeader类)和几何公差对象(AcDbFcf类);
(3) 拾取指引线的起点、拐点和终点,确定几何公差的标注位置;
(4) 将指引线和几何公差对象添加到图形数据库的模型空间。
3) 粗糙度标注
AutoCAD没有提供粗糙度的标注功能,也没有与提供粗糙度标注相关的类,所以粗糙度的标注完全采用编程来实现。编程思路为:根据用户输入的信息,由程序计算并绘制表面粗糙度符号、计算表面粗糙度数值插入点坐标和旋转角度,然后利用appendAcDbEntity()函数把表面粗糙度符号和数值添加到图形数据库中。粗糙度标注界面如图6所示。
图6 粗糙度标注
粗糙度标注的实现步骤[9-10]:
(1) 选择粗糙度符号的类型,输入粗糙度的值;
(2) 拾取所要标注的轮廓线,并确定粗糙度符号插入点和方向;
(3) 计算粗糙度符号各点的坐标,并利用AcDbLine和AcDbCircle类对象绘制粗糙度符号;
(4) 创建文本对象(AcDbText)记录粗糙度的值,并计算文本的插入点和旋转角度;
(5) 将粗糙度符号和数值添加到图形数据库的模型空间。
以支架零件为例来验证工程图模块的正确性和实用性,如图7所示。
1) 利用AutoCAD特征建模系统建立支架零件的三维实体模型;
2) 设置图纸幅大小和方向;
3) 创建所需视图,并标注所需尺寸;
4) 填写标题栏、技术要求,形成二维工程 图。
图7 支架工程图
针对AutoCAD创建视图以及标注公差和粗糙度方面的不足,借助ObjectARX二次开发工具,采用面向对象编程技术开发了工程图模块。其界面友好、操作方便,能够从零件的三维特征信息模型快速得到二维工程图,可以大大减少用户反复操作,有效提高用户的设计效率。而且创建的二维工程图处于AutoCAD的模型空间,使熟悉二维绘图的用户操作起来更加得心应手。通过实例证明该工程图模块结合零件特征建模系统,可以由零件特征信息模型快速创建二维工程图,利用AutoCAD系统良好的开放性,借助ObjectARX工具进行专项二次开发,可以大大提高设计效率。
[1] 罗志伟, 陈 亮. 基于ARX的产品特征建模研究[J].福州大学学报, 2004, (2): 158-161.
[2] 田启华, 杜义贤, 赵 卫. 基于AutoCAD的零件特征信息构建[J]. 现代制造工程, 2004, (7): 34-36.
[3] 苏 猛, 魏永乐. 基于AutoCAD开发零件特征建模系统研究[J]. 辽宁工程技术大学学报, 2006, (1): 123-126.
[4] 魏永乐, 晁彩霞. 基于ObjectARX实现特征建模的方法[J]. 工程图学学报, 2010, (6): 92-99.
[5] 何 兵, 车林仙. AutoCAD中由三维模型自动生成二维工程图的研究[J]. 机械设计, 2005, (9): 10-12.
[6] 秦 然. 基于 AutoCAD由三维模型生成二维投影的方法研究[J]. 辽宁大学学报, 2005, (2): 172-174.
[7] 王辉辉, 沈精虎, 李 超. 基于AutoCAD的尺寸公差智能标注系统的设计[J]. 装备制造技术, 2009, (2): 77-79.
[8] 洪友伦. 基于 AutoCAD的形位公差代号标注系统的开发[J]. 机械, 2009, (6): 52-55.
[9] 孙丽红, 张 燕, 谷 实. 基于AutoCAD二次开发的表面粗糙度的智能化标注[J]. 现代制造工程, 2010, (10): 77-80.
[10] 郭德伟, 钟艳如, 黄美发. 基于ObjectARX的表面粗糙度符号标注算法及实现[J]. 计算机系统应用, 2008, (2): 79-83.
Developing engineering drawing module base on ObjectARX
Wei Yongle, Chao Caixia
( College of Mechanical Engineering, Liaoning Technical University, Fuxin Liaoning 123000, China )
The 3D solid modeling is used widely in the design of machine production. But, the 2D drawing is still essential in production manufacturing and in technical exchanging. In order to construct the 2D drawing from 3D solid model, the engineering drawing module is developed based on AutoCAD with the secondary development tool ObjcetARX. Constructing the 2D drawing from a 3D solid model and automatic dimension are realized, and the 2D drawing is created in the model space which makes the user’s operation more convenient. An example shows that the engineering drawing module can extract the information of the 2D drawing from the 3D features solid and can construct 2D drawing rapidly. The design efficiency can be enhanced greatly.
computer application; engineering drawing module; secondary development; ObjectARX; AutoCAD
TP 391
A
2095-302X (2013)01-0071-06
2011-09-27;定稿日期:2012-01-10
魏永乐(1979-),男,河北石家庄人,讲师,硕士,主要研究方向为机械CAD/CAM。E-mail:weiyongle@sohu.com