AutoCAD.NET开发在轴承自动化设计中的应用
2012-07-21邹波周海军刘小辉
邹波,周海军,刘小辉
(1.成都重型轴承研究所,成都 610031;2.成都科华重型轴承有限公司,成都 610300)
利用AutoCAD开发设计轴承经常需要大量的数据修改和计算,传统的CAD二次开发技术有AutoLISP和 ObjectARX,其中,AutoLISP为CAD内嵌系统,缺乏足够的灵活性和用户接口;ObjectARX较为灵活,但对编程技术要求较高。.NET框架是为32位及64位操作系统而设计,与传统编程语言(如C++)相比,具有更低的学习要求来访问高级接口,同时有更多的编程环境可以访问CAD图形。采用AutoCAD提供的二次开发接口,. NET API可以进行图形的绘制、标注更改以及复杂的计算应用。而且为实现公差自动分级和相关参数的计算,系统增加了读取现有Access数据库的功能,可以根据轴承的尺寸和精度,自动选择相关公差和参数,计算出外圈滚道尺寸等数据并进行标注,从而形成完整的设计图。
1 系统基本原理
.NET API 为AutoCAD最新的开发接口,采用面向对象编程技术。用户可通过编程的方法利用程序集或开放库操作AutoCAD 和图形文件。通过开放的对象,可被许多不同的编程语言和环境访问。访问对象为 AutoCAD .NET API 的主要构造块,其中每一个对象都精确地代表了 AutoCAD图形中的一部分,它们之间又组成了不同的程序集和命名空间。AutoCAD .NET API 有许多不同类型的对象,如:
(1)直线、圆弧、文字和标注等图形对象;
(2)线型与标注样式等样式设置;
(3)图层、编组和块等组织结构;
(4)视图与视口等图形显示;
(5)图形、AutoCAD 应用程序本身。
本系统的主要实现方式,就是通过.NET API对AutoCAD的各种对象进行操作,实现计算、分类选择、自动绘制图形等功能。
程序设计流程如图1所示。首先,打开现有模版文件,读取并捕捉对象的ObjectID以实现操作;通过Form获取用户要求,如内、外径,高度,精度等参数;查询数据库并获得相应等级的公差值和各种系数;计算出各种尺寸,并修改和调整相应的对象内容实现自动标注和相关的图形绘制;最后通过用户确认,保存设计完成的图纸。
图1 程序流程图
2 程序设计过程及自动化设计效果
以调心滚子自动化设计为例,本系统(其他类型轴承与本系统相同)采用.NET C#方式编程,可以分为几个功能模块,分别为文件操作、对象捕捉和编辑、数据库ODBC操作和用户界面模块。
2.1 文件操作模块
通过实例化Application.DocumentManager来获取模版文件的句柄。再通过相关函数读取和存储。其间通过一个自建的Form来获取模版文件路径。部分代码如下:
DocumentCollection acDocMgr = Application.DocumentManager;//创建实例
ChoseMoBan1 f = new ChoseMoBan1();//一个新窗体
Autodesk.AutoCAD.ApplicationServices.Application.ShowModalDialog(f);
//以AutoCAD的方式打开,而非winForm形式
strFileName = PathTempOpen;//获取文件路径
if (File.Exists(strFileName))
{
DFiles1 =acDocMgr.Open(strFileName, false);//打开相关文件
}
else
{
acDocMgr.MdiActiveDocument.Editor.WriteMessage("File " + strFileName+" does not exist.");//若不存在,返回错误
}
2.2 对象捕捉和编辑
在打开后的文件中,如何获取需要修改对象的句柄是关键,目前常用的2种方法为:每个对象自带的图元句柄和ObjectID。文中采用ObjectID,但ObjectID会随着文件关闭而释放,并在打开时重建。为了能够准确获得文件打开时的对象,针对文中的标注,采用了对象包含的Text进行判别。
Document DF = Application.DocumentManager.MdiActiveDocument;//获取当前活动文档
ObjectId[] Id1 = new ObjectId[1];
// 创建一个TypedValue 数组,用于定义过滤条件
TypedValue[] acTypValAr = new TypedValue[2];
acTypValAr.SetValue(new TypedValue((int)DxfCode.Text, Dimetext1), 0);
acTypValAr.SetValue(new TypedValue((int)DxfCode.LayerName, "7标注层"), 1);
// 赋值过滤条件给SelectionFilter 对象
SelectionFilter acSelFtr = new SelectionFilter(acTypValAr);
Id1 = acSSet.GetObjectIds();//获得对象后返回
获得对象后,可对其进行编辑。编辑过程首先要打开当前模型空间记录,并通过事务对其中相应的对象进行设置。图形编辑和标注编辑类似。
//修改对象内容
Document acDoc = Application.DocumentManager.MdiActiveDocument;//获得活动文档
Database acCurDb = acDoc.Database;//打开Database对象
// 启动一个事务
using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
{
BlockTable acBlkTbl;
acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,OpenMode.ForRead) as BlockTable;
// 以写方式打开模型空间块表记录
BlockTableRecord acBlkTblRec;
acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;
RotatedDimension Dim_OB7_WD = (RotatedDimension)OB7_WD.GetObject(OpenMode.ForWrite);
//获得标注句柄
Dim_OB7_WD.DimensionText = "{H1x;" + PX_WD + "}{H0.5x;S +" +(-D_D_GCD / 1000).ToString() + " ^ 0 ;}";//修改标注内容
MText Dim_OB7_Ke = (MText)OB7_Ke.GetObject(OpenMode.ForWrite);//获得文本句柄
Dim_OB7_Ke.Contents = "W0.8;Ke " + (D_Ke/1000).ToString();//修改文本内容
}//提交事务,完成修改的内容
2.3 数据库ODBC操作
通过系统DSN打开数据源,并对其中的记录进行读取和操作。
OdbcConnection odbcconn = new OdbcConnection("DSN=ODBCBearing");//定义ODBC数据源
odbcconn.Open();
OdbcCommand DbCommand = odbcconn.CreateCommand();
DbCommand.CommandText = "SELECT * FROM WQ ";
OdbcDataReader DbReader = DbCommand.ExecuteReader();//创建并允许SQL
对数据的筛选可通过SQL语句完成,这里不再赘述。
2.4 用户界面
先增加AutoCAD的菜单,通过ExtensionApplication使其自动加载。此处相关代码省略。
2.5 调心滚子轴承自动化设计结果
以23232CAC/W33带油孔的调心滚子轴承自动化设计为例,原始模版和经过程序计算与调整后输出的设计图如图2所示。
图2 调心滚子轴承的自动化设计图
3 结束语
AutoCAD .NET API极大地扩展了CAD的用途,其简便的开发方式、强大的功能为实现自动化设计提供了一个有效的方法。文中讨论的几个操作模块,包含了当前CAD二次开发的大部分内容和通用的接口程序,可广泛用于AutoCAD.NET C#程序开发中。