AutoCAD二次开发中的若干问题探析

时间:2022-08-27 10:42:23

AutoCAD二次开发中的若干问题探析

摘要:阐述了AutoCAD二次开发的原理及ActiveX自动化界面技术;介绍了几种二次开发工具与性能特点、适用范围;通过实例介绍了两种AutoCAD二次开发的实现方法;为技术人员开发专用CAD系统提供一些帮助。

关键词:AutoCAD二次开发;开发原理;开发工具;实现方法

中图分类号:TP391.72文献标识码:A文章编号:1009-3044(2012)01-0163-03

Research on Some Techniques in AutoCAD Secondary Development

WANG Wei, LI Bo, ZOU Yuan-ping

(Shandong Energy Machinery Group Tongli Equipment Manufacturing Co.,Ltd., Laiwu 271100, China)

Abstract: Describes the principle of AutoCAD secondary development and the technique of ActiveX Automation Interface; introduces some tools in AutoCAD secondary development and define the situation of their using;using some examples to introduce two ways of realizing AutoCAD secondary development;providing some help to technical people developing professional CAD systems.

Key words: AutoCAD secondary development; development principle; development tool; ways of realizing

随着计算机技术的发展,CAD(计算机辅助设计)技术广泛应用于机械、电子、电气、建筑等领域[1]。AutoCAD作为一种通用图形处理软件,其绘图功能完善,易学易用,使广大技术人员“甩掉”了传统的图板,是目前应用最为广泛的二维制图软件,几乎是CAD的代名词。AutoCAD的另一强大生命力在于其开放的结构体系,而这种开发体系,使得不同行业、专业根据自身的特点能够对其进行二次开发。可以说,AutoCAD的通用性为其二次开发提供了必要条件,而AutoCAD开放的体系结构则使其二次开发成为可能,也只有通过对其进行二次开发,才能够进一步减少设计人员的制图工作量,提高制图效率[2]。本文将结合作者利用Visual Basic进行Au? toCAD二次开发的经验,探析AutoCAD二次开发中的若干问题。

1 AutoCAD二次开发原理

广义二次开发是指在某些系统软件及支撑软件的基础上,针对特定应用领域及用户需求,结合专业知识约束集合,进而开发的专业应用软件。AutoCAD二次开发(以下简称二次开发)通常指在AutoCAD的基础上,通过利用AutoCAD提供的开放式资源和开放式体系结构,结合专业特点,利用开发工具,对AutoCAD进行的再开发,以满足本行业或本专业的特定需求,其原理示意图如图1所示。图1二次开发原理示意图

ActiveX自动化界面技术(ActiveX Automation Interface)它由对象链接技术与嵌入技术发展而来,其核心在于允许外显的对象由一个Windows应用程序控制另外一个Windows应用程序。自AutoCAD R14以后,AutoCAD都支持该技术,通过该接口,使得用户利用开发工具在内部或者外部来操纵AutoCAD。AutoCAD的大部分功能通过ActiveX接口“暴露”出来,并以属性、方法的方式被封装在ActiveX对象中[3]。使用开发工具,通过声明,引用这些“暴露”的对象,如AcadLine,AcadCircle等,实现在当前图形文档或者模型空间中创建对象,进而操作其方法、属性,如Mirror,Layer,color等。

2二次开发常用开发工具

为满足用户需求,Autodesk公司相继推出了三代开发工具。第一代开发工具是AutoLISP语言,它嵌入AutoCAD内部,几乎可直接调用所有AutoCAD命令,如绘制一条直线,直接使用(command "line" p1 p2 ""),是一种解释性语言;第二代开发工具是ADS(AutoCAD Development System),它是AutoCAD R11开始支持的一种基于C语言的开发环境,具备大规模处理能力;第三代开发工具包括:Visual AutoLISP,ObjectARX,VBA,通过接口与对象交互,它们的一些性能如表1所示[4]。

可以看出,几种开发语言特性各异,各有所长,第三代开发工具将成为二次开发的必然选择,但在开发中具体选择哪种语言,应视需要及开发人员经验而定,对于中小型的产品结构设计,如10KV及以下变压器结构参数化设计,需要有自己的启动界面,推荐使用Visual Basic。本文所有代码的书写均采用Visual Basic语言。

3二次开发的实现

3.1二次开发的主要方法

二次开发主要方法是实现参数化设计,即根据零部件相关参数,确定其形状的一种设计方法。这些参数是实现参数化设计的必要条件,条件改变新图形随之生成。产品的参数化设计大致可以分为以下三种情形[5]:

1)参数的改变,程序顺序执行预定表达式,通过与用户交互,完成绘图。该种方法使新图形形状发生改变,可称之为成比例参数化设计。它绘图直观,产品真实形状一目了然,适于形状相对简单的零部件、标准件或复杂零部件某一视图,如标准件、通用件等。

