VB与AUTOCAD的接口.docx

上传人:b****5 文档编号:6497806 上传时间:2023-01-07 格式:DOCX 页数:9 大小:23.62KB
下载 相关 举报
VB与AUTOCAD的接口.docx_第1页
第1页 / 共9页
VB与AUTOCAD的接口.docx_第2页
第2页 / 共9页
VB与AUTOCAD的接口.docx_第3页
第3页 / 共9页
VB与AUTOCAD的接口.docx_第4页
第4页 / 共9页
VB与AUTOCAD的接口.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

VB与AUTOCAD的接口.docx

《VB与AUTOCAD的接口.docx》由会员分享,可在线阅读,更多相关《VB与AUTOCAD的接口.docx(9页珍藏版)》请在冰豆网上搜索。

VB与AUTOCAD的接口.docx

VB与AUTOCAD的接口

VB与AUTOCAD的接口(一

AutoCAD具有开放的体系结构,是一种极其灵活的应用系统,用户可以通过编程的方式对其进行定制,它允许用户和开发者采用各种方法对其进行扩充和修改,即二次开发,能最大限度地满足用户的特殊要求。

我们先对以往AutoCAD二次开发中用到的方法简单做一回顾,然后以VisualBasic6.0为编程工具,详细讨论应用ActiveX对AutoCAD进行二次开发的方法。

(一AutoCAD二次开发中用到的方法

1AutoLISP

AutoLISP(LISTProcessingLanguage,它是一种表处理语言,是被解释执行的。

它被嵌入在AutoCAD内部,作为二次开发的编程语言,她一直是低版本AutoCAD的首选编程语言。

2autocad的script文件

script文件是成批集成Autocad命令的文本文件,可以在Autocad中运行,早期国内CAD二次开发中应用较为普遍,这种方法比较容易实现,通过在外部程序中按照要求将绘图参数融合进script文件,然后利用autocad定制菜单实现绘图。

3ADS

ADS(AutoCADDevelopmentSystem是AutoCAD的C语言开发系统,它直接利用C语言编译器,将应用程序编译成可执行的文件在AutoCAD环境下运行,这种可执行的文件叫做ADS应用程序。

ADS由于其速度快,又采用结构化的编程体系,因而很适合二次开发机械设计CAD、土木工程CAD等。

4ObjectARX

ObjectARX是一种崭新的开发AutoCAD应用程序的工具,她以C为编程语言,采用先进的面向对象的编程原理,提供可与AutoCAD直接交互的开发环境,能使用户方便快捷地开发出高效简洁的AutoCAD应用程序。

ObjectARX并没有包含在AutoCAD中,可在AutoDESK公司网站中去下载,其最新版本是ObjectARXforAutoCAD2000,它能够对AutoCAD进行完整的、先进的、面向对象的设计与开发,并且开发的应用程序速度更快、集成度更高、稳定性更强。

ObjectARX是一种特定的C编程环境,她包括一组动态链接库(DLL,这些库与AutoCAD在同一地址空间运行并能直接利用AutoCAD核心数据结构和代码,库中包含一组通用工具,使得二次开发者可以充分利用AutoCAD的开放结构,直接访问AutoCAD数据库结构、图形系统以及CAD几何造型核心,以便能在运行期间实时扩展AutoCAD的功能,创建能全面享受AutoCAD固有命令的新命令。

5VisualLISP

VisualLISP已经被完整地集成到AutoCAD2000中,她为开发者提供了崭新的、增强的集成开发环境,一改过去在AutoCAD中内嵌AtuoLISP运行引擎的机制,这样开发者可以直接使用AutoCAD中的对象和反应器,进行更底层的开发。

用它开发程序的时间被缩短,原始代码能被保密;能帮助大家使用ActiveX对象及其事件;使大家很容易创建和分析LISP程序的运行情况。

6VBA

VBA(即Mcrosoftoffice中的VisualBasicforApplications,被集成到AutoCAD2000中。

VBA为开发者提供了一种新的选择,也为用户访问AutoCAD2000中丰富的技术框架打开一条新的通道。

VBA和AutoCAD2000中强大的ActiveX自动化对象模型的结合,代表了一种新型的定制AutoCAD的模式构架。

通过VBA,我们可以操作AutoCAD,控制ActiveX和其它一些应用程序,使之相互之间发生互易活动。

(二VisualBasic应用ActiveX对AutoCAD进行二次开发

(1AutoCAD的对象模型

如果一个应用程序支持自动化,那么其他应用程序就可以通过其开放对象(Object对其进行操作。

对象本身包含自己的方法和属性。

通过对象的方法和属性可以实现对象的操作及状态信息的收集或改变。

例如,圆是AutoCAD中的一个对象,它的属性可以是圆心坐标、半径及所在层等性质,方法则有拷贝、镜像等操作。

理解AutoCAD的对象模型是对其编程的基础。

AutoCAD以层次结构组织对象。

在顶层是Application对象(即AutoCAD本身,其他对象均为Application对象的子对象。

在Application对象下面是Preferences(设置和Document(文档对象。

其中:

◆AutoCAD的Application对象

Application对象是应用程序对象。

通过该对象,你可访问其它的对象,或指派对象的属性和方法。

例如,应用程序对象具有Preferences(参数选择属性,它返回Preferences(参数选择对象。

该对象提供访问在选项对话框中设定的注册信息(图形信息设定包含在DatabasePreferences对象。

应用程序对象的其它属性提供你访问应用程序指定数据,如应用程序的名称和版本、还有AutoCAD的窗口大小、位置和可见性等。

应用程序对象的方法执行应用程序指定的动作,如列出、装载、卸载ADS和ARX应用程序,还有退出AutoCAD。

应用程序对象也提供通过Documents(文档集合链接到AutoCAD图形、通过MenuBar和MenuGroups集合链接到AutoCAD菜单和工具栏,还有通过称为VBE属性链接到VBAIDE。

应用程序对象也是ActiveX界面的全局对象。

也就是说应用程序对象的所有方法和属性在全局名称空间都是有效的。

◆AutoCAD的Preferences对象

通过它可以获取或改变AutoCAD的设置。

◆AutoCAD的Document对象。

是AutoCAD图形文件对象,它代表当前激活的DWG文件。

Document对象下面有ModelSpace(模型空间和PaperSpace(图纸空间对象及Blocks(块、Layers(层、Plot(出图、Selectionsets(选择集、views(视图、utility(功能等一系列对象(集合,其含义与AutoCAD中相似。

ModelSpace是当前图形文件中图形实体,如直线、圆、多义线等的集合,每个实体即是一个对象,可通过属性和方法改变实体或生成新实体。

对非图形实体,如层(layer、线形(linetype等的访问则通过访问Document对象下面的相应的集合类型的子对象,如Layers、LineTypes等来实现。

集合类型的对象可以使用VB中所有的集合操作方法。

Plot对象提供了访问Plot对话框中各选项的桥梁,使程序具有用不同方式控制AutoCAD出图的能力。

Utility对象使用户在AutoCAD命令行与CAD交互成为可能,通过它可以处理整型、浮点型、字符型等用户输入,还可以接受点(Point或角(Angle等AutoCAD的特殊量。

对象是通过分层方式来组织的,应用程序对象为根对象。

这种分层结构被归结为对象模型。

(2AutoCAD对象的使用

要想在AutoCAD中使用ActiveAutomation技术,首要条件是在VB6.0中选择AutoCAD作为其对象,并对需要操作的具体对象按照AutoCAD对象的树状结构逐级遍历。

首先打开VB6.0,选择“工程/引用”菜单,在“引用”对话框中选择“AutoCADObjectLibrary”。

按照VB的编程步骤,写入下面相应的程序代码,即可实现CAD中相应的操作。

下面说明CAD中常用操作的实现方法:

a.开始一个应用程序的VB语句

Application对象位于AutoCAD层次对象结构的顶层,它代表AutoCAD本身,用户的应用

程序也理所当然从Appliction对象的建立开始。

DimobjacadAsAutoCAD.AcadApplication’’定义Autocad程序对象

DimobjdwgAsAutoCAD.AcadDocument’’定义DWG文件对象

DimobjcircleAsAutoCAD.AcadCircle’’定义circle对象

Setobjacad=NewAutoCAD.AcadApplication’’建立Autocad程序列程

Setobjdwg=objacad.Documents.Add’’建立名称为acab的DWG文件

Setobjcircle=objdwg.ModelSpace.AddCircle(cen,rad’’在acab的DWG文件中画一个圆objdwg.SaveAs(sf’’保存文件

objdwg.Close’’关闭文件

objacad.Quit’’退出AutoCAD

Setobjdwg=Nothing’’释放acab的DWG文件占用的内存

Setobjacad=Nothing’’释放Autocad程序列程占用的内存

另外,若AutoCAD已启动,则使用下面语句激活它:

SetAcadapp=GetObject(,"Autocad.application"

也可以使用下面语句启动AutoCAD:

SetAcadapp=CreateObject("Autocad.application"

其它:

Acadapp.Visible=True’’使AutoCAD可见

SetAcaddoc=Acadapp.ActiveDocument’’设Acaddoc为当前图形文件

SetMospace=Acaddoc.ModelSpace’’设Mospace为当前图形文件的模型空间

以上程序段是应用程序初始化的过程,一般对AutoCAD图形文件的操作,主要是与Application、Document和ModelSpace等对象发生关系。

Application对象是一系列对象的父对象,可以通过它的属性设置来改变AutoCAD的窗口设置。

请看下面代码:

acadapp.Top=100’’设置AutoCAD窗口的位置

Acadapp.Left=200

Acadapp.Height=1000’’调整AutoCAD窗口的大小

acadapp.Width=800

Acadapp.Caption="myfirstapplication"’’设置AutoCAD窗口的标题

b.操作Document对象的VB语句

Document对象提供了大多数AutoCAD的文件功能,可以通过它实现对文件的更新(New、打开(Open、输出(Export、输入(Import等操作,一般要先把Document对象设为Application对象的ActiveDocument属性,以返回当前图形文件。

SetAcaddoc=Application.ActiveDocument

请看下面的例子对文件的操作:

DimdwgnameAsString

dwgname="c:

\acad\struc.dwg"

打开一个已有的CAD文件

Acaddoc.Opendwgname

建立一个新CAD文件acad.dwg

Acaddoc.new("acad"

Document对象还提供了两个十分有用的方法——SetVariable和GetVariable,通过它们可以得到或改变AutoCAD的系统变量。

如:

Acaddoc.SetVariable"Orthomode",1’’打开正交模式

DimcadverAsString

cadver=Acaddoc.Getvariable("Acadver"’’获取AutoCAD的版本号

c.绘制直线对象的VB语句

要描绘一条直线至少要有直线的起始点和终止点的坐标,如应用AddLine方法绘制一条直线,起始点坐标为:

(10,10,0,终止点坐标为:

(50,50,0

程序代码如下:

DimSP(0To2AsDouble

DimEP(0To2AsDouble

SP(0=5

SP(1=5

SP(2=0

EP(0=20

EP(1=20

EP(2=0

mospace.AddLineSP,EP

d.插入文本对象的VB语句

文本的主要参数为插入点、文本高度、旋转角和字符串。

AddText方法需要四个参数来产生一个文本。

如产生一个Text对象:

字符串为“岩土工程勘察CAD”,插入点坐标为:

(10,10,0文本高度为120。

程序代码如下:

DimInsertP(0To2AsDouble

DimTextHeightAsDouble

DimTextStringAsString

DimTextObjAsObject

InsertP(0=10

InsertP(1=10

InsertP(2=0

TextHeight=120

TextString="岩土工程勘察CAD"

SetTextObj=mospace.AddText(TextString,InsertP,_TextHeight

e.向图形中插入已有的一个图块的VB语句

块处理是AutoCAD中经常使用的技术。

块包括两种:

一种是外部文件,使用块引用的方法加入到图形文件中;另一种是文件内部的块,该块的定义包含在当前图形中。

内部块比较容易处理,可以对块进行编辑,也可以生成引用块。

而采用外部文件时,有时为了图形输出的需要,必须将块引用用Xbind命令插入到图形文件中。

如将一个图形中经常用到的图块BlockName1插入到点(20,20,0,其旋转角为0,比例因子为1。

插入块的函数是InsertBlock,它返回一个块的引用实例对象BlockRef实际上;块也可以用InsertBlock函数插入到其它块中。

块是可以嵌套的,但是它不能引用自身,否则会形成无穷的循环。

程序代码如下:

PrivateSubCommand3_Click(

DimBlockNameAsString

DimBlockRefAsObject

DimInsertP(0To2AsDouble

DimXscaleAsDouble,YscaleAsDouble

DimRotAngleAsDouble

DimFoundAsBoolean

DimEnTryAsVariant

InsertP(0=100

InsertP(1=100

InsertP(2=0

BlockName="BlockName1"

’’查找所有的文件中已有图块

ForEachEnTryInacadDoc.Blocks

IfEnTry.Name=BlockNameThen

Found=True

ExitFor

EndIf

Next

’’有则插入图块

IfFoundThen

SetBlockRef=acadDoc.ModelSpace.InsertBlock(_

InsertP,BlockName,Xscale,Yscale,RotAngle

Else

MsgBox"此图块名不存在。

"

EndIf

EndSub

f.填充图形的VB语句

本例提供的是画一个圆心为(3,3,0,半径为1的圆,然后填充这个圆的内部区域。

具体过程如下:

DimhatchObjAsAcadHatch

DimptnNameAsString

DimptnTypeAsLong

DimbAsBoolean

DimouterLoop(0To0AsObject

ptnName="ANSI31"’’定义填充的样式

patnType=0

b=True

’’在模型空间创建一个填充对象

SethatchObj=moSpace.AddHatch(ptnType,ptnName,b

’’创建填充的边界,画一个圆心为(3,3,0,半径为1的圆

Dimcenter(0To2AsDouble

DimradiusAsDouble

center(0=3:

center(1=3:

center(2=0

radius=1

SetouterLoop(0=moSpace.AddCircle(center,radius

’把填充边界传递给hatchObj对象,并显示填充’hatchObj.AppendOuterLoop(outerLoophatchObj.EvaluateAcaddoc.RegenTrueg.保存图形的VB语句保存活动的图形,以下示例以当前名称保存活动图形然后再以新的名称保存该图形。

SubCh3_SaveActiveDrawing(’以当前名称保存活动图形’Acaddoc.Save’以新的名称保存活动图形’Acaddoc.SaveAs"MyDrawing.dwg"EndSub当然你会想到去检查活动图形是否存在有未保存的更改。

在退出AutoCAD进程之前或开始一个新的图形之前这样做是一种好的习惯。

使用Saved属性可以确定当前图形是否包含未保存的更改。

测试图形是否有未保存的更改内容,检查图形是否有未保存的更改并由用户确定是否保存图形(如果取消,则直接跳到结束处。

如果确定的话,使用Save方法保存当前图形,程序如下:

SubCh3_TestIfSaved(IfNot(acaddoc.SavedThenIfMsgBox("你是否想保存该图形?

",vbYesNo=vbYesThenacaddoc.SaveEndIfEndIfEndSub亦可使用Save或SaveAs方法保存图形,具体使用方法请查看相关资料。

现在国内有不少介绍ActiveX编程及AutoCAD的资料,但迄今还未发现有完整讨论AutoCAD的ActiveX编程的书籍,目前最容易得到的资料就是Autodesk公司编写的随机帮助,其中有一章“ActiveXAutomation",有全部对象的方法、属性说明。

具体内容请查看AutoCAD的随机帮助文件。

本节主要论述利用VB的ActiveX编程实现与AutoCAD的连接的技术及相关VB语句。

其实用用VB编写具有DDE功能的程序来控制AutoCAD也是不错的方法,在Windows平台下,VB和AutoCAD都支持强有力的DDE(动态数据交换功能,既能与AutoCAD交换各种复杂的数据结构,又能向AutoCAD发送命令,由此开发出的应用程序也足能满足用户的需要,下面我们简单讨论一下这方面的内容。

(三)VisualBasic应用DDE实现对AutoCAD的控制DDE是Windows的强大功能之一,它可以使应用程序自动地接收由其它应用程序发送来的数据,当传送端的数据有变化时,接收端的数据也会随之改变,也可将命令或键盘输入传递给其它程序,实现远程控制。

在VB编程环境中,创建应用程序的方法很简单,VB中能和其它Window应用程序建立DDE通道的控件有文本框,标签和图片框。

下面结合简单实例,说明VB应用程序与AutoCAD间建立DDE通道和交换数据的方法。

在VB中启动一个新项目,参见图(1建立窗体,其中“建立链接”“直线”“标注”,,,

“退出”为命令按钮,标有“Text1”的为文本框,用于建立DDE通道,并输入下面的事件代码。

OptionExplicitPrivateSubcmdLine_Click(’’画直线Text1.LinkExecute"[^3^3line3,38,8^3]"EndSubPrivateSubcmdText_Click(’’标注文字Text1.LinkExecute"[^3^3text10,10190AUTOCAD!

^10]"EndSubPrivateSubcmdLink_click(’’建立链接Text1.LinkMode=0Text1.LinkTopic="autocad.dde|system"Text1.LinkMode=2EndSubPrivateSubcmdExit_click(’’退出EndEndSub运行此应用程序,注意在运行前,一定要先加载AutoCAD。

单击“建立链接”按扭,cmdLink_Click(过程被执行,执行时设置文本框Text1的LinkTopic和LinkMode的属性,完成VB应用程序与AutoCAD间DDE通道的建立。

LinkTopic属性用于通知AutoCAD由谁来提供数据,它被管道符“|”分成两部分,第一部分“AutoCAD.DDE”为应用程序名,第二部分“System”是通讯的主题。

LinkMode属性用于切实建立链接,在LinkMode=0时,表示关闭以前的DDE通道,在LinkMode=2时,表示以手动模式激活DDE通道。

在完成DDE链接后,VB应用程序就可以与AutoCAD间进行数据交换或命令传送了。

单击“直线”按扭,cmdLine_Click(过程被执行,应用程序通过LinkExecute方法向AutoCAD发送命令,AutoCAD中以点(3,3和(8,8为端心,在画一条直线。

语句中的^3相当于AutoCAD中的取消键CtrlC,空格相当于AutoCAD中的回车键。

“标注”单击按扭,执行cmdText_Click(过程,可在AutoCAD中显示以(10,10为基点,高为1,旋转角度为90的字符串“AutoCAD!

”。

语句中的^10相当于AutoCAD中的回车键,在标注文字时不能用空格代替回车键。

根据需要,可用上面的方法传送AutoCAD的其它命令,实现对AutoCAD的开发。

(四)VisualBasic应用SCRIPT文件实现对AutoCAD的控制AutoCAD提供了一种被称为命令文件(SCRIPT文件)的工具。

它允许将不同的AutoCAD的命令组

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1