VB自动化技术在CAD二次开发中的应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
文章编号:1009-671X(2001)04-0009-03
VB 自动化技术在CAD 二次开发中的应用
喻 畅,邱长华,张家泰,薛 开
(哈尔滨工程大学CIM S 实验室,黑龙江哈尔滨 150001)
摘 要:首先介绍了AutoCA D 二次开发的现状,主要阐述了V B 自动化技术的特点和功能,以及自动化技术在AutoCAD 二次开发中的应用,最后以V B 自动化技术在产品零件库管理系统中的应用为例,列出V B 自动
化技术开发的基本过程。
关 键 词:ActiveX Auto mation;自动化技术;CA D 中图分类号:T H122 文献标识码:A
Application of VB ActiveX Automation to CAD
YU Chang,Q IU Chang hua,ZHANG Jia tai,XUE Kai
(CIM S L ab,Harbin Eng ineering U niversity,Harbin 150001,China)
Abstract:This paper w as referred to the situation of CAD development at present,and mainly discussed the feature of VB ActiveX Automation and application to CAD.The advantages of VB ActiveX Automation w ere also listed through the comparison.At last,an ex ample of application of VB ActiveX Automation to Product and Part M anagement shows the basic method of CAD development.Key words:ActiveX Automation;CAD
0 引言
AutoCAD 自问世以来,以其功能强、使用灵活、硬件接口方便、价格合理、二次开发方便等优点,加上微机的广泛普及,已经成为当今世界最为流行的计算机辅助设计二维绘图软件包。
AutoCAD 开发系统,也可以称为AutoC AD 开发工具,或AutoCAD API(应用程序接口),是将Auto CAD 环境客户化的基本手段。
目前,开发者普遍使用的工具主要有2种:Auto LISP 和C/C ++语言。
Auto LISP:它是AutoDesk 公司最早推出的API,它不是面向对象的语言,用于自动的完成重复性的任务,进行简单的用户开发,编制Auto CAD 菜单以及通过简单的机制为AutoCAD 增加命令。
它在逻辑上是一个独立的进程,通过IPC (进程间通讯)与AutoCAD 交互。
而在AutoCAD R14的版本以后,Autodesk 公司又推出了一种新的面向对象的编程工具 Visual LISP,它是一种可编译的API,不但兼容Auto LISP,还可以将
LISP 源代码编译成.ARX 文件。
ADS:从R11版本后,AutoDesk 公司提供了一种基于C/C++语言的开发系统ADS (Auto CAD Development System ),它曾是AutoCAD R11,R12,R13的主要开发工具,可以在DOS,WINDOWS,UN IX 等操作系统上移植源代码。
但是其内在结构和Auto LISP 一样不是面向对象的,也是通过IPC (进程间通讯)与Auto CAD 交互。
ARX:ARX 最早是在AutoCAD R13中提出的,但是从Auto CAD R14开始就被面向对象的C ++开发环境Object ARX 所代替,为了避免IPC 的系统开销,ARX 的应用程序是DLL(动态连接库),它共享AutoCAD 的地址空间,并对Auto CAD 进行直接调用。
是运行效率高,是AutoDesk 极为推崇的开发工具。
到了Auto 2000,传统意义上的!ADS 开发环境∀这一概念已不复存在,Object ARX 包含了ADS,ARX,ADSRX.但若要使用这一开发环境,用户必须从Auto Desk 公司的网站下载Object
收稿日期:2000-06-29
作者简介:喻畅(1976-),女,湖北武汉人,哈尔滨工程大学机电学院硕士研究生,主要研究方向:计算机集成制造系统。
第28卷第4期 应 用 科 技 Vol.28,#.42001年4月 Applied Science and T echnolog y Apr.,2001
ARX 2000.
1 AutoCA D 与V isual Basic
1 1 ActiveX Autom ation 技术
ActiveX Automation 是微软公司的一个技术标准,以前被称为OLE(对象链接和嵌入),其宗旨是在Window s 操作系统中把多个应用程序组织起来,互相沟通和控制。
ActiveX Automation 通过在2个程序之间安排对话,达到一个程序控制另一个程序。
其过程为:由应用程序发动Ac tiveX Automation 的操作,这个应用程序自动成为Client,被调用的应用程序为Server,Server 收到对话请求后,就定暴露那些对象给Client.1 2 VB ActiveX Automation 与CAD 2000
AutoCAD 自R14版本起,就增加了ActiveX Autom ation 自动化服务的功能(ActiveX Automa tion Server Capabilities),它丰富了AutoCAD 自身的API,为AutoCAD 的进一步发展开辟了新的途径。
AutoDesk 公司在AutoCAD2000中提供了ActiveX Automation 所提供的接口,因而用户可
以很方便的应用ActiveX 客户编程语言(如Visual Basic,Delphi 和M icrosoft J ++等)来定制Auto CAD.
而微软的VB 是Windows 操作系统下最常用的支持ActiveX Automation 技术的开发工具,其语法简单、功能强大,提供了可执行代码的源代码编译器。
它和Visual Basic for Application (VBA)还不同,VBA 是将VB 的环境移植到了AutoCAD 中,虽然在Windows 平台上它可以有效的实现应用程序的集成,但是它没有独立的工作环境,必须依赖于主应用程序存在。
而VB 则是一个独立的开发工具,它不需要依赖于其它的应用程序,有自己完全独立的工作环境和编译、连接系统。
而且独立的VB 也有优于VBA 的方面,这源于微软对两者在功能上的实现功能上的差别。
总之,VBA 只是VB 的一个子集,其功能不如VB 强大。
2 开发AutoCAD 程序的一般过程
在Visual BAsic 中可以引用AutoCAD 实体的库文件编写AutoCAD 二次开发程序,其基本过程为如图1
所示。
图1 业务流程图
2 1 引用AutoCAD 部件
在VB !工程∀(Project)菜单中选择!引用∀(Reference),并在弹出的对话框中选择!AutoCAD 2000Type Library ∀;如果没有该项可以在Auto CAD 2000的目录下选择acad.tlb 文件。
2 2 声明对象变量
AutoCAD 应用程序对外暴露了68个对象,其对象模型的基础为Application (应用程序)对象,又称为根对象。
在根对象的下面又有以下对象。
Preference(优先设置)对象:该对象提供了对AutoCAD 系统中Preferences 对话框中各选项的访问,用户可以根据自己的要求和喜好进行个性化的配置,让AutoCAD 在这个配置下工作。
Document(文档)对象:该对象提供了对所
有实体和非实体集合的访问。
其中包括Mod elSpace 和PaperSpace 属性,可以分别访问模型空间实体集合和图纸空间实体集合。
它还提供了对出图plot 、实用工具utility 以及与文档执行有关的操作。
在AutoCAD14 0或CAD 2000的版本中,可以用早期绑定来声明对象变量。
其具体代码如下。
Public acadapp As AcadApplication ∃定义AutoCAD 应用程序对象为量
Public preference As AcadPreferences ∃定义AutoCAD 优先设置对象为量
Public acaddoc As AcadDocument ∃定义Au toCAD 文档对象变量
Public paspace As AcadPaperSpace ∃定义AutoCAD 图纸空间对象变量
%10%应 用 科 技 第28卷
Public mospace As AcadModelSpace ∃定义AutoCAD模型空间对象变量
2 3 连接AutoCAD
作为客户端的VB程序,为了直接访问应用程序对象AutoCAD,必须提供一个接口,方可访问CAD的下级对象:如文挡对象、优先设置对象、图纸空间对象、图形空间实体集合、各种图形实体等等。
其引用代码为:
On Error Resume Nex t ∃如果出错,继续执行下面的语句
Set acadap=GetObject(,!Autocad.applica
tion∀) ∃如果AutoCAD正在运行,返回对
应用程序对象的引用
If Err T hen ∃否则用Creat Object函数返回对应用程序对象的引用
Err.Clear
Set acadapp=Create Object(!autocad.ap plication∀)
If Err Then
M sgBox Err.Description
Ex it Sub
End If
End If
acadapp.Visible=True∃成功的引用了Auto CAD对象后,其界面可见
Set preference=acadapp.preferences ∃引用赋值对象
Set acaddoc=acadapp.ActiveDocument
Set acaddoc=acaddoc.ModelSpace
Set paspace=acaddoc.PaperSpace
2 4 编写AutoCAD应用程序
用CAD绘图时,用户为了在组织图形时有一定的灵活性,以及为了用不同的线性宽度出图,在绘图前要设置多个图层。
同样在用VB6 0开发AutoCAD时,也可以是创建的对象是图层、线型、颜色等属性,因此可以设置对象的属性。
以下以螺母块创建过程为例说明应用程序所编写过程。
∃装入线形
Call acaddoc.Linetypes.Load(!dashed∀,!a cad.lin∀)
∃设置当前图层
Dim Nutlayer As AcadLayer
Set Nutlayer=yers.Add (!AddNutLayer∀)
Dim currNutLayer As AcadLayer ∃用于保存当前图层的对象变量
Dim NEWNutLayer As AcadLayer ∃用于保存新当前图层的对象变量
Set currNutLayer=acaddoc.ActiveLayer
Set new Nutlayer=yers(!AddNut Layer∀)
∃将AddNutLayer设置为当前层
acaddoc.ActiveLayer=new Nutlayer
∃调用螺母CAD绘图程序(以下以螺母主视图为例进行说明)
Call ConstructNutM ain()
其过程为:
1)创建螺母块集体
Dim Nutblock As Object
Dim Insert(0To2)As Double
Insert(0)=0:Insert(1)=0:Insert(2)=0
Set Nutblock=acaddoc.Blocks.Add(In sert,!NU T∀)
2)块在NU T中插入基本图元
根据计算创建多义线正六边形
Set Poly6=Nutblock.Ad dLightWeightPolyline(Points)
建圆 螺母倒角
Call Nutblock.AddCircle(Cent,f/2#)
建3/4圆弧螺纹
Call Nutblock.AddArc(Cent,rad,sAngRa dian,eAng Radian)
3)调用线形设置虚线或中心线
Dim Nutline As Object
Set Nutline=acaddoc.Linetypes.Item (!dashed∀)
acaddoc.ActiveLinetype=Nutline
4)根据需要可以设置线形宽度
变量名.Lineweight=acLnWt100
在块的绘制过程中采用的参数是从SQL Server数据库中调用,从而实现了参数化绘图。
3 总结
采用VB开发AutoCAD2000,可以较好的使用VB界面对AutoCAD进行控制,充分发挥了VB在计算、数据处理方面的优点,而且程序简单易读,是AutoCAD二次开发的有效手段。
参 考 文 献
[1] 张宝国.AutoCA D Visual Basic技术[M].北京:科学
出版社,2000.
[2] Evangelos Pet routsos,K evin Hough,V i sual Basic6高
级开发技术[M].北京:电子工业出版社,1999. [3] 王钰.用VBA开发Auto CAD2000应用程序[M].北
京:人民邮电出版社,1999.
%
11
%
第4期 喻 畅,等:VB自动化技术在CAD二次开发中的应用。