首页 【doc】VB(VBA)在AutoCAD2005二次开发中的应用

【doc】VB(VBA)在AutoCAD2005二次开发中的应用

举报
开通vip

【doc】VB(VBA)在AutoCAD2005二次开发中的应用【doc】VB(VBA)在AutoCAD2005二次开发中的应用 VB(VBA)在AutoCAD2005二次开发中的 应用 第l期四川林勘设计 2006年3月SICHUANFORESTRYEXPLORATIONANDDESIGN No.1 Mar.2006 VB(VBA)在AutoCAD2005二次开发中的应用 罗照,李凯 (1.中南大学信息物理工程学院,湖南长沙410083; 2.重庆市勘测院,重庆400020) 摘要:文章简要介绍了AutoCAD的二次开发平台,通过添加一个菜单项的 实例讲...

【doc】VB(VBA)在AutoCAD2005二次开发中的应用
【doc】VB(VBA)在AutoCAD2005二次开发中的应用 VB(VBA)在AutoCAD2005二次开发中的 应用 第l期四川林勘设计 2006年3月SICHUANFORESTRYEXPLORATIONANDDESIGN No.1 Mar.2006 VB(VBA)在AutoCAD2005二次开发中的应用 罗照,李凯 (1.中南大学信息物理工程学院,湖南长沙410083; 2.重庆市勘测院,重庆400020) 摘要:文章简要介绍了AutoCAD的二次开发平台,通过添加一个菜单项的 实例讲速了将VB和VBA两者结合对AutoCAD2005进行二挺开发的过程, 以及如何在菜单宏中嵌入自己编制的可执行代码,并在AutoCAD2005启动时 自动加栽白定义菜单的技巧. 关键词:AutoCAD}VisualBasic}VBA;二次开发;ActiveXAutomation 中图分类号:S758.6文献标识码:A TheApplicationofVB(VBA)intheSecondaryDevelopmentofAutoCAD2005 LUOZhao.LIKai2 (1.CentralSouthForestryCollege.Changsha410004,China; 2.ChongqingReconnaissanceInstitute,Chongqing400020,China) Abstract:IllustratesthesecondarydevelopmentplatformofAutoCAD,and thedetailsofdevelopingthroughaexamplebasedonVBandVBA.Italso specifiesonhowtoinsertownapplicableprogramsinthemenumacros,and theskillsforautomaticallyloadingownmenuswhenstartingtheAutoCAD 2005program. KeyWordslAutoCAD;VisualBasic;VBA;SecondarydevelopmentIActiveX Automation AutoCAD是目前世界上广泛使用于 各种图形应用有关领域的功能强大的计算 机辅助设计软件,其版本逐年更新,功能更 加齐全和完善.但是由于其通用性很强,造 成在某个特定领域的功能不足和薄弱,如 在绘制数字地形图中某些地物符号仅依据 AutoCAD提供的线形,图案等不能绘出 时,就要求必须针对某一特定需要对Au— toCAD进行二次开发. 1AutoCAD二次开发平台 AutoCAD是一种极其灵活的应用程 序,用户可根据自己的需求对其进行开发 和定制,提供了多种开发工具.其中Au— tolLisp是一种解释型过程语言,它不具备 可视化编程开发的能力,并且它在计算算 法上较弱.VisualLisp需要与AutoCAD 图形进行交互,开发过程繁杂.ObjectARX 是一个基于DLLs结构的C++库,运行 于AutoCAD自身相同的内存映像,对 CAD进行直接调用.但掌握它有一定的难 度. 综合起来考虑,应用VB(VBA)进行 AutoCAD的二次开发具有很大的优势. 它是一种面向对象的可视化编程工具,具 有快速的开发环境,其语法简单,功能强 大,界面清晰,同时还可以弥补AutoCAD 在其他方面如数据处理,数据库建设,界面 设计等等的不足.而VBA是一种与Visu— alBasic近似的编程工具,运行在与应用程 序相同的处理空间中,同时还提供与其他 有VBA编程能力的应用程序的应用集 成,但是它没有独立的开发环境.而本文编 制的一些应用程序,则将两者的优点结合 来运行. ?收稿日期l2005—07--12 作者简介;罗照(1981一),女?重庆人,中南大学信息物理工程学院硕士研究生,主要 研究方向数字化成圉. 罗照等;VB(VBA)在AutoCAD2005二次开发中的应用53 AutoCAD2005是AutoCAD产品的 最新版本之一,其界面更加美观,功能更加 强大.它继续保留了老版本中的ActiveX Automation对象接口,使其它应用程序能 通过它提供的接口访问AutoCAD的对 象,对每个对象的属性,方法和事件进行操 作. 2ActiveXAutomation技术 ActiveXAutomation也称为ActiveX 自动化服务功能,以前也称为对象链接和 嵌入(OLE).它允许Windows中应用程序 之间进行相互的对话,沟通和控制.Ac. tiveX将应用程序模块化,把有关的数据和 操作封装起来,以对象的形式提供给另一 个应用程序,而用户不必了解其详细的内 部实现过程.ActiveXAutomation过程以 动态链接库的形式提供,实现了代码的共 享. 3AutoCAD对象模型 AutoCADActiveX接口有五种类型 的对象:图形实体,非图形实体,例如线型, 标注样式等;结构实体,例如图层和图块 等;视图实体;图形和AutoCADVBA应 用程序. 4应用VB(VBA)对AutoCAD进行开发 的过程 要使用各种开发工具对AutoCAD进 行调用,首先必须引用它的各层对象. 进入VBA的IDE开发环境后,就将 自动加载Thisdrawing图形对象,可对其 属性,方法和事件进行调用和操作了. 当我们使用VB对AutoCAD进行二 次开发时,由于VB与AutoCAD运行在 不同的内存空间,所以首先必须将其与 AutoCAD进行连接,其连接的具体方法 是:打开工程菜单,选择引用,复选Auto— CADZ005TypeLibrary.再编写VB程序 代码,创建AutoCAD对象,启动运行Au— toCAD.我们可以看到,只要将VBA中的 Thisdrawing图形对象改为VB中的Au— toCAD应用程序活动文档对象即可实现 相同的功能.其具体代码如下: DimMyAppAsAcadApplication DimacdocAsObject DimmodelobjAsObject OnErrorResumeNext'如果遇见错 误,则执行下一行 SetMyApp—GetObject(,"auto— cad.Application) '获得AutoCAD程序对象 IfErrThen Err.Clear MsgBoxErr,Description SetMyApp=CreateObject(auto— cad.application") IfErrThen Msgbox没有安装AutoCAD,请安 装" ExitSub EndIf EndIf MyApp.Visible=True'使Auto— CAD对象可见 同时,还要设置操纵AutoCAD中文 档对象和模型空间的方法: Setacdoc=MyApp.ActiveDocument Setmodelobj=acdoc.ModelSpace AutoCAD中的菜单宏是指的当单击 菜单时执行的一系列操作,宏可以只是完 成操作的按键记录,或是复杂的指令组合 以及执行AutolISP,DIESEI或者Ac— tiveX的程序代码,在创建了菜单后,用户 可以使用Macro属性来修改菜单宏. 我们可能已经发现AutoCAD中的菜 单宏并不能直接执行VisualBasic语言的 程序命令,如果我们不想利用AutoIISP 54四川林勘设计2006年第i期 语言进行宏编制的话,那么实现复杂的指 令将会有一定的困难.解决这一问题的方 法是先将VB语言(或者是其他语言如VC 等)写成的执行这一指令的应用程序生成 可执行文件(.exe),再在AutoCAD菜单 宏中进行加载.方法如下: Macro=chr(3)+chr(3)+"START" +chr(13)+"应用程序名.exe"+chr(13) 也可以把宏中的START命令改为: SHELI,但执行宏的速度不如START 快.START是一个Windows系统命令, 对于定义AutoCAD外部的命令非常有 用,它可以弹出一个新的命令窗口或者连 接到一项新的应用,这项命令对于Auto— CAD是独立的.同样SHELi也是一项操 作系统命令,但是它的使用却有一些限制. 解决这一问题还有一个方法,就是先 将一些指令写成VBA的宏,再将VBA宏 加载进下拉菜单宏中,由于VBA是内嵌 于AutoCAD2005内存环境的,因此这个 方法加载外部命令执行速度更快.方法如 下: Macro=chr(3)+chr(3)+Chr(Asc ("一")) +chr(13)+VBARUN"+Chr(13) +"Filename.dvb!ProjectName. MacroName" +chr(13) 其中:Filename.dvb为工程的文件 名,ProjectName为工程的名称,MacroN— ame则是要执行的宏的名称,VBARUN 是AutoCAD的一个指令. 5开发实例 本文给出一个菜单开发实例,进一步 说明应用VB(VBA)对AutoCAD进行二 次开发的过程. 首先在AutoCAD中制作一种特殊线 型,以适应本领域需要,如根据测量规范中 陡坎的线型制作了"陡坎"线型文件,以线 型文件的 格式 pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载 (.1in)保存在Auto— CAD2005的搜索路径中.增加Auto— CAD2005的支持文件搜索路径在菜单中 单击"工具"菜单项,选择"选项",在"文件" 选项卡中进行修改.. 新建一个VB工程,移除Form窗体, 添加一个模块,在其代码中写入增加菜单 项的代码(由于篇幅限制,仅列出了部分代 码): SetMenultems1=;;MenuItem.Ad— dMenultem(O,"加载线形",macrostr1) SetMenultems2:==Menultem.Ad— dMenultem(1,"展点",macrostr2) SetMenultems63=Menultem.Ad— dMenultem(2,"将展成的点连线", macrostr3) 其菜单宏为: Macrostrl—Chr(3)+Chr(3)+ Chr(Asc("一"))+"VBARUN"&Chr (13)&"e:/project1.dvb!加载线型"& Chr(13)"'VBARUN"执行预先写好的 VBA宏"加载线型" macrostr2一Chr(3)+Chr(3)+ "START"&Chr(13)&"e:/展点.exe"& Chr(13) "START"执行外部程序"展点" macrostr3一Chr(3)+Chr(3)+ Chr(Asc("一"))+"VBARUN&Chr (13)&"e:/project1.dvb!连线"&Chr (13) 其中加载线型菜单项宏被制作成了一 个VBA宏,在程序执行时通过VBARUN 命令自动加载它,在写文件名的路径时没 有使用"\"而是使用了"/"是因为在执行 AutoCAD宏时反斜线字符(\)会使宏暂 停等待用户输入,在指定文件路径时应用 正斜线(/)代替.该VBA宏的代码为: 罗照等:VB(VBA)在AutoCAD2005二次开发中的应用55 坎", ThisDrawing.Linetypes.Load"陡区别 "D:programfilesautocad2005(Pt) support\''陡坎".1in 在数字化测图过程中,由于大多数测 绘单位不具备电子平板测图条件,通常是 采用全站仪外业采集,绘制草图,将测得数 据记录在全站仪中或PC——E5OO电子手 簿中,内业成图时将测得数据通过数据电 缆连接到计算机中,自动在AutoCAD中 将测得点画出(称为展点),并且可对各种 不同类别的点分层(如点层,点号层,高程 层等),不同的层以不同的颜色显示,用户 可以对层的的属性进行操作. 下面就是自动在AutoCAD中画点的 VisualBasic程序代码(部分),最后将其 制作成可执行文件(e;\展点.exe)供Au— toCAD菜单宏调用. 假若数据采集格式为: 点号,X坐标,Y坐标,z(高程) Open数据文件名ForInputAs#1 setPoints—acdoc.Layers.Add(" 点")'增加"点"图层 Points.Color=acBlue SetHeights=acdoc.Layers.Add(" 高程") '增加"高程"图层 Heights.ColoracGreen Setnos—aedoc.Layers.Add("点 号") '增加"点号"图层 nos.Color=acRed DoWhileNotEOF(1) Input#1,N0,X,Y,z '将文件中数据分别附值给这几个变 最 Pt(O)Y:Pt(1)=X:Pt(2)一0 '测量坐标系与AutoCAD坐标系的 SetAdPoint—modelobj.AddPoint '在模型空间中画点 AdPoint.Layer一点" '所画点属于"点"图层 SetAdNO=modelobj.AddText (Str(NO),Pt,1#) '在模型空间中绘制点号 AdNO.Layer一"点号" Ht(O)一y+0.9:Ht(1)X:Ht (2)一0 SetAdHeight—modelobj.AddText (Str(z),Ht,2#) AdHeight.Layer一"高程" Loop Close#1 acapp1.Application.ZoomExtents Form1.Visible=False EndSub 将展成的点连线的VBA代码为: SetPtLine=ThisDrawing.Layers. Add("点连线") '创建一个新的图层 PtIine.color===acCyan Dimk DimCoordAsVariant ForEachentryInThisDrawing. ModelSpace Ifentry.EntityType=acPointThen i=i+l EndIf Next '获取模型空间中的点数目 ReDimentrycopys(i一1,2) '根据获得的点数目重新定义数组维 数 k==0 56四川林勘设计2006年第1期 ForEachentryInThisDrawing. ModelSpace Ifentry.EntityType—acPointThen Coord—entry.Coordinates '获取实体坐标 entrycopys(k,O)一Coord(O) entrycopys(k,I)一Coord(1) entrycopys(k.2)一Coord(2) k—k+1 EndIf Next DimStPt(OTo2)AsDouble DimEtPt(OTo2)AsDouble Forj一1Toi一1 StPt(O)一entrycopys(j—I,O) StPt(1)entrycopys(j一1,1) StPt(2)=entrycopys(j—I,2) EtPt(O)一entrycopys(j,O) EtPt(1)一entrycopys(j,1) EtPt(2)一entrycopys(j,2) SetLines—ThisDrawing.Mod— elSpace.AddIine(StPt,EtPt)'将当前点 与前一个点连线 Lines.Layer一"点连线"'将连成的 线置于"点连线图层 Nextj ThisDrawing.Application.ZoomEx— tents 如果要在VisualBasic环境中写入程 序,则只要将VBA中的ThisDrawing对 象改为AutoCAD对象的活动文件对象, 就可以执行相同的操作,但由于是外部程 序,执行速度将会慢一些.再将程序写成一 个可执行文件(.exe)供AutoCAD菜单宏 调用. 6使AutoCAD运行时自动显示自己的 菜单 我们将刚才制作的加载各级菜单的 VB工程制作成了可执行程序"E:\菜单. exe,运行文字编辑工具,输入以下代码; (defunS::STARTUP() (CommandSTARTE:\菜单. exe)) 将文件另存为acad.1sp,保存在Au— toCAD的支持文件搜索路径下.这样在每 次启动AutoCAD时,将会运行Lisp程序 acad.1sp,从而启动菜单加载程序E:\菜 单.exe,在启动时就能够自动显示自己的 菜单了. 从以上我们可以看出,利用VB (VBA)对AutoCAD进行二次开发,要比 用c++,AutoIISP等语言简单,方便,实 用,只需要具备BASIC语言基础,就可充 分利用AutoCAD强大的图形处理功能, 和VB(VBA)在算法和界面等方面的优势 开发出适合本专业领域内的各种应用程 序.另外VB操纵数据库的功能很强,我们 还可以建立基于AutoCAD的各种图形数 据库管理系统. 7参考文献 1李风华.AutoCAD2002/2000VBA开发指南[M].北京:清华大学出版社.2001 2张晋西.VisualBasic与AutoCAD二次开发[M].北京:清华大学出版社,2002
本文档为【【doc】VB(VBA)在AutoCAD2005二次开发中的应用】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_620441
暂无简介~
格式:doc
大小:29KB
软件:Word
页数:11
分类:生活休闲
上传时间:2018-10-02
浏览量:39