AutoCAD二次开发的ActiveX技术应用

Autodesk公司的AutoCAD软件广泛地应用于设计领域。AutoCAD作为强大而专业的工程绘图软件,近几年来在工程地质制图方面也得到了广泛应用,如钻孔柱状图、剖面图等。但由于CAD本身的原因以及地质图件的特殊性,完全依赖CAD而不借助第三方软件或对CAD进行二次开发,实现地质图件的计算机化也是一件非常困难的事情。好在CAD是一个灵活而又开放的系统,它提供了许多开放式的接口,允许用户通过这些接口对CAD进行二次开发,以满足不同用户的需要。

在AutoCAD R14以前的版本中,最常用的开发工具是AutoLisp和ADS,这两种开发工具都不适应当前可视化编程的需要。幸运的是,在AutoCAD R14版本中,Autodesk公司在AutoCAD中加入了ActiveX自动化服务功能(ActiveX Automation server capabilities),使得用户可以通过可视化编程工具,如Visual Basic(以下简称VB)、Delphi等对AutoCAD进行二次开发,不但提高了工作效率,也满足了不同专业的需要。最近我院开发了“工程地质CAD绘图系统”软件,荣获本单位优秀软件三等奖。该系统我们以AutoCAD R14为平台,VB为开发工具,应用ActiveX技术对AutoCAD进行了二次开发。本文简略地说明AutoCAD中的ActiveX对象模型结构及对模型对象的编程引用。

1 AutoCAD中的ActiveX对象模型

AutoCAD ActiveX提供了一种机制,或者说是一种方法,可以供开发者通过编程手段来操纵AutoCAD。ActiveX是由一系列的对象,按一定的层次结构组成的,每一个对象都代表了AutoCAD中的一个明确的功能。每一个对象本身包含着自己的属性和方法,通过方法可以实现对象的一些操作,如控制CAD的启动,打开一个文档,一条直线的生成。而属性则是对象自己本身所具有的一些性质,如一个文本对象,它的属性有文本的高度,宽度、文本的颜色,所在层等。应用程序正是通过对AutoCAD暴露的各级对象的方法和属性的引用控制AutoCAD工作的。

理解AutoCAD的对象模型是实现编程的基础。AutoCAD以层次结构组织对象(对象模型图可以参考R14版本中的帮助文件)。在顶层是Application对象(即AutoCAD 本身),其他对象均为Application对象的子对象。在Application对象下面是Preferences(优先设置)和Document(文档)对象,通过Preferences对象可以对AutoCAD Tools>Preferences菜单项中的几乎每一个选项进行访问和修改,以获取或改变AutoCAD的优先设置。Document对象是控制AutoCAD图形文件的直接对象,它代表某一个装入的CAD图形文件(一般设为当前激活的文件)。Document对象下面有Model Space(模型空间)和Paper Space(图纸空间)对象及Blocks(块)、Layers (层)、Plot(出图)、Selectionsets(选择集)、 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自身,所有的应用程序必须从Appliction对象的建立开始。

Dim aCADapp As Object '建立Application对象

Dim aCADdoc As Object '建立Document对象

Dim mospace As Object '建立Model Space 对象

On Error Resume Next

Set aCADapp = GetObject(, "autoCAD.application")

If Err Then

Err.Clear

Set aCADapp = CreateObject("autoCAD.application") ‘

If Err Then

MsgBox Err.Description

Exit Sub

End If

End If

Set aCADDoc = aCADApp.ActiveDocument

上一语句是设aCADdoc为当前图形文档。

Set aCADutil = aCADDoc.Utility '与用户交互

aCADApp.Visible = True ‘此语句是使CAD可见。

Set mospace = aCADdoc.ModelSpace 设置mospace为当前图形文档的模型空间。

以上程序段是应用程序初始化的过程,即选择性地启动AutoCAD。如果CAD已经启动则跳此过程,反之则初始化启动CAD。一般对AutoCAD图形文档的操作,主要是与Application、Document、Utility和Model Space等对象发生关系。

AI助手