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

下载本文档

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

文档简介

VB与AUTOCAD的接口(一)AutoCAD具有开放的体系结构,是一种极其灵活的应用系统,用户可以通过编程的方式对其进行定制,它允许用户和开发者采用各种方法对其进行扩充和修改,即二次开发,能最大限度地满足用户的特殊要求。我们先对以往AutoCAD二次开发中用到的方法简单做一回顾,然后以Visual Basic6.0为编程工具,详细讨论应用ActiveX对AutoCAD进行二次开发的方法。(一)AutoCAD二次开发中用到的方法1 AutoLISP AutoLISP(LIST Processing Language),它是一种表处理语言,是被解释执行的。它被嵌入在AutoCAD内部,作为二次开发的编程语言,她一直是低版本AutoCAD的首选编程语言。2 autocad 的scri pt文件 scri pt 文件是成批集成Autocad命令的文本文件,可以在Autocad中运行,早期国内CAD二次开发中应用较为普遍,这种方法比较容易实现,通过在外部程序中按照要求将绘图参数融合进scri pt文件,然后利用autocad定制菜单实现绘图。3 ADSADS(AutoCAD Development System)是AutoCAD的C语言开发系统,它直接利用C语言编译器,将应用程序编译成可执行的文件在AutoCAD环境下运行,这种可执行的文件叫做ADS应用程序。ADS由于其速度快,又采用结构化的编程体系,因而很适合二次开发机械设计CAD、土木工程CAD等。4 ObjectARXObjectARX是一种崭新的开发AutoCAD应用程序的工具,她以C 为编程语言,采用先进的面向对象的编程原理,提供可与AutoCAD直接交互的开发环境,能使用户方便快捷地开发出高效简洁的Auto CAD应用程序。ObjectARX并没有包含在AutoCAD中,可在AutoDESK公司网站中去下载,其最新版本是ObjectARX for AutoCAD 2000,它能够对AutoCAD进行完整的、先进的、面向对象的设计与开发,并且开发的应用程序速度更快、集成度更高、稳定性更强。ObjectARX是一种特定的C 编程环境,她包括一组动态链接库(DLL),这些库与AutoCAD在同一地址空间运行并能直接利用AutoCAD核心数据结构和代码,库中包含一组通用工具,使得二次开发者可以充分利用AutoCAD的开放结构,直接访问AutoCAD数据库结构、图形系统以及CAD几何造型核心,以便能在运行期间实时扩展AutoCAD的功能,创建能全面享受AutoCAD固有命令的新命令。5 VisualLISPVisualLISP已经被完整地集成到AutoCAD 2000中,她为开发者提供了崭新的、增强的集成开发环境,一改过去在AutoCAD中内嵌AtuoLISP运行引擎的机制,这样开发者可以直接使用AutoCAD中的对象和反应器,进行更底层的开发。用它开发程序的时间被缩短,原始代码能被保密;能帮助大家使用ActiveX对象及其事件;使大家很容易创建和分析LISP程序的运行情况。6 VBAVBA (即Mcrosoft office中的Visual Basic for Applications),被集成到AutoCAD 2000中。VBA为开发者提供了一种新的选择,也为用户访问AutoCAD 2000中丰富的技术框架打开一条新的通道。VBA和AutoCAD 2000中强大的ActiveX自动化对象模型的结合,代表了一种新型的定制AutoCAD的模式构架。通过VBA,我们可以操作AutoCAD,控制ActiveX和其它一些应用程序,使之相互之间发生互易活动。(二)Visual Basic应用ActiveX对AutoCAD进行二次开发(1)AutoCAD的对象模型 如果一个应用程序支持自动化,那么其他应用程序就可以通过其开放对象(Object)对其进行操作。对象本身包含自己的方法和属性。通过对象的方法和属性可以实现对象的操作及状态信息的收集或改变。例如,圆是AutoCAD中的一个对象,它的属性可以是圆心坐标、半径及所在层等性质,方法则有拷贝、镜像等操作。理解AutoCAD的对象模型是对其编程的基础。AutoCAD以层次结构组织对象。在顶层是Application对象(即AutoCAD 本身),其他对象均为Application对象的子对象。在Application对象下面是Preferences(设置)和Document(文档)对象。其中:AutoCAD的Application对象Application对象是应用程序对象。通过该对象,你可访问其它的对象,或指派对象的属性和方法。例如,应用程序对象具有Preferences(参数选择)属性,它返回Preferences(参数选择)对象。该对象提供访问在选项对话框中设定的注册信息(图形信息设定包含在Database Preferences对象)。应用程序对象的其它属性提供你访问应用程序指定数据,如应用程序的名称和版本、还有AutoCAD的窗口大小、位置和可见性等。应用程序对象的方法执行应用程序指定的动作,如列出、装载、卸载ADS和ARX应用程序,还有退出AutoCAD。应用程序对象也提供通过Documents(文档)集合链接到AutoCAD图形、通过MenuBar和MenuGroups集合链接到AutoCAD菜单和工具栏,还有通过称为VBE属性链接到VBA IDE。应用程序对象也是ActiveX界面的全局对象。也就是说应用程序对象的所有方法和属性在全局名称空间都是有效的。AutoCAD的Preferences对象 通过它可以获取或改变AutoCAD的设置。AutoCAD的Document对象。 是AutoCAD图形文件对象,它代表当前激活的DWG文件。Document对象下面有 Model Space(模型空间)和Paper Space(图纸空间)对象及Blocks(块)、Layers (层)、Plot(出图)、Selectionsets(选择集)、 views(视图)、 utility(功能)等一系列对象(集合),其含义与AutoCAD中相似。Model Space是当前图形文件中图形实体,如直线、圆、多义线等的集合,每个实体即是一个对象,可通过属性和方法改变实体或生成新实体。 对非图形实体,如层(layer)、线形(line type)等的访问则通过访问Document对象下面的相应的集合类型的子对象,如Layers 、LineTypes等来实现。集合类型的对象可以使用VB中所有的集合操作方法。Plot对象提供了访问Plot对话框中各选项的桥梁,使程序具有用不同方式控制AutoCAD出图的能力。Utility对象使用户在AutoCAD命令行与CAD交互成为可能,通过它可以处理整型、浮点型、字符型等用户输入,还可以接受点(Point)或角(Angle)等AutoCAD的特殊量。 对象是通过分层方式来组织的,应用程序对象为根对象。这种分层结构被归结为对象模型。(2)AutoCAD对象的使用要想在AutoCAD中使用Active Automation技术,首要条件是在VB6.0中选择AutoCAD作为其对象,并对需要操作的具体对象按照AutoCAD对象的树状结构逐级遍历。首先打开VB6.0,选择“工程/引用”菜单,在“引用”对话框中选择“AutoCAD Object Library”。按照VB的编程步骤,写入下面相应的程序代码,即可实现CAD中相应的操作。下面说明CAD中常用操作的实现方法:a开始一个应用程序的VB语句Application对象位于AutoCAD层次对象结构的顶层,它代表AutoCAD本身,用户的应用程序也理所当然从Appliction对象的建立开始。Dim objacad As AutoCAD.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.AddCircle(cen, rad) 在acab的DWG文件中画一个圆objdwg.SaveAs (sf) 保存文件objdwg.Close 关闭文件objacad.Quit 推出 AutoCADSet objdwg = Nothing 释放acab的DWG文件占用的内存Set objacad = Nothing 释放Autocad程序列程占用的内存另外,若AutoCAD已启动,则使用下面语句激活它:Set Acadapp = GetObject(, Autocad.application) 也可以使用下面语句启动AutoCAD: Set Acadapp = CreateObject(Autocad.application)其它:Acadapp.Visible = True 使AutoCAD可见Set Acaddoc = Acadapp.ActiveDocument 设Acaddoc为当前图形文件Set Mospace = Acaddoc.ModelSpace 设Mospace为当前图形文件的模型空间以上程序段是应用程序初始化的过程,一般对AutoCAD图形文件的操作,主要是与Application、Document和Model Space等对象发生关系。Application对象是一系列对象的父对象,可以通过它的属性设置来改变AutoCAD的窗口设置。请看下面代码:acadapp.Top=100 设置AutoCAD窗口的位置 Acadapp.Left=200 Acadapp.Height=1000调整AutoCAD窗口的大小 acadapp.Width=800 Acadapp.Caption=my first application 设置AutoCAD窗口的标题b操作Document对象的VB语句Document对象提供了大多数AutoCAD的文件功能,可以通过它实现对文件的更新(New)、打开(Open)、输出(Export)、输入(Import)等操作,一般要先把Document对象设为Application对象的 ActiveDocument属性,以返回当前图形文件。Set Acaddoc=Application.ActiveDocument请看下面的例子对文件的操作:Dim dwgname As Stringdwgname = c:acad struc.dwg打开一个已有的CAD文件 Acaddoc.Open dwgname建立一个新CAD文件acad.dwg Acaddoc.new(acad) Document对象还提供了两个十分有用的方法SetVariable 和 GetVariable,通过它们可以得到或改变AutoCAD的系统变量。如: Acaddoc.SetVariable Orthomode, 1打开正交模式Dim cadver As Stringcadver=Acaddoc.Getvariable(Acadver) 获取AutoCAD的版本号c绘制直线对象的VB语句要描绘一条直线至少要有直线的起始点和终止点的坐标,如应用AddLine方法绘制一条直线,起始点坐标为:(10,10,0),终止点坐标为:(50,50,0)程序代码如下: Dim SP(0 To 2) As Double Dim EP(0 To 2) As Double SP(0) = 5 SP(1) = 5 SP(2) = 0 EP(0) = 20 EP(1) = 20 EP(2) = 0 mospace.AddLine SP, EP d插入文本对象的VB语句文本的主要参数为插入点、文本高度、旋转角和字符串。AddText方法需要四个参数来产生一个文本。如产生一个Text对象:字符串为“岩土工程勘察CAD”,插入点坐标为:(10,10,0)文本高度为120。程序代码如下: Dim InsertP(0 To 2) As Double Dim TextHeight As Double Dim TextString As String Dim TextObj As Object InsertP(0) = 10 InsertP(1) = 10 InsertP(2) = 0 TextHeight = 120 TextString = 岩土工程勘察CAD Set TextObj = mospace.AddText(TextString, InsertP,_ TextHeight)e向图形中插入已有的一个图块的VB语句块处理是AutoCAD中经常使用的技术。块包括两种:一种是外部文件,使用块引用的方法加入到图形文件中;另一种是文件内部的块,该块的定义包含在当前图形中。内部块比较容易处理,可以对块进行编辑,也可以生成引用块。而采用外部文件时,有时为了图形输出的需要,必须将块引用用Xbind命令插入到图形文件中。如将一个图形中经常用到的图块BlockName1插入到点(20,20,0),其旋转角为0,比例因子为1。插入块的函数是InsertBlock,它返回一个块的引用实例对象BlockRef实际上;块也可以用InsertBlock函数插入到其它块中。块是可以嵌套的,但是它不能引用自身,否则会形成无穷的循环。程序代码如下: Private Sub Command3_Click() Dim BlockName As String Dim BlockRef As Object Dim InsertP(0 To 2) As Double Dim Xscale As Double, Yscale As Double Dim RotAngle As Double Dim Found As Boolean Dim EnTry As Variant InsertP(0) = 100 InsertP(1) = 100 InsertP(2) = 0 BlockName = BlockName1 查找所有的文件中已有图块 For Each EnTry In acadDoc.Blocks If EnTry.Name = BlockName Then Found = True Exit For End If Next 有则插入图块 If Found Then SetBlockRef=acadDoc.ModelSpace.InsertBlock(_InsertP, BlockName, Xscale, Yscale, RotAngle) Else MsgBox 此图块名不存在。 End IfEnd Subf. 填充图形的VB语句本例提供的是画一个圆心为(3,3,0),半径为1的圆,然后填充这个圆的内部区域。具体过程如下: Dim hatchObj As AcadHatch Dim ptnName As String Dim ptnType As Long Dim b As Boolean Dim outerLoop(0 To 0) As Object ptnName = ANSI31 定义填充的样式 patnType = 0 b = True 在模型空间创建一个填充对象 Set hatchObj = moSpace.AddHatch(ptnType, ptnName, b) 创建填充的边界,画一个圆心为(3,3,0),半径为1的圆 Dim center(0 To 2) As Double Dim radius As Double center(0) = 3: center(1) = 3: center(2) = 0 radius = 1 Set outerLoop(0) = moSpace.AddCircle(center, radius) 把填充边界传递给 hatchObj对象,并显示填充 hatchObj.AppendOuterLoop (outerLoop) hatchObj.Evaluate Acaddoc.Regen Trueg保存图形的VB语句保存活动的图形,以下示例以当前名称保存活动图形然后再以新的名称保存该图形。Sub Ch3_SaveActiveDrawing() 以当前名称保存活动图形Acaddoc.Save 以新的名称保存活动图形Acaddoc.SaveAs MyDrawing.dwgEnd Sub当然你会想到去检查活动图形是否存在有未保存的更改。在退出AutoCAD进程之前或开始一个新的图形之前这样做是一种好的习惯。使用Saved属性可以确定当前图形是否包含未保存的更改。测试图形是否有未保存的更改内容,检查图形是否有未保存的更改并由用户确定是否保存图形(如果取消,则直接跳到结束处)。如果确定的话,使用Save方法保存当前图形,程序如下:Sub Ch3_TestIfSaved()If Not (acaddoc.Saved) ThenIf MsgBox(你是否想保存该图形?,vbYesNo) = vbYes Thenacaddoc.SaveEnd IfEnd IfEnd Sub亦可使用Save或SaveAs方法保存图形,具体使用方法请查看相关资料。现在国内有不少介绍ActiveX编程及AutoCAD的资料,但迄今还未发现有完整讨论AutoCAD的ActiveX编程的书籍,目前最容易得到的资料就是Autodesk公司编写的随机帮助,其中有一章“ActiveX Automation,有全部对象的方法、属性说明。具体内容请查看AutoCAD的随机帮助文件。本节主要论述利用VB的ActiveX编程实现与AutoCAD的连接的技术及相关VB语句。其实用用VB编写具有DDE功能的程序来控制AutoCAD也是不错的方法,在Windows平台下,VB和AutoCAD都支持强有力的DDE(动态数据交换)功能,既能与AutoCAD交换各种复杂的数据结构,又能向AutoCAD发送命令,由此开发出的应用程序也足能满足用户的需要,下面我们简单讨论一下这方面的内容。(三)Visual Basic应用DDE实现对AutoCAD的控制DDE是Windows的强大功能之一,它可以使应用程序自动地接收由其它应用程序发送来的数据,当传送端的数据有变化时,接收端的数据也会随之改变,也可将命令或键盘输入传递给其它程序,实现远程控制。在VB编程环境中,创建应用程序的方法很简单,VB中能和其它Window应用程序建立DDE通道的控件有文本框,标签和图片框。下面结合简单实例,说明VB应用程序与AutoCAD间建立DDE通道和交换数据的方法。在VB中启动一个新项目,参见图(1)建立窗体,其中“建立链接”,“直线”,“标注”,“退出”为命令按钮,标有“Text1”的为文本框,用于建立DDE通道,并输入下面的事件代码。 Option ExplicitPrivate Sub cmdLine_Click() 画直线Text1.LinkExecute 33line 3,3 8,8 3End SubPrivate Sub cmdText_Click() 标注文字Text1.LinkExecute 33text 10,10 1 90 AUTOCAD!10End SubPrivate Sub cmdLink_click() 建立链接Text1.LinkMode = 0Text1.LinkTopic = autocad.dde|systemText1.LinkMode = 2End SubPrivate Sub cmdExit_click() 退出EndEnd Sub 运行此应用程序,注意在运行前,一定要先加载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()过

温馨提示

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

评论

0/150

提交评论