VB与AUTOCAD的接口_第1页
VB与AUTOCAD的接口_第2页
VB与AUTOCAD的接口_第3页
VB与AUTOCAD的接口_第4页
VB与AUTOCAD的接口_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、VB 与 AUTOCAD 的接口(一AutoCAD具有开放的体系结构,是一种极其灵活的应用系统,用户可以通过编程 的方式对其进行定制,它允许用户和开发者采用各种方法对其进行扩充和修改,即 二次开发,能最大限度地满足用户的特殊要求。我们先对以往AutoCAD二次开发 中用到的方法简单做一回顾,然后以Visual Basic6.0为编程工具详细讨论应用 ActiveX对AutoCAD进行二次开发的方法。(AutoCAD二次开发中用到的方法1 AutoLISPAutoLISP (LIST Processing Language ,它是一种表处理语言,是被解释执行的。 它被嵌入在AutoCAD内部,作

2、为二次开发的编程语言,她一直是低版本AutoCAD的 首选编程语言。2 autocad 的 scri pt 文件scri pt文件是成批集成Autocad命令的文本文件,可以在Autocad中运行,早期国 内CAD二次开发中应用较为普遍,这种方法比较容易实现,通过在外部程序中按照 要求将绘图参数融合进scri pt文件,然后利用autocad定制菜单实现绘图。3 ADSADS (AutoCAD Development System 是 AutoCAD 的 C 语言开发系统,它直接利 用C语言编译器将应用程序编译成可执行的文件在AutoCAD环境下运行,这种可 执行的文件叫做ADS应用程序。AD

3、S由于其速度快又采用结构化的编程体系、因 而很适合二次开发机械设计CAD、土木工程CAD等。4 ObjectARXObjectARX是一种崭新的开发AutoCAD应用程序的工具,她以C为编程语言, 采用先进的面向对象的编程原理提供可与AutoCAD直接交互的开发环境.能使用 户方便快捷地开发出高效简洁的Auto CAD应用程序。ObjectARX并没有包含在 AutoCAD中,可在AutoDESK公司网站中去下载,其最新版本是ObjectARX for AutoCAD 2000,它能够对AutoCAD进行完整的、先进的、面向对象的设计与开发, 并且开发的应用程序速度更快、集成度更高、稳定性更强

4、。ObjectARX是一种特 定的C编程环境她包括一组动态链接库(DLL ,这些库与AutoCAD在同一地址空 间运行并能直接利用AutoCAD核心数据结构和代码,库中包含一组通用工具使得 二次开发者可以充分利用AutoCAD的开放结构,直接访问AutoCAD数据库结构、 图形系统以及CAD几何造型核心,以便能在运行期间实时扩展AutoCAD的功能,创 建能全面孚受AutoCAD固有命令的新命令。5 VisualLISPVisualLISP已经被完整地集成到AutoCAD 2000中,她为开发者提供了崭新的、 増强的集成开发环境,一改过去在AutoCAD中内嵌AtuoLISP运行引擎的机制,这

5、样 开发者可以直接使用AutoCAD中的对象和反应器,进行更底层的开发。用它开发 程序的时间被缩短,原始代码能被保密:能帮助大家使用ActiveX对象及其事件:使大 家很容易创建和分析LISP程序的运行情况。6 VBAVBA (即 Mcrosoft office 中的 Visual Basic for Applications,被集成到 AutoCAD 2000中。VBA为开发者提供了一种新的选择、也为用户访问AutoCAD 2000中丰富 的技术框架打开一条新的通道。VBA和AutoCAD 2000中强大的ActiveX自动化 对象模型的结合,代表了一种新型的定制AutoCAD的模式构架。通

6、过VBA ,我们 可以操作AutoCAD ,控制ActiveX和其它一些应用程序,使之相互之间发生互易活 动。(二 Visual Basic 应用 ActiveX 对 AutoCAD 进行二次开发(1 AutoCAD的对象模型如果一个应用程序支持自动化那么其他应用程序就可以通过其开放对象 (Object对其进行操作。对象本身包含自己的方法和属性。通过对象的方法和属性 可以实现对象的操作及状态信息的收集或改变。例如,圆是AutoCAD中的一个对 象它的属性可以是圆心坐标、半径及所在层等性质,方法则有拷贝、镜像等操作。理解AutoCAD的对象模型是对其编程的基础。AutoCAD以层次结构组织对 象

7、。在顶层是Application对象(即AutoCAD本身,其他对象均为Application对象 的子对象。在Application对象下面是Preferences (设置和Document (文档对象。其 中: AutoCAD 的 Application 对象Application对象是应用程序对象。通过该对象,你可访问其它的对象或指派 对象的属性和方法。例如,应用程序对象具有Preferences(参数选择属性,它返回 Preferences(参数选择对象。该对象提供访问在选项对话框中设定的注册信息(图形 信息设定包含在Database Preferences对象。应用程序对象的其它属性

8、扌是供你访问 应用程序指定数据如应用程序的名称和版本、还有AutoCAD的窗口大小、位置 和可见性等。应用程序对象的方法执行应用程序指定的动作,如列出、装载、卸载 ADS和ARX应用程序,还有退出AutoCAD。应用程序对象也提供通过 Documents(文档集合链接到AutoCAD图形、通过MenuBar和MenuGroups集合链 接到AutoCAD菜单和工具栏,还有通过称为VBE属性链接到VBA IDE。应用程 序对象也是ActiveX界面的全局对象。也就是说应用程序对象的所有方法和属性 在全局名称空间都是有效的。 AutoCAD 的 Preferences 对象通过它可以获取或改变Au

9、toCAD的设置。 AutoCAD 的 Document 对象。是AutoCAD图形文件对象,它代表当前激活的DWG文件。Document对象下 面有Model Space(模型空间和Paper Space(图纸空间对象及Blocks(块、Layers 僱、Plot (出图、Selectionsets 择集、views (视图、utility (功能等一系列对 象(集合,其含义与AutoCAD中相似。Model Space是当前图形文件中图形实体.如 直线、圆、多义线等的集合,每个实体即是一个对象,可通过属性和方法改变实体或 生成新实体。对非图形实体,如层(layer、线形(line type

10、等的访问则通过访问Document对象 下面的相应的集合类型的子对象如Layers、LineTypes等来实现。集合类型的对 象可以使用VB中所有的集合操作方法。Plot对象提供了访问Plot对话框中各选 项的桥梁,使程序具有用不同方式控制AutoCAD出图的能力。Utility对象使用户 在AutoCAD命令行与CAD交互成为可能,通过它可以处理整型、浮点型、字符型 等用户输入,还可以接受点(Point或角(Angle等AutoCAD的特殊量。对象是通过分层方式来组织的,应用程序对象为根对象。这种分层结构被归结 为对象模型。(2 AutoCAD对象的使用要想在AutoCAD中使用Active

11、 Automation技术,首要条件是在VB6.0中选择 AutoCAD作为其对象,并对需要操作的具体对象按照AutoCAD对象的树状结构逐 级遍历。首先打开VB6.0,选择“工程/引用”菜单.在“引用”对话框中选择“ AutoCAD Object Library” o按照VB的编程步骤,写入下面相应的程序代码,即可实现CAD中 相应的操作。下面说明CAD中常用操作的实现方法:a 开始一个应用程序的VB语句Application对象位于AutoCAD层次对象结构的顶层,它代表AutoCAD本身.用 户的应用程序也理所当然从Appliction对象的建立开始。Dim objacad As Aut

12、oCAD.AcadApplication 定义 Autocad 程序对象Dim objdwg As AutoCAD.AcadDocument 八定义 DWG 文件对象Dim objcircle As AutoCAD.AcadCircle,定义 circle 对象Set objacad = New AutoCAD.AcadApplication ,建立 Autocad 程序列程Set objdwg = objacad.Documents.Add 建立名称为 acab 的 DWG 文件Set objcircle = objdwg.ModelSpace.AddCiicleen, rad 在 acab

13、 的 DWG 文件中 画一个圆objdwg.SaveAs (sf厂保存文件objdwg.Close关闭文件objacad.Quit 退出 AutoCADSet objdwg = Nothing释放acab的DWG文件占用的内存Set objacad = Nothing ,,释放Autocad程序列程占用的内存另外.若AutoCAD已启动,则使用下面语句激活它:Set Acadapp = GetObject(, nAutocad.application*也可以使用下面语句启动AutoCAD :Set Acadapp = CreateObject(HAutocad.application11其它:

14、Acadapp.Visible = True,使 AutoCAD 可见Set Acaddoc = Acadapp.ActiveDocument 厂设 Acaddoc 为当前图形文件Set Mospace = Acaddoc.ModelSpace、,设Mospace为当前图形文件的模型空间以上程序段是应用程序初始化的过程,一般对AutoCAD图形文件的操作,主要 是与 Application、Document 和 Model Space 等对象发生关系。Application对象是一系列对象的父对象.可以通过它的属性设置来改变AutoCAD的窗口设置。请看下面代码:acadapp.Top=100

15、, ?设置 AutoCAD 窗口 的位置Acadapp.Left=200Acadapp.Height= 1000,调整 AutoCAD 窗口 的大小acadapp.Width=800Acadapp.Caption=Hmy fiist application八设置 AutoCAD 窗口 的标题b .操作Document对象的VB语句Document对象提供了大多数AutoCAD的文件功能,可以通过它实现对文件的 更新(New、打开(Open、输出(Export、输入(Import等操作,一般要先把 Document对象设为Application对象的ActiveDocument属性,以返回当前图

16、形文 件。Set Acaddoc=Application.ActiveDocument请看下面的例子对文件的操作:Dim dwgname As Stringdwgname = ”c:acad struc.dwg”打开一个已有的CAD文件Acaddoc.Open dwgname建立一个新CAD文件acad.dwgAcaddoc.new(HacadHDocument对象还提供了两个十分有用的方法Set Variable和Get Variable ,通过它们可以得到或改变AutoCAD的系统变量。女山Acaddoc.SetVariable Orthomode, T 打开正交模式Dim cadver

17、As Stringcadvei-=Acaddoc.Get-ariable(Acadver ,获取 AutoCAD 的版本号c.绘制直线对象的VB语句要描绘一条直线至少要有直线的起始点和终止点的坐标,如应用AddLine方法绘制一条直线,起始点坐标为:(10, 10, 0,终止点坐标为:(50, 50, 0程序代码如下:Dim SP(0 To 2 As DoubleDim EP(0 To 2 As DoubleSP(0 = 5SP(1 =5SP(2 = 0EP(0 = 20EP( 1 = 20EP(2 = 0mospace.AddLine SP, EPd 插入文本对象的VB语句文本的主要参数为插

18、入点、文本高度、旋转角和字符串。AddText方法需要 四个参数来产生一个文本。如产生一个Text对象:字符串为“岩土工程勘察CAD “, 插入点坐标为:(10, 10,0文本高度为120。程序代码如下:Dim InsertP(0 To 2 As DoubleDim TextHeight As DoubleDim TextString As StringDim TextObj As ObjectInsertP(0 = 10InsertP( 1 = 10InsertP(2 = 0TextHeight = 120TextString 岩土工程勘察 CAD Set TextObj = mospace

19、.AddText(TextString, InsertP,_ TextHeighte 向图形中插入已有的一个图块的VB语句块处理是AutoCAD中经常使用的技术。块包括两种:一种是外部文件,使用块 引用的方法加入到图形文件中;另一种是文件内部的块,该块的定义包含在当前图 形中。内部块比较容易处理,可以对块进行编辑,也可以生成引用块。而采用外部 文件时,有时为了图形输出的需要必须将块引用用Xbind命令插入到图形文件中。如将一个图形中经常用到的图块BlockNamel插入到点(20, 20, 0,其旋转角为0, 比例因子为lo插入块的函数是InsertBlock ,它返回一个块的引用实例对象Bl

20、ockRef实际上;块也可以用InsertBlock函数插入到其它块中。块是可以嵌套的, 但是它不能引用自身,否则会形成无穷的循环。程序代码如下:Private Sub Command3_Click(Dim BlockName As StringDim BlockRef As ObjectDim InsertP(0 To 2 As DoubleDim Xscale As Double, Yscale As DoubleDim RotAngle As DoubleDim Found As BooleanDim EnTry As VariantInsertP(0 = 100InsertP( l =

21、 100InseilP(2 = 0BlockName = H BlockNamelH查找所有的文件中已有图块For Each EnTry In acadDoc.BlocksIf EnTry.Name = BlockName ThenFound = TrueExit ForEnd IfNext有则插入图块If Found ThenSetBlockRef=acadDoc.ModelSpace.InsertBlock(_InsertP, BlockName, Xscale, Yscale, RotAngleElseMsgBox lit图块名不存在End IfEnd Subf填充图形的VB语句本例提供

22、的是画一个圆心为(3, 3,0,半径为1的圆,然后填充这个圆的内部区 域。具体过程如下:Dim hatchObj As AcadHatchDim ptnName As StringDim ptnType As LongDim b As BooleanDim outerLoop(0 To 0 As ObjectptiiName = HANSI31U 定义填充的样式patnType = 0b = True在模型空间创建一个填充对象Set hatchObj = moSpace.AddHatch(ptnType, ptnName, b呛I建填充的边界,画一个圆心为(3, 3, 0 ,半径为1的圆Dim

23、 center(0 To 2 As DoubleDim radius As Doublecenter(0 = 3: center( 1 = 3: center(2 = 0radius = 1Set outerLoop(0 = moSpace.AddCircle(center, radius把填充边界传递给hatchObj对象,并显示填充 hatchObj.AppeiidOuterLoop (outerLoop hatchObj.Evaluate Acaddoc.Regen True g .保存图形的 VB 语句保存活动 的图形,以下示例以当前名称保存活动图形然后再以新的名称保存该图形。Sub

24、Ch3_SaveActiveDrawing(以当前名称保存活动图形Acaddoc.Save 以新的名称保 存活动图形Acaddoc.SaveAs MyDrawiiig.dwg End Sub当然你会想到去检查活动 图形是否存在有未保存的更改。在退出AutoCAD进程之前或开始一个新的图形之 前这样做是一种好的习惯。使用Saved属性可以确定当前图形是否包含未保存的 更改。测试图形是否有未保存的更改内容,检查图形是否有未保存的更改并由用 户确定是否保存图形(如果取消,则直接跳到结束处。如果确定的话,使用Save 方法保存当前图形,程序如下:Sub Ch3_TestIfSaved( If Not

25、(acaddoc.Saved Then If MsgBox(你是否想保存该图形?,vbYesNo = vbYes Then acaddoc.Save End If End If End Sub亦可使用Save或SaveAs方法保存图形,具体使用方法请查看相关资 料。现在国内有不少介绍ActiveX编程及AutoCAD的资料,但迄今还未发现有完 整讨论AutoCAD的ActiveX编程的书籍,目前最容易得到的资料就是Autodesk公 司编写的随机帮肋,其中有一章ActiveXAutomation,有全部对象的方法、属性 说明。具体内容请查看AutoCAD的随机帮助文件。本节主要论述利用VB的

26、ActiveX编程实现与AutoCAD的连接的技术及相关VB语句。其实用用VB编写 具有DDE功能的程序来控制AutoCAD也是不错的方法,在Windows平台下, VB和AutoCAD都支持强有力的DDE(动态数据交换功能,既能与AutoCAD交换 各种复杂的数据结构,又能向AutoCAD发送命令,由此开发出的应用程序也足能 满足用户的需要,下面我们简单讨论一下这方面的内容。(三)Visual Basic应用 DDE实现对AutoCAD的控制DDE是Windows的强大功能之一,它可以使应用程 序自动地接收由其它应用程序发送来的数据,当传送端的数据有变化时,接收端 的数据也会随之改变,也可将

27、命令或键盘输入传递给其它程序,实现远程控制。 在VB编程环境中,创建应用程序的方法很简单,VB中能和其它Window应用程 序建立DDE通道的控件有文本框,标签和图片框。下面结合简单实例,说明VB 应用程序与AutoCAD间建立DDE通道和交换数据的方法。在VB中启动一个新 项目,参见图(1建立窗体,其中“建立链接”“直线”“标注”,“退出”为命令按钮,标有“Textl”的为文本框,用于建立DDE通道,并输入下 面的事件代码。Option Explicit Private Sub cmdLine_Click(,,画直线Textl .LiiikExecute A3A31ine 3,3 8,8 A

28、3n End Sub Private Sub cmdText_Click( 5,标注 文字 Textl.LinkExecute A3A3text 10,10 1 90 AUTOCAD!A10 End Sub Private Sub cmdLiiik_click(,建立链接 Textl .LinkMode = 0 Textl .LinkTopic = autocad.ddelsystem Textl.LinkMode = 2 End Sub Private Sub cmdExit_click(退出 End End Sub运行此应用程序,注意在运行前,一定要先加载AutoCADo单击“建 立链接”

29、按扭,cmdLink_Click(过程被执行,执行时设置文本框Textl的LinkTopic 和LinkMode的属性,完成VB应用程序与AutoCAD间DDE通道的建立。 LinkTopic属性用于通知AutoCAD由谁来提供数据,它被管道符分成两部分, 第一部分AutoCAD.DDE”为应用程序名,第二部分“System”是通讯的主题。LinkMode属性用于切实建立链接,在LinkMode=0时,表示关闭以前的DDE通 道 在LinkMode=2时,表示以手动模式激活DDE通道。在完成DDE链接后, VB应用程序就可以与AutoCAD间进行数据交换或命令传送了。单击“直线”按 扭,cmdLine_Click(过程被执行,应用程序

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论