VB与AUTOCAD的接口Word文档格式.docx
《VB与AUTOCAD的接口Word文档格式.docx》由会员分享,可在线阅读,更多相关《VB与AUTOCAD的接口Word文档格式.docx(9页珍藏版)》请在冰豆网上搜索。
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("
其它:
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
DimXscaleAsDouble,YscaleAsDouble
DimRotAngleAsDouble
DimFoundAsBoolean
DimEnTryAsVariant
InsertP(0=100
InsertP(1=100
BlockName="
BlockName1"
’’查找所有的文件中已有图块
ForEachEnTryInacadDoc.Blocks
IfEnTry.Name=BlockNameThen
Found=True
ExitFor
EndIf
Next
’’有则插入图块
IfFoundThen
SetBlockRef=acadDoc.ModelSpace.InsertBlock(_
InsertP,BlockName,Xscale,Yscale,RotAngle
Else
MsgBox"
此图块名不存在。
"
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的命令组