用VB对AutoCAD进行二次开发

用VB对AutoCAD进行二次开发


2024年5月24日发(作者:)

用VB对AutoCAD进行二次开发|用VB对AutoCAD进行二次开发

A utoCAD一直是CAD市场中的主流产品。随着AutoCAD的日益普及,在其上进行

二次开发的工具也不断更新。从早期的Auto Lisp、ADS、 DCL到现在流行的 Object ARX、

ActiveX Automation、Visual Lisp,均可十分方便地对AutoCAD进行二次开发。本文主

要讨论关于运用Visual Basic对AutoCAD基于ActiveX Automation的二次开发技术。

选用 ActiveX有两个原因,一是因为Visual Basic的普及性与易用性,二是采用这种方法

进行二次开发可方便地实现与其它图形软件的接口,如与Solid Works实现实体造型与二

维绘图的结合,以及根据用户的特殊需要开发出一定功能的软件。

二、ActiveX Automation技术

AutoCAD中的ActiveX Automation是微软公司ActiveX规范的具体应用。它通过

基于ActiveX的自动化对象,为其他应用程序提供了访问AutoCAD内部功能的方法,是

AutoCAD最新的开发接口。在运行时,AutoCAD与其他应用程序之间的关系是服务器与

客户的关系,开发人员使用支持ActiveX规范的编程语言(如VB、Dephi等)能通过访问

AutoCAD的对象模型,把AutoCAD的强大功能集成到应用程序中.AutoCAD的对象模型

是一种树型结构模型,根为"AutoCAD Application",AutoCAD中的所有对象都是

AutoCAD Application的子对象。图1所示为AutoCAD对象模型的层次结构树,其中父

对象与子对象之间的关系并不是对象继承关系,而是包含关系。

图1 AutoCAD中ActiveX对象的总结构图

三、ActiveX Automation的使用方法

1. Application对象

如果在计算机系统上安装了AutoCAD,则Windows会自动将其所有的信息注册到系

统注册表里。那么在启动Visual Basic后,用户可以象调用VB自己的对象一样调用

AutoCAD所提供的ActiveX。

在编程、调试或运行时至少应该有一个AutoCAD副本在运行。可以通过以下的代码

创建AutoCAD对象。

Dim AcadApp as Object ’定义一个对象

On Error Resume Next

Set AcadApp =GetObject(,"ation")

If Err Then ’如果没有一个AutoCAD副本在运行

Set AcadApp =CreateObject("ation")

e =True ’启动一个AutoCAD副本并设为可见

If Err Then

MsgBox ption ’如果失败,给出错误提示

Exit Sub

End If

End If

2. Preferences与Document对象

与AutoCAD中的Preferences对话框的作用相同,通过Preferences对象可以读取

或设置AutoCAD的一些基本设置。Preferences对象通过Application的Preferences

属性返回。

Dim AcadPref as Object

Set AcadPref = ences

比如,用户可通过Preferences对象进行如下的设置

size =100

yScreenMenu =acTrue

yScrollBars =

Document对象表示AutoCAD中中当前打开的文档,对AutoCAD中的任何其它操

作都需用到Document对象,该对象可以通过ActiveDocument属性返回。

Dim AcadDoc as Object

Set AcadDoc = Document

AutoDesk公司使用了集合的概念。在Document对象中有14个集合,具体如图1

所示。与VB中的集合一样,这些集合都支持Add、Item方法与Count属性。例如Add

方法可以向该集合中添加一个对象,Item(X)可以的得到该集合中的第X个对象,Count

属性可以得到该集合中的对象的个数。

在一个AutoCAD副本运行时,只能同时打开一个 Document。可以调用Document

的New、Save方法以及Saved属性来打开或保存一个AutoCAD文档。

If Not Then

Else

Set AcadDoc =("acad")

End If

3. 创建、查询与修改AutoCAD图形对象

在创建AutoCAD图形对象之前,首先必须定义并创建ModelSpace与PaperSpace

集合对象。这两个对象可通过Document对象的ModelSpace属性与PaperSpace属性

返回。

Dim moSpace as Object,paSpace as Object

Set moSpace = pace

Set paSpace = pace

所有关于图形对象操作的方法与属性都包含在这两个对象中。

创建文本对象:

Dim moSpace as Object

Set moSpace =pace

Dim Pnt(0 to 2) as Double ’定义一个AutoCAD三维点

Dim TextH as Double ’定义字符高度

Dim Textstr as String ’定义字符变量

Dim TextObj as Object ’定义一个AutoCAD文本对象

Pnt(0) =2:Pnt(1) =4: Pnt(2) =0 ’初始化坐标

TextH =1

TexrStr =“This is a test”

Set TextObj=t(TextStr,Pnt,TextH) ’创建文本对象

查询与修改图形对象

有时用户不但要创建图形对象,更多的情况是修改或控制已存在的

对象,这就需要对已创建的对象进行查询,从而得到所要操作的对象。

可以通过属性来得到图形对象的个数。

Dim noMSOBJ as String,noPSOBJ as String

NoMSOBJ=Str()

NoPSOBJ=Str()

MsgBox "Object:Mspace="& noMSOBJ & ";Pspace="& noPSOBJ

用户也可以通过For..Loop语句来遍历所有的图形对象或是通过方法来得到某个具体

的对象。

下面的代码说明了如何来修改当前中的对象,如果对象为一直线,则修改其颜色为红

色,否则不做任何改动。

Dim ent as object

For each ent in mospace

If name= "acdline" then

=acred

End If

Next

需要注意:如果对图形对象做了改动,则需要调用 Update方法在AutoCAD窗口中

重画该对象。

同样,可以得到Model Space中最后生成的图形对象。

Dim ent as object

Set ent = (-1)

4. 非图形对象

除了ModelSpace与PaperSpace集合,Document对象中另外12个集合中的对象

都是非图形对象,如Layers集合包含了AutoCAD当前文档中所有的层,而Linetypes和

TextStyles则分别为线型对象与字符型对象的集合。

创建层

可以调用Layers集合的Add方法创建层。以下代码创建一个名称为LAYER1,颜色

为洋红色的层。

Dim layerobj as object

Set layerobj =("LAYER1")

=acMagenta

视口

以下的代码使用ActiveSpace属性设置一个活动的Space,然后调用Viewports集合

的Add方法创建一个名为"NEW_VIEWPORT"的视口。当视口建立后,Split方法可使原

视口与新视口呈上下排列,最后,ActiveViewport属性使新视口成为活动视口。

Dim vport as object

Space=acModelSpace

Set vport=("NEW_VIEWPORT")

acViewport2Vertical

Set Viewport=vport

5. 用户输入

Document对象中还包含有一个很重要的子对象Utility,Utility对象提供了一些其它

的实用功能,如用户输入控制(user-input)。user-input方法可以在AutoCAD的命令提

示行中提示用户输入,并显示相应的输入数据类型。这种类型的输入对于屏幕坐标系,实

体选择,短字符与数字的输入有着极为重要的应用。

以下的代码定义了Utility对象。

Dim AcadUtil as object

Set AcadUtil =y

每个user-input方法都在AutoCAD的命令行里给出了适当的输入提示并返回相应的

数据类型。如:GetString返回一个字符串,GetPoint返回一个点(三个双精度数值)。也

可以调用InitializeUserInput方法进行更高级的输入设置。

用户可以定义一个变量:NL=Chr(13)+Chr(10),将这个变量用于输入提示的开始处。

四、结束语

AutoCAD 的ActiveX Automation技术的出现,标志着AutoCAD 的二次开发技术取

得了历史性转折。首先,它首次完全实现了OLE Automation,使得其他软件可以方便地访问

AutoCAD;其次,AutoCAD 首次实现了面向对象的开发技术,用户可以操纵它提供所有的

AutoCAD 对象;最后,基于ActiveX Automation开发技术的开发工具得到空前的膨胀,已

不再局限于C及C++系列语言,用Visual Basic, Delphi等工具都可以进行开发。ActiveX

Automation技术大大地提高了系统开发的效率、健壮性及易维护性


发布者:admin,转转请注明出处:http://www.yc00.com/news/1716523421a2728157.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信