应用ActiveX技术进行AutoCAD二次开发 于亚东1 Autodesk公司的AutoCAD软件广泛地应用于设计领域。AutoCAD作为强大而专业的工程绘图软件,近几年在工程地质制图方面也得到了广泛应用,如钻孔柱状图、剖面图等。但由于CAD本身的原因以及地质图件的特殊性,完全依赖CAD而不借助第三方软件或对CAD进行二次开发,实现地质图件的计算机化也是一件非常困难的事情。好在CAD是一个灵活而又开放的系统,它提供了许多开放式的接口,允许用户通过这些接口对CAD进行二次开发,以满足不同用户的需要。 在当前AutoCAD系统中,最常见的开发用具是AutoLisp、VisualLisp、ADS和ARX,但Lisp处理数据库能力差,编制界面困难,而ARX和ADS是基于C++语言的开发环境,要求相对较高。幸运的是,在AutoCAD R14以后的版本中,Autodesk公司在AutoCAD中加入了ActiveX自动化服务功能(ActiveX Automation server capabilities),使得用户可以通过可视化编程工具,如Visual Basic(以下简称VB)对AutoCAD进行二次开发,不但提高了工作效率,也满足了不同专业的需要。本文简略地说明AutoCAD中的ActiveX对象模型结构及对模型对象的编程引用。 1 AutoCAD中的ActiveX对象模型 AutoCAD ActiveX提供了一种机制,或者说是一种方法,可以供开发者通过编程手段来操纵AutoCAD。ActiveX是由一系列的对象,按一定的层次结构组成的,每一个对象都代表了AutoCAD中的一个明确的功能。每一个对象本身包含着自己的属性和方法,通过方法可以实现对象的一些操作,如控制CAD的启动,打开一个文档,一条直线的生成。而属性则是对象自己本身所具有的一些性质,如一个文本对象,它的属性有文本的高度,宽度、文本的颜色,所在层等。应用程序正是通过对AutoCAD暴露的各级对象的方法和属性的引用控制AutoCAD工作的。 理解AutoCAD的对象模型是实现编程的基础。AutoCAD以层次结构组织对象,在顶层是Application对象(即AutoCAD 本身),其他对象均为Application对象的子对象。在Application对象下面是Preferences(优先设置)和Document(文档)对象,通过Preferences对象可以对AutoCAD Tools —> Preferences菜单项中的几乎每一个选项进行访问和修改,以获取或改变AutoCAD的优先设置。Document对象是控制AutoCAD图形文件的直接对象,它代表某一个装入的CAD图形文件(一般设为当前激活的文件)。Document对象下面有Model Space(模型空间)和Paper Space(图纸空间)对象及Blocks(块)、Layers (层)、views(视图)、 utility(功能)等一系列对象(集合),其含义与AutoCAD中相似。Model Space是当前图形文件中 实体或生成新实体。对非图形实体,如层(layer)、线形(line type)等的访问则通过访问Document对象下面的相应的集合类型的子对象,如Layers 、LineTypes等来实现。集合类型的对象可以使用VB中所有的集合操作方法。Plot对象提供了访问Plot对话框中各选项 的桥梁,使应用程序具有用不同方式控制AutoCAD出图的能力。Utility对象使用户在AutoCAD命令行与CAD交互成为可能,通过它可以处理整型、浮点型、字符型等用户输入,还可以接受点(Point)或角(Angle)等AutoCAD的特殊量。以上简要地说明了CAD中的对象及其层次结构关系,有了这些理解对编程控制CAD就不难了。 2 AutoCAD对象的使用 2.1 AutoCAD Application对象 如上所述,Application对象位于AutoCAD层次对象结构的顶层,它代表AutoCAD自身,所有的应用程序必须从Application对象的建立开始。 打开VisualBasic6.0,新建工程,双击窗体,键入以下代码: Private Sub Form_Load() On Error Resume Next '`如果目前系统中已有执行CAD程序,则取得已执行CAD物件 Set aCADapp = GetObject(, "AutoCAD.Application") If Err Then Err.Clear '`如果目前系统尚未有执行CAD程序,则建立CAD物件 Set aCADapp = CreateObject("AutoCAD.Application") End If aCADapp.Visible = True '`请务必将物件Visible属性设为true End Sub 完成对Application对象的建立后,启动程序的同时,便激活AutoCAD绘图环境。 2.2 Document对象 图形实体是指所有CAD的图元物体,如点(point)、线(Line)、圆(Circle)、弧(Arc)、文字(Text)等,它们包含于ModelSpace和PaperSpace集合对象中。对实体的操作总要从这两个集合开始,向下查找相应实体所属的方法或属性。而图形实体的操作包括实体的生成、编辑和查询。 ModelSpace与PaperSpace是所有图形实体的集合,因此要取得图中的某一实体,一般采用遍历查找的方法,下面是关于CAD图形实体生成和编辑的实例代码。 (1)生成矩形的代码(如图1) Private Sub Command1_Click() Dim p1(0 To 2) As Double ,p2(0 To 2) As Double ,p3(0 To 2) As Double Dim p4(0 To 2) As Double Dim lineObj As Object p1(0) = CDbl(Text1.Text):p1(1) = CDbl(Text2.Text):p1(2) = 0# p2(0) = CDbl(Text1.Text):p2(1) = CDbl(Text4.Text):p2(2) = 0# p3(0) = CDbl(Text3.Text):p3(1) = CDbl(Text4.Text):p3(2) = 0# p4(0) = CDbl(Text3.Text):p4(1) = CDbl(Text2.Text):p4(2) = 0# Set lineObj = aCADapp.ActiveDocument.ModelSpace.AddLine(p1, p2) '`划第二点到第三点 Set lineObj = aCADapp.ActiveDocument.ModelSpace.AddLine(p2, p3) '`划第三点到第四点 Set lineObj = aCADapp.ActiveDocument.ModelSpace.AddLine(p3, p4) '`划第四点到第一点 Set lineObj = aCADapp.ActiveDocument.ModelSpace.AddLine(p4, p1) aCADapp.Update End Sub (2)模拟镜像功能(以画同心圆为例,如图1) Private Sub Command2_Click() Dim circleObj Dim centerPoint(0 To 2) As Double Dim radius As Double Dim a As Integer , b As Double centerPoint(0)=CDbl(Text6.Text):centerPoint(1)=CDbl(Text7.Text) centerPoint(2) = 0# b = CDbl(Text8.Text) For a = 1 To CDbl(Text8.Text) \ 16 b = b - 15 radius = b Set circleObj = aCADapp.ActiveDocument.ModelSpace.AddCircle(centerPoint, radius) aCADapp.Update Next a
(3)在固定位置进行文字标注(如图1) Private Sub Command3_Click() Dim TextObj Dim pt2(0 To 2) As Double pt2(0) = 210 : pt2(1) = 160 : pt2(2) = 0 Set TextObj = aCADapp.ActiveDocument.ModelSpace.AddText(Text5.Text, pt2, 15) aCADapp.Update End Sub 随着AutoCAD2002、AutoCAD2004版本的推出,ActiveX模型对象和CAD的二次开发手段都得到了极大的丰富。以上是本人用VB在CAD平台上进行二次开发的一些体会,由于成文时间仓促,错误和不足在所难免,望不吝指正。 |
|
来自: anrain > 《20110808》