AutoCAD.NET开发在轴承自动化设计中的应用

2012-07-21 09:26邹波周海军刘小辉
轴承 2012年11期
关键词:句柄滚子二次开发

邹波,周海军,刘小辉

(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#程序开发中。

猜你喜欢
句柄滚子二次开发
圆锥滚子轴承半凸滚子的优化研究
仿真模拟在多联推力滚子轴承研发中的应用
浅谈基于Revit平台的二次开发
浅谈Mastercam后处理器的二次开发
满滚子径向自锁轴承的优化设计
西门子Easy Screen对倒棱机床界面二次开发
高校图书馆持久标识符应用研究
编译程序语法分析句柄问题分析与探讨
双列球面滚子轴承力学分析及滚子受载计算方法
基于Pro/E二次开发的推土铲参数化模块开发