1、第4章 电气工程中AutoCAD绘图软件 应用与二次开发,4.1 AutoCAD软件简介AutoCAD是美国AUTODESK公司1982年推出的辅助绘图软件。 AutoCAD具有二维和三维绘图功能,还有专用编程语言Autolisp为用户提供二次开发的方便。 AutoCAD的作图功能很强。 AutoCAD可用于IBM/PC系列及其兼容微机,并支持100多种外部输入、输出设备。 AutoCAD文件可与其他软件包、数据库及主要计算机辅助设计系统交换。AutoCAD支持基本图形交换规范(IGES),大部分系统的图形均可转到AutoCAD上。 AutoCAD具有开放式的体系结构,便于二次开发,采用菜单提
2、示。 全世界已有2000多所大学和教育机构以AutoCAD进行教学。很多专业设计师,包括建筑、工程师、科研人员以至大公司(如波音飞机公司)都在使用AutoCAD。,4.1.1 AutoCAD运行环境以AutoCAD2000版2002版为例。 硬件环境: 主机: IBM-PC系列及其兼容机 输入输出设备:显示器、键盘、鼠标、数字化仪、绘图仪及打印机。硬盘、软盘及光盘驱动器。 软件环境:windos98/2000/NT/XP等。,4.1.2 AutoCAD使用要点1) 基本概念术语 坐标(coordinates):绘图画面中基本图素点位置描述,一般使用直角坐标系。(0,0)表示图的左下角,与屏幕物
3、理坐标不同; 绘图单位:可根据绘图要求选英制(英时)或公制(厘米、毫米)。 基本图素:点、线、圆、弧、矩形、多段线、椭圆等; 图块:将多个基本图素实体归并在一起形成一个新的图形对象,称为图块,图块可被调用或插入到图形的任何位置。 绘图界限:绘图坐标中的矩形周界; 分辨率(Resolution):显示器的精确程度,由显示器的x*y(点数)表示; 图形文件:指名为*.DWG的图形映象文件及*.DXF图形交换文件。 图层:将构成图形的图元素按某种特征类型分为不同的组合,各组合可同时显示,也可部分组合显示,这种组合称为层。如一个城市平面图可用一层表示出地形、主要街道,另一层表示建筑、名胜古迹、再一层表
4、示电力网络等。,2) 操作过程 (1) 启动: (2) 交互式图形编辑:使用命令来创建、显示、修改和绘制图形,命令前进行对象选择; 绘图常用命令: POINT 画点 SOLID 实心多边形 LINE 画线 TRACE 画线宽 PLINE 多画线 SKETCH 徒手画线 RECTANGLE 矩形 TEXT 书写单行文字 POLYGON 画正多边形 MTEXT 书写多行文字 CIRCLE 画圆 BLOCK 定义块 ARC 弧 WBLOCK 适应 文件 ELLIPSE 画椭圆 INSERT 插入块 DONUT 画圆环 XPOLDE 分解块 MLINE 画平行线 BHATCH 图案填充, 显示控制命令
5、: ZOOM 缩放视口 PAN 平移视图 REDAW和REGEN 重绘图形 编辑命令: ERASE 删除对象 STRETCH 移动拉伸 MOVE 移动 COPY 复制对象 ROTATE 旋转 MIRROR 镜象对象 SCALE 缩放 ARRAY 对象阵列 设置命令: LAYER 设置图层 PLOTSTYLE 打印样式 COLOR 设置颜色 PLOT 图形输出 LINETYPE 设备当前线型 LAYOUT 创建布局 LINEWEIGHT 线宽, 对象查询命令 LIST 查询对象 DIST DBLIST 所有对象 AREA 面积和周长 ID 查点坐标 MASSPROP 查物理特征 (3) 命令输入
6、:从命令窗口经键盘键入命令或经屏幕菜单由数字化仪、鼠标按纽输入。 (4) 数据输入:绘图点以绝对坐标、相对坐标或极坐标方式输入。 (5) 绘图仪绘图,4.1.3 AutoCAD的主要特点 (1)具有完善的图形绘制功能。 (2)具有强大的图形编辑功能。 (3)便于用户二次开发。AutoCAD提供了多种开发工具,如AutoLISP及VisualLISP,objectARX2000,VBA,VB,ActiveX等,使用户能方便地进行二次开发。 (4)提供了多种接口文件,AutoCAD提供了多种接口文件(如DXF,SCR,IGES等)。便于AutoCAD与高级语言之间进行信息交换。 (5)允许用户定制
7、AutoCAD系统参数和标准文件, (6)具有良好的用户界面和高级辅助功能 (7)能连接外部数据库,4.1.4 AutoCAD主要功能 1) 交互作图功能 (1)提供一组图元实体:点、直线、圆、弧、文本字符串、多义线、图块等。 (2)图形编辑功能:含有删除、移动、复制、镜像、阵列、缩放 、旋转、分解等。 2) 辅助功能 (1)找图元特殊位置(如直线端点、中等); (2)画阴影线、标注尺寸、分层、查询; (3)显示控制有缩放、平移、浏览、重画、放弃; (4)用户支授、命令文件、图形交换文件; (5)菜单命令。 3) 高级扩展功能 高级扩展功能有画折线、阴影线、图案填充、尺寸标注、草图、幻灯片及三
8、维绘图等。,4.1.5 AutoCAD与高级语言的接口 1) 图形交换文件方式 DXF是一种图形文件交换格式。其中ASCII码格式,严密、易读,得到广泛应用。 (1) DXF文件作用 (2) DXF文件结构 标题段(Header):55个变量,表明图形总信息; 类段(Classes) 表段(Tables):含线型、图层、颜色、字体、视图表; 块段(blacks):组成各个图块的实体; 实体段(Entilies) 对象段(objects) 图形预览段(thumbnailimge) (3) 组码:DXF文件由段组成,每段又由许多组码和组值组成。 2) 用程序生成和读取图形交换文件 1生成图形交换文
9、件,用高级语言(FOR、C、B等)编辑图形交换文件用以在AutoCAD中生成图形; 2读图形交换文件,使用或修改已有图形。,4.2 AutoCAD软件的二次开发4.2.1 二次开发的意义及特点 软件的二次开发,是指在现有通用AutoCAD软件基础上,为增强和拓展在某一专业领域的应用范围,提高和完善软件性能,更有针对性地适应用户要求所作的软件开发工作。 1) 二次开发的意义 AutoCAD类软件功能不能满足电气工程用户的要求。必须对某些功能作修改和补充。 2) 二次开发的特点 (1)继承与提高。 (2)专业性强 (3)开发相对简单。 (4)实用性好。,4.2.2 二次开发内容及功能要求1) 二次
10、开发的内容 (1)完善人机交互系统、界面菜单、图标,对活框等设计。 (2)数据库、图形系统与高级语言的接口设计。 (3)程序化图形的自动生成模块设计,如自动生成阻抗图、保护配合图等。 (4)工程字符和汉字标注功能。 (5)国家标准与规范数据库建立。 2) 二次开发思路 以交互图形系统AutoCAD为主要支撑,以高级语言为系统连接及数据转换的枢纽,开发集设计、图形绘制、数据管理及分析优化计算于一体的电气CAD软件系统。,3) 二次开发软件应具备的功能 (1)交互式图形处理功能。可交互式生成和编辑图形。 (2)设计计算功能。由用户给出的原始数据,自动完成计算及查表,最后输出结果。 (3)设备材料的
11、选择与校核。 (4)数据及图文资料管理。 4) 开发要求 (1)结果正确 (2)操作方便 (3)人机交互界面友好,4.3 基于Autolisp的AutoCAD二次开发AutoLISP语言是一种嵌入在AutoCAD内部的LISP编程语言,用它可以对AutoCAD进行二次开发。4.3.1 Autolisp语言简介1) AutoLISP语言特点 1AutoLISP语言是一种非编译、解释性的语言。 2AutoLISP语言一切成分都是以函数的形式给出的。执行AutoLISP程序就是执行一些函数,并可再调用其它函数。 3AutoLISP语言的主要控制结构是采用递归方式。 4AutoLISP把数据和程序统一
12、表达为表结构。 2) AutoLISP数据类型 AutoLISP数据类型主要有9种:整型数、字型数、字符串、符号和变量、表、文件描述符、实体名、选择集、VLA对象。,3) AutoLISP程序结构 采用 “前缀表示法”,即把运算符放在表的第一个元素的位置,后面为其它参数。如:X=50.0和X=(A+B)* C在AutoLISP中分别写成下述形式: (step x 50.0)和(step x (+AB)C) AutoLISP源程序是一种文本文件,可以用任何一种文本编辑器进行编辑。 4) Visual LISP工具 Visual LISP(VLISP)是Autodesk公司为了增强AutoLISP
13、程序开发能力,而设计的工具软件,内嵌于AutoCAD2000中 (1) Visual LISP提供的主要功能如下: 本文编辑器。 书写格式管理器。 提供变量和表达式查看功能。 提供语法检查功能。 文件编辑功能可提高程序的运行速度。 编译器能将AutoLISP源程序打包成一个简单的模块。 提供DCL预览功能。 可方便地管理多个AutoLISP程序。 源程序调试器,支持单步调试和跳转调试。 (2) 在VisualLISP中运行AutoLISP程序步骤,4.3.2 AutoCAD用户菜单生成,4.3.2 AutoCAD用户菜单生成 AutoCAD系统提供了六种类型的菜单,分别是:屏幕菜单、下拉菜单、
14、图标菜单、光标菜单、图形输入板菜单、按钮和辅助菜单。 1) 标准菜单文件结构 总体结构是树型的逻辑结构,如图4.1所示。 第一层为菜单段,菜单段以下为子菜单,子菜单以下还可以设置子菜单或菜单项,菜单项作为这棵树的终端点即树叶。图4.1 菜单的树状结构 (1) 菜单段(2) 子菜单(3) 菜单项(4) 菜单项语法,表4.1 AutoCAD菜单项语法,(5) 菜单项标题 2) 菜单开发的一般方法 扩展名为“.MNX”的菜单文件,是“.MNU”类型菜单源文件经编译后的二进制的目标文件。(1) 在ACAD.MNU中增加新内容(2) 建立用户菜单 编译用户菜单文件,格式如下: Command: MENU
15、 建立有关标准件下拉菜单实例新增内容中的trans、gener、break、react分别为绘制变压器、发电机、断路口、电抗器的LISP函数。最后一行是调用图标菜单。,4.4 用VBA对AUTOCAD 进行二次开发,4.4.1 AutoCad的对象模型(AutoCad Object Model) 4.4.2 创建新的下拉菜单和工具栏 (1)加载菜单组:用MenuGroups集合的Load方法来加载。 (2)在菜单条上插入菜单:用InsertMenuInMenuBar 或 InsertInMenuBar方法。 (3)从菜单条上删除菜单:用RemoveMenuFromMenuBar或RemoveF
16、romMenuBar方法。 (4)建立新菜单:用Add方法在PopupMenus集合中添加一个新的PopupMenu对象。 (5)在菜单中增加新的菜单项:用AddMenuItem方法。使用AddMenuItem方法需要输入四项参数:索引、标签、标记、宏。,4.4.3 实现电气元件与数据库的链接 1) 激活应用程序级事件: 2) 激活文档级事件程序: 3) 双击事件过程的编程: 在AutoCad中双击图块,会产生一个双击事件 Private Sub AcadDocument_BeginDoubleClick(ByVal PickPoint As Variant) Dim ssetobj As A
17、cadSelectionSet Set ssetobj = ThisDrawing.SelectionSets.Add(“setobj1“) ssetobj.SelectAtPoint PickPoint chandle = ssetobj.Item(0).Handle 得到实体的句柄 ssetobj.DeleteSet NewDb = DBEngine.Workspaces(0).OpenDatabase(mdbname) 打开数据库 打开“元件的句柄和类型代号“表 Set newRst = NewDb.OpenRecordset(“元件的句柄和类型代号“, dbOpenTable) 在表中
18、找到被双击图元的记录,得到它的元件类型代号,newRst.Index = “句柄“ If Not newRst.BOF Then newRst.MoveFirst newRst.Seek “=“, chandle If Not newRst.NoMatch ThenstrNumber = newRst.Fields(“类型代号“)Select Case strNumber 根据元件的类型代号,打开相应元件的数据输入窗体Case “2”frmTwoTransformer.Show 显示双绕组变压器的参数输入窗体,输入数据,按确定按钮后,就可用ADO或DAO这些数据库访问对象的方法,把窗体上的数据
19、,增加到相应的数据表中去。Case “3”End Select End if End Sub,4.4.4 运行程序后的结果,运行这个程序后,在AutoCAD菜单的最后面,将新增加的一个“电气元件”的菜单,如下图所示:,图4.2 电气元件菜单,同时也增加了一个新的工具栏:,图4.3 电气元件工具栏,单击“电力元件”菜单中的一个菜单项或工具栏中的任一按钮,就可以在AutoCAD画出相应的电力元件。,图4.4 二相变压器数据输入表,4.5 用VB对AutoCAD进行二次开发 用VBA开发AutoCAD必须在AutoCAD环境下,不能编译成可直接在windows下运行的执行文件。 用VB对AutoCA
20、D进行二次开发,是应用AutoCAD Activex技术,通过VB编程来控制和操作AutoCAD。4.5.1 AutoCAD对象的使用 1) AutoCAD对象分类 1图形对象,如直线(lines)、球体(sphere)、文本(Text)和尺寸(Dimension)等。 2样式设置对象,如线型(linetypes)和尺寸标注样式(Dimstyles)等。 3组织结构,如图层(Layers)、组(Groups)和块(Blocks)等。 4图形显示对象,如视图(View)和视口(wiewport)等。 5AutoCAD应用程序(Application)和文档(Document)对象。,图4.5 A
21、utoCAD对象模型,2) AutoCAD对象的引用(1) AutoCAD的应用程序对象的引用 Dim AcadApp As AcadApplication Set AcadApp=Getobject(“AutoCAD. Application”) (2) 应用程序下级对象的引用 在模型空间创建一个园对象,并使用Set语句将圆对象引用赋给变量Circleobj。 Dim Circleojb As Acadcircle Set circleobj=AcadApp.ActiveDocument.modelspac.Addcircle(centerpoint, radius) 3) AutoCAD对
22、象的释放 set AcadApp=createobject(“AutoCAD.Application”) set Acaddoc=AcadApp.ActiveDoument 引用结束释放语句为: set AcadApp=Nothing set Acaddoc=Nothing,4.5.2 连接AutoCAD将VB与AutoCAD连接,需要以下两步:(1)在编写代码前,在VB编程环境中引用AutoCAD对象(2) 创建AutoCAD对象,启动运行AutoCAD。方法是首先在全局模块module中定义AutoCAD对象变量AcadApplication对象,语句为Public AcadApp As
23、AcadApplicatio 4.5.3 使用图形文形1) 创建新图形文件 Private sub commandl_click() AcadApp.Documents.Add Endsvb 2) 打开已有图形文件 用Documents对象的open方法,打开一个已有的图形文件,代码如下:,private sub commandl_click( ) dim myfilenamt As string myfilename=“c:acad2000samplecampus.dng“If Dir(myfileName) ThenAcadApp.Dcouments.open myfileName els
24、eMsgBox(“文件“ & myfilename “不存在“) End if End SUB 3) 保存图形文件 使用活动文档对象ActiveDocument的Save方法,以当前文件名和路径保存图形文件。 语句为: AcadApp.Active Document.Save 用下面代码,以指定文件名和路径保存图形文件 AcadApp. ActiveDocument.SaveAsc:Usermydng.dwg,4) 关闭图形文件 用close方法,以当前文件名和路径保存修改的图形文件。 AcadApp.ActiveDocument.close(False)带(False)时不保存修改,关闭文件
25、。 4.5.4 图形缩放 1极限放大:用语句Zoom Extents或AcadApp.zoomExtents 2显示全图:用语句ZoomA11或AcadApp.zoomAll 3居中显示:语法为object.zoomcenter.center,magnify magnify为缩放倍率 4比例缩放:语法为object.zoomscaled.scale,scaletyke scale为缩放比例,4.5.5 窗口界面控制 (1)以下语句设置AutoCAD窗口显示为最大、最小和一般状态。 AcadApp.windowstate = acmax AcadApp.windowstate = acmin A
26、cadApp.windowstate = acnorm (2)以下语句设置AutoCAD绘图窗口显示为最大最小、一般状态。 AcadApp.ActiveDocument.windowstate = acmax AcadApp.ActiveDocument.windowstate =acmin AcadApp.ActiveDocument.windowstate =acnorm (3)以下语句从VB程序窗口切换到AutoCAD界面 AppActiveAcadApp.caption (4)退出AutoCAD: private sub commandl_click( )AcadApp.QuitSet
27、 AcadApp=nothing End sub,4.5.6 用VB编程实现AutoCAD绘图 1) 绘实体 (1)画点:例句为 Location(0)=10#: location(1)=10#: location(2)=0#. Set pointobj=AcadApp.ActiveDocument.modelspace.Addpoint(Location) (2)画直线:要给出起点和终点坐标,用Addline方法,例句为: Set lineobj=AcadApp.ActiveDocument.modelspace.Addline(startpoint,endpoint) (3)画圆:用Add
28、circle方法,例句为: centerpoint(0)=20#: centerpoint(1)=30#: centerpoint(2)=0#: radius=5# set circleobj=AcadApp.ActiveDocument.Modelspace.Addcircle(centerpoint,radius) (4)画弧:用AddArc方法 RetVal=object.AddArc(center,Radius, startangle, Endangle) (5)画椭圆:用AddEllipse方法 Retval=object. AddEllipse(center,majorAxis,
29、RadiusRatio),2) 编辑实体 (1) 复制实体对象 copy复制:Retval=objectcopy mirror镜像:Retval=objectmirror(point 1,point 2) Arraypolar圆形阵列:Retval=objectArraypolar(Numberofobjects, Angletotill, conterpoint) ArrayRectangular矩形阵列:Retval=objectArrayRectangular(Number of Rons, Number of coluns,-Dist Betwee Rows, DistBetweece
30、dumns, distbetweenlevels) (2) 移动实体对象 Object.move point 1, point 2 (3)旋转实体对象 object.Rotate Basepoint, Rotation Angle (4) 缩放实体对象 object. Scale Entity Base point, saleFactor (5) 删除对象 (1)object. Erase 删除选择区域内所有对象 (2)object.Delete 删除指定对象,3) 使用块对象 (1)创建块:用Add方法创建块,先给基准点insertionpnt(02)赋值,以下语句创建块。 Set bloc
31、kobj=AcadApp.ActiveDocnment.Blocks.Add(insetionPnt,circleBlock) Set circleobj=blockobj.Addcircle(center,radius) 向块对象中添加一个圆 (2)插入块 Dim blockRefobj As AcadBlockReference 定义块引用变量 InsertionPnt(o)=100#:InsertionPnt(1)=200#: InsetionPnt(2)=0 定义插入点 Set Block Refobj= AcadApp.ActiveDocument.ModelSpace.Insert
32、Block(InsetionPnt,circle Block,1#,1#,1#,0) (3)拆分块 用Explode方法拆分,恢复成单独的实体对象后进行。 Dim exploded Objects As Variant Exploded Ojbects=blockRefobj.Explode 拆分块对象 BlockRefobj.Delete 删除块引用 Explodedobjects(0). Delete 删除第1个对象,(4)创建块属性与提取块引用属性 用AddAttribute方法可创建块属性。语法为: Retval=object. AddAttribute(Height,mode,pro
33、mpt,insertionpoint,Tag,value) Retral=object.GetAttributes() 提取块引用属性,Retval为变体型,块属性对象数组。 4) 标注文本 (1) 创建文本样式对象 例创建一个名为Styobjl的文本样式对象: Dim styobj1 As Acad TextstyleSet styobjl=AcadApp.Active Document.Textstyles.Add(“设置文本样式1”) AcadApp.ActiveDocument.Active Textstyle=styobj1 (2) 设置文本字体 采用文本样式对象的Setont方法式fontFile属性设置文本字体 Textstyeobj.setFont typeface,bold. Italic. Charset.pitchand family Getfont方法获得当前字体设置的默认值。 Styobj1.fontfile=“c:widonsfontssimsumttf“ AcadApp.Active Document.Activetextstyle.fontfile=“c:windonsfontssimsumttf“,