2)参数的改变,新图形形状不发生改变,相关标注发生改变,可称之为图样法参数化设计。这需要开发者预先对图形必须的参数做出分析并标识。程序运行后,对标识重新赋值、替换,完成绘图。该种方法适于图形复杂、变动不大的图形,如同一型号不同规格的总装配图等。它简单实用,但是不能反映零部件真实形状。

3)上述两种情形的组合,即在一张图形当中,不同视图采用不同参数化实现方法。

3.2成比例参数化设计

成比例参数化设计首先须确定一个合适的比例,在过程中加以调用,以反映产品真实形状。建议在模块层级定义一个确定制图比例的公共函数,在过程中直接调用该函数,确定制图比例,节省代码书写。这可通过视图实际尺寸与图幅限定尺寸相比较来确定,代码实现如下:

PublicFunctionDefineScale(ByValActualLAsDouble,ByValActualHAsDouble,DrawingLAsDouble,DrawingHAsDouble)asDouble

其中,ActualL为零部件全部视图所需实际长度,ActualH为零部件全部视图实际宽度,DrawingL为图纸限定长度,DrawingH为图纸限定宽度,如A4图纸限定尺寸为230/180;

Dim I as Integer

I = 1

Do While (DrawingL - ActualL / I) < 0 Or (DrawingH - ActualH / I) < 0

I = I + 1

Loop

DefineScale = 1 / I

End Function

该函数有四个传值参数,参数确定后,可以方便的确定作图比例,以保证按比例绘制的图形不会超过图幅限定的界限。按照上述比例绘制一个矩形,由于在成比例参数化设计中会经常用到创建矩形,按照手工绘制矩形的方法,同样可以在模块层级定义一个绘制矩形的函数,代码实现如下所示:

Public Function CreatRectangle (ByVal x0 As Double, ByVal y0 As Double, ByVal Length As Double, ByVal Width As Double, ByVal sc As Double,ByVal Layer As String, Optional ByVal colour As String) As AcadLWPolyline

引用“暴露”的ActiveX对象轻量多义线AcadLWPolyline;其中,矩形插入点在矩形框的左上角,Length为矩形长度,Width为矩形宽度,sc为确定的绘图比例;Layer为矩形所在图层,可选参数colour为矩形颜色;

Dim points(0 To 9) As Double

points(0) = x0: points(1) = y0

points(2) = points(0): points(3) = points(1)Width*sc

points(4) = points(2) + Length*sc: points(5) = points(3)

points(6) = points(4): points(7) = points(1)

points(8) = points(0): points(9) = points(1)

Set CreatRectangle =Acad.ActiveDocument.ModelSpace.AddLightWeightPolyline(points)

CreatRectangle.Layer = Layer

If color "" Then

CreatRectangle.color = colour End If End Function

3.3图样法参数化设计

如上所述,图样法参数化设计关键在于分析结构参数并做出标识,并对同一产品不同图样做出有效命名,按照一定规律分别调用,最后实现赋值替换,完成参数化设计。图2所示,图样中的字母L、L/2、B、B/2等标注是需要赋值、替换的参数对象。程序运行调用图样,实现标注替换完成新图形,代码实例如下:

Dim BlockStr as String

BlockStr = "实例"

Set blockRef=Acad.ActiveDocument.ModelSpace.InsertBlock(insertionPnt,BlkPath & "实例.dwg", 1#, 1#, 1#, 0)其中,insertionPnt为图样插入点,BlkPath为图样相对查询路径。完成参数的替换:

ReplaceBlock "实例", "DimRotated", "L", L

其中,ReplaceBlock为模块级定义的替换图样中对象的函数;以此类推,替换其他字母标注,最后对块文件实施炸开,显示新的替换值,完成设计。

4结束语

目前,AutoCAD二次开发技术正应用于多个领域、行业,是进一步减少设计人员工作量,提高绘图效率的有效手段。对于标准件、成系列化的产品、结构相同或类似的产品的设计,尤为适用;对于较为复杂的图纸,两种参数化设计方法的有效组合使用,可大大减少编码书写工作,缩短产品开发周期,进一步提高参数化的水平。

参考文献:

[1]方贵盛,王建军.AutoCAD二次开发技术及其应用研究[J].机床与液压,2007,35 (6):186-212.

[2]李长勋.AutoCAD ObjectARX程序开发技术[M].北京:国防工业出版社,2005:1-4.

[3]原思聪,王. AutoCAD二次开发技术及其在机械工程中的应用[J].西安建筑科技大学学报,2001,33(1):71-75.

[4]姜宏伟,李淼,邓海鹏.变压器辅助设计中的典型图法[J].电器制造,2007(9):82-85.

[5]张晋西.Visual Basic与AutoCAD二次开发[M].北京:清华大学出版社,2002:7-10.

上一篇:遗传算法的改进――IGA 下一篇:MQ中间件在电子汇票系统中的应用