水利行业快速进行CAD二次开发的方法探讨_第1页
水利行业快速进行CAD二次开发的方法探讨_第2页
水利行业快速进行CAD二次开发的方法探讨_第3页
水利行业快速进行CAD二次开发的方法探讨_第4页
水利行业快速进行CAD二次开发的方法探讨_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

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

文档简介

1、水利行业快速进行CAD二次开发的方法探讨作者简介:姓名:詹万熹 出生年:1980 性别:男 民族:水族 籍贯:贵州省黔南州三都水族自治县 职称:(本科学士学位) 主要从事工作或研究:水利水电工程设计及相关工作联系电话通讯地址:贵州省安顺市水利水电勘测设计院(551000)【摘要】本文介绍了如何有效应用AUTOCAD二次开发工具,解决普通工程设计人员在绘制工程图纸的过程中,希望自行编制小程序扩充商业软件功能,提高绘图效率的要求。【关键词】CAD AUTOCAD 二次开发 ARX VBA LISP 渠道纵断面1 概述在计算机迅速普及的今天,CAD已不再是新鲜名词。尤其是在

2、工程设计领域,手工画图已基本被CAD软件所代替。在我国应用最广泛、最普及的CAD工具是AUTOCAD,该软件以其界面友好、使用方便、功能强大的特点,也被广大的水利工程设计人员所接受。但在水利工程领域,由于水利工程设计的特殊性、复杂性较高,而且各设计单位的设计方法各有不同,造成了各软件公司所开发的CAD软件很难被水利设计单位所广泛接受。因此,尽管市场上的商业专用软件很多,但能够切实满足水利工程设计需要的软件并不多,甚至许多水利设计单位购置的软件根本就不能发挥其应有的作用。通过多年的AUTOCAD软件二次开发经验,笔者认为:即使是普通的水利工程设计人员,只需掌握少量的AUTOCAD二次开发的知识,

3、就可以在直接应用AUTOCAD软件或其它商业软件进行工程设计的同时,自行编写一些实用的小程序来提高自己甚至整个单位的工程设计效率。下面以笔者在水利工程中成功应用AUTOCAD进行二次开发的实例进行探讨。在各级设计院中,最常见、最繁琐的设计任务之一,得属“渠道设计”,特别在绘制渠道纵断面图纸时,一个高程或是一个坡降的改动,其后面的数据及图纸全部会跟着要求更改,如果后面的渠段比较长的话,这个改动量将显得更突出。以前我们都是通过单个图形分别修改的方法来实现,不但效率低,而且容易产生错误。通过使用AUTOCAD进行二次开发,笔者成功地制作了渠道纵段面绘制等软件,而且在四年的时间里,笔者陆续使用AUTO

4、LISP、VBA对渠道纵段面绘制软件进行了多次大的改动,成功总结了一套工程领域使用AUTOCAD进行二次开发实现自动绘图的技术。2 开发工具的选用AutoCAD提供了三种主要的开发工具,分别是:使用C/C+的ObjectARX,VB/VBA的ActiveX开发,以及AutoLISP/VisualLISP开发工具。通过比较我们可以知道使用哪种开发工具更为适合:ObjectARX:在三种开发工具中,这种工具拥有对AutoCAD最深入的控制能力,能够提供最多类型的窗体。使用ARX可以向AutoCAD注册自己的命令,用户运行你的程序时无需了解关于AutoCAD更多的知识。这种便利的代价就是编制ARX程

5、序比VBA和LISP程序需要花费更多的时间,因此用来编制简单的绘图工具有点浪费了。要掌握ARX的前提是对C和C+非常熟悉。ARX能够访问很多的AutoCAD底层工具(这些东西可能VBA和LISP并不能访问),这是大多数开发者选择ARX的主要原因,他们需要作一些用其他两种开发工具不能完成的工作。此外,这也是唯一一种能够确保代码安全(不被别人阅读或非法复制)的开发工具。VBA:如果你是第一次开发AutoCAD应用程序,那么这就是最适合你的工具!这种工具对初学者来说非常友好,Visual Basic的代码阅读及制作起来非常容易,但这种开发工具没有ARX和LISP那么多对AutoCAD访问的方式(注:

6、这也有情可原,毕竟VBA和另外两种开发工具比起来年轻得多!)如果你对VBA非常精通,也可以通过VBA访问命令行的函数来调用其它LISP文件,从而就能实现LISP所能完成的所有功能!对VBA来说,最大的遗憾就是不能向AutoCAD注册命令,但也有变通的方法,那就是利用LISP来实现自动调用并执行VBA文件。和LISP结合起来使用是VBA扩展功能的捷径。在所有的开发工具中,这是一种开发速度最快的工具,特别是在开发需要图形界面(对话框)的程序时,最为理想。LISP:指AutoLISP和VisualLISP,首先简单描述一下AutoLISP,AutoLISP兼备快速开发工具的特点和COBOL语言的灵活

7、性,很多开发者选择LISP的主要原因是“这种语言让我感到很顺手?”。对很多人来说,这是他们第一次开发AutoCAD所使用的语言(笔者也是这样),并且能很快使用该语言进行开发。另一个使用这种开发工具的原因是,你所工作的环境可能已经具有很多LISP程序(的确,AutoLISP的使用历史最为悠久)。学习LISP比VBA难,却又比C和C+简单。LISP是最初的开发工具,大量的LISP程序库存在于世界各地。用VBA重写这些东西不值得,也不容易(不如在VBA里直接调用它们)。综合以上,笔者最终选择了主要使用VBA来进行AUTOCAD二次程序的开发。原因是VBA易学易用,代码方便阅读及修改。VBA的应用非常

8、广泛,在OFFICE等软件里也存在,而且其适用范围还在不断扩大。3 利用VBA如何实现自动绘制工程图纸笔者以如何利用VBA完成渠道纵断面绘制软件为例说明VBA于自动绘制工程图纸方面的应用3.1数据输入方式的选用要实现自动绘制工程图纸,当然所绘图纸的各种参数需要预先输入。数据输入方式的选用很重要,因为它会直接影响软件的使用方便程度,也会影响到你编程时获取绘图参数的难易程度。使用AUTOCAD的VBA可供选用的数据输入方式主要有以下几种:一、从AUTOCAD命令行获取用户输入的字符串值二、从诸如文本框的各类控件中获取用户输入的字符串值三、读取文本文件,从中获取数据分析如下:渠道纵断面绘制软件是一个

9、需要用户输入大量数据的软件,这么多的数据,通过AUTOCAD命令行输入是不现实的,也不方便修改;如果通过VBA的控件输入,其一很难找到合适的控件,其二即使找到了合适的控件,也会大大增加程序最终的大小。所以,笔者最终选择了读取文本文件,从中获取数据的输入方式。可是让用户在记事本里输入大量的数据也是一个麻烦事,输入及查看也不太方便,于是结合EXCEL文件可以另存为“CSV(逗号分隔)(*.csv)”这种以逗号分隔的文本文件的方法,笔者最终决定采用EXCEL来进行数据的输入。3.2软件界面设置及各控件的作用软件界面按如下设置:当单击按钮“修改数据文件”的时候,就会弹出EXCEL软件来让你修改数据文件

10、,可以利用AUTOCAD命令中的SHELL命令实现,代码如下:ThisDrawing.SendCommand "shell " & Chr(34) & dvbpath & "纵断面绘制数据.csv" & Chr(34) & Chr(13)当单击按钮“初始化数据文件”的时候,就会将数据文件里的输入数据清零,采用了覆盖文件的方法实现,代码如下:FileCopy dvbpath & "纵断面绘制数据_初始化.csv", dvbpath & "纵断面绘制数据.csv"

11、当单击按钮“数据文件参考”的时候,就会打开一个预制的完整数据文件来让用户参考,实现代码如下:ThisDrawing.SendCommand "shell " & Chr(34) & dvbpath & "纵断面绘制数据_参考.csv" & Chr(34) & Chr(13)当这个软件的主窗口被激活的时候,它就会从数据文件里自动调用相应的所有图号到列表框列表中“第一步:打开模板”按钮的作用是打开一个存于软件目录下的预制模板,这个模板完成了文本样式等各种样式的初始化,同时也存储了所有输出图纸所必需的块定义。为什么要使用

12、模板呢?具体原因就两个:其一、模板可以预制好图纸样式,同时也能预存很多绘图时需要插入的块定义,用插入块的方法来插入对象远比使用VBA的绘图命令简单,从而实现代码的大大简化;其二、模板保存的时候,它会类似新建的文件那样提示你需要存储到哪个目录,这样就不会产生误操作,将原始的模板给覆盖掉,产生绘图结果的错误。调用模板的代码如下:ThisDrawing.SendCommand "shell " & Chr(34) & dvbpath & "纵断样板.dwt" & Chr(34) & Chr(13)“第二步:输出图纸”按钮

13、的作用就是在打开预存的模板后,读取相应数据文件,将列表框内所选择图号所包括桩号内的渠道纵断面图纸输出。这部份代码较多,插入方法于3.3章节介绍。3.3利用VBA如何在AUTOCAD里插入各类对象3.3.1绘图思路这部份内容是开发渠道纵断面绘制这个软件的核心。首先我们知道AUTOCAD里的VBA实现自动绘图的方法不外乎就是两类:一、可以使用 InsertBlock 方法将块或整个图形插入到当前图形中二、利用VBA可以直接创建和编辑多种AUTOCAD图元,比如直线、文字、圆等等我们先分析渠道纵断面绘制这个软件所需绘制的各类对象。可以知道,在这个软件里,主要就是需要绘制直线和文字对象。其余的对象可以

14、靠插入块来实现绘制。故我们实现渠道纵断面自动绘制这种功能就需要完成以下工作:一、制作合适的模板二、使用VBA命令在相应的位置插入相应块三、使用VBA命令绘制及编辑直线和文字具体的实现方法见面的章节3.3.2如何制作合适的模板在这个软件里,模板所需完成的任务包括:一、设置图层,这样输出的各种对象就可以将它移至各层内统一进行控制二、设定文字样式三、将每张图中都有且完全相同的对象预先绘出于模板中四、将VBA需要插入的块全部在模板内定义好完成以上任务后,将AUTOCAD图纸存为渠道纵断面绘制软件目录下“纵断样板.dwt”3.3.3如何使用VBA命令插入块使用VBA命令插入块的方法如下:insertio

15、npnt(0) =插入点X座标#insertionpnt(1) =插入点Y座标#insertionpnt(2) =插入点Z座标# Set blockrefobj = ThisDrawing.ModelSpace.InsertBlock(insertionpnt, "块名", 1#, 1#, 1#, 0)3.3.4如何使用VBA命令绘制及编辑直线和文字使用VBA命令绘制直线的方法如下:startpoint(0) =起点X座标#startpoint(1) =起点Y座标#startpoint(2) =起点Z座标#endpoint(0) =终点X座标#endpoint(1) =终点

16、Y座标#endpoint(2) =终点Z座标#Set lineobj = ThisDrawing.ModelSpace.AddLine(startpoint, endpoint)使用VBA命令绘制文字的方法如下:textstring = 输入文字内容height = 设定字高insertionpoint(0) = 设定插入点X座标insertionpoint(1) = 设定插入点Y座标insertionpoint(2) = 设定插入点Z座标Set textobj = ThisDrawing.ModelSpace.AddText(textstring, insertionpoint, heigh

17、t)使用VBA命令改变直线所属图层的方法如下:lineobj.Layer = "图层名"使用VBA命令更改直线线型比例的方法如下:lineobj.LinetypeScale = 线型比例的值使用VBA命令90度旋转文字的方法如下:textobj.Rotate insertionpoint, 3.1415926535898 / 23.4如何才能实现软件在AUTOCAD中的自动加载及命令行调用软件制作并调试好了以后,我们当然希望每次它都能在AUTOCAD启动的时候自动加载,而当我们想使用它的时候,在命令行输入一个命令就可以调用它。这种想法完全可以实现,方法如下:在我们每次启动

18、AutoCAD 后,启动绘图任务时将加载AUTOCAD安装目录下的acad.lsp文件。我们可以利用acad.lsp文件来实现自动启动我们的软件,在acad.lsp文件里我们加入如下代码:(defun c:qdcad() (command "vbarun" "qdzdmhz")(command "_vbarun" "程序所在路径及DVB程序的名称,注意“/”符号要变成“”符号.dvb!load")(command "ACADLSPASDOC" "1")代码的作用解释如下:(d

19、efun c:qdcad() (command "vbarun" "qdzdmhz")这三行代码的意思是:如果我在命令行里输入了“qdcad”这个命令并执行,那么请运行名称为“qdzdmhz”的宏运行这个宏是为了调用我们所做的DVB程序的主窗口,所以我们得在渠道纵断面绘制程序的模块1里添加如下宏来打开UserForm1这个主窗口。Sub qdzdmhz() UserForm1.ShowEnd Sub再来看看其它代码,如下这行代码:(command "_vbarun" "程序所在路径及DVB程序的名称,注意“/”符号要变成“”

20、符号.dvb!load")它的作用是在acad.lsp运行的时候,加载我们所做的渠道纵断面绘制程序,加载的原理是调用一个内容为空的宏“load”从而自动将这个宏所属的DVB程序加载,所以我们要在渠道纵断面绘制程序的模块1里添加如下内容为空的宏Sub load()End Sub最后一行代码:(command "ACADLSPASDOC" "1")由于acad.lsp文件用于特定应用程序的启动例程,因此 acad.lsp 文件中定义的所有函数和变量只能在第一个图形中使用。如果要在每一个图形中都使用acad.lsp文件,须得更改参数“ACADLSPA

21、SDOC”的值为“1”,故我们在acad.lsp里再加入这行代码,每次都自动将参数值改为1,这个在每个图形中都会自动调用acad.lsp文件了。至此,我们只要在命令行输入“qdcad”这个命令,就会自动弹出我们做好的渠道纵断面绘制这个程序主窗口,程序就能顺利运行了。4 总结综上所述,大家可以看到即使是普通的水利工程设计人员,只要肯花一点时间,有选择地学习一些AUTOCAD二次开发工具,那么在绘制工程图纸的过程中,完全可以自行编制一些小程序来扩充商业软件的功能,从而提高自己的绘图效率。本文章中所举例的渠道纵断面绘制软件,大家可以到如下地址下载来观摩学习,祝大家学习过程顺利,希望以后水利行业的各种小

温馨提示

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

评论

0/150

提交评论