2009年5月6日星期三

cad二次开发中VB或VBA的应用问题

启动VB,引用AutoCAD类型库。操作步骤:从工程菜单中选择引用选项,启动引用对话框。在引用对话框中,选择AutoCAD类型库,然后单击确定。
定义模块级变量AutoCAD应用程序(acadApp)和当前的文档(acadDoc)。
如果AutoCAD正在运行,使用GetObject函数将检索AutoCADApplication对象。如果AutoCAD没有运行,使用CreateObject函数试图创建一个AutoCADApplication对象。如果创建成功,会启动AutoCAD;如果失败,则会发生错误。
同时运行多个AutoCAD任务时,GetObject函数会返回Windows运行对象表中的第一个AutoCAD实例。
要显示AutoCAD图形窗口,需要将AutoCAD应用程序的Visible特性设置为TRUE。
使用acadDoc变量引用当前的AutoCAD图形。
示例:
DimacadAppAsAcadApplication
DimacadDocasAcadDocument
SubConnectToAcad()

OnErrorResumeNext
SetacadApp=GetObject(,AutoCAD.Application)
IfErrThen
Err.Clear
SetacadApp=CreateObject(AutoCAD.Application)
IfErrThenEnd
EndIf
acadApp.Visible=True
SetacadDoc=acadApp.ActiveDocument
EndSub

2、如何使VB开发的程序不依赖于AutoCAD的版本。
启动VB,定义模块级变量AutoCAD应用程序(acadApp)和当前的文档(acadDoc)。
如果AutoCAD正在运行,使用GetObject函数将检索AutoCADApplication对象。如果AutoCAD没有运行,使用CreateObject函数试图创建一个AutoCADApplication对象。如果创建成功,会启动AutoCAD;如果失败,则会发生错误。
同时运行多个AutoCAD任务时,GetObject函数会返回Windows运行对象表中的第一个AutoCAD实例。
要显示AutoCAD图形窗口,需要将AutoCAD应用程序的Visible特性设置为TRUE。
使用acadDoc变量引用当前的AutoCAD图形。
示例:
DimacadAppAsObject
DimacadDocasObject
SubConnectToAcad()

OnErrorResumeNext
SetacadApp=GetObject(,AutoCAD.Application)
IfErrThen
Err.Clear
SetacadApp=CreateObject(AutoCAD.Application)
IfErrThenEnd
EndIf
acadApp.Visible=True
SetacadDoc=acadApp.ActiveDocument
EndSub
与第一个问题相比较,可以看出,不引用具体的类型库以及使用通用的对象类型就可以达到通用性。

3、前期绑定和后期绑定
要创建一个使用前期绑定方式的对象变量,也就是说,在程序编译时就完成绑定,则对象变量在声明时应指定类ID,如:DimacadAppAsAcadApplication。
使用AsObject子句声明对象变量,可以创建一个能包含任何类型对象引用的变量。不过,该变量访问对象是后期绑定的,也就是说,绑定在程序运行时才进行,如:DimacadAppAsObject。
前期绑定的变量引用可以提供更好的性能,但该变量只能存放声明中所指定的类的引用。
而后期绑定的变量引用可以提供更好的通用性。

4、依赖于版本和独立于版本
如果CreateObject或GetObject函数使用的ProgID没有附加版本号,那么是独立于版本的,否则是依赖于版本的。例如,如果使用的是CreateObject,则CreateObject(AutoCAD.Application)是独立于版本的,而CreateObject(AutoCAD.Application.15)是依赖于版本的。

5、VB代码到VBA代码的转换
在VBA的IDE环境中,使用导入文件将要转换的VB工程的模块、类模块以及窗体文件一一导入。接着将VB代码中所有的当前的文档(acadDoc)变量替换为ThisDrawing,而AutoCAD应用程序(acadApp)变量替换为Application。同时删除定义的AutoCAD应用程序(acadApp)和当前的文档(acadDoc)变量,删除与AutoCAD应用程序连接的代码。注意:要转换VB代码的窗体部分,则窗体必须是用UserForm创建的。

6、图形对象和非图形对象

没有评论:

发表评论