VBA开发AUTOCAD实现参数化绘图_第1页
VBA开发AUTOCAD实现参数化绘图_第2页
VBA开发AUTOCAD实现参数化绘图_第3页
VBA开发AUTOCAD实现参数化绘图_第4页
VBA开发AUTOCAD实现参数化绘图_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

1、 VBA开发AUTOCAD实现参数化绘图 王若慧 Realizing The Parameter-Drawing taking the VBA and AUTOCAD(.山西大学工程学院,山西省 太原,030013) Wang Ruo HuiEngineering Colledge of SHANXI University, Taiyuan 030013)摘要: 介绍了采用VBA(Visual Basic for Application)进行AutoCAD2005的二次开发,应用AutoCAD ActiveX Automation接口技术访问AutoCAD对象,采用ADO实现AUTOCAD与M

2、icrosoft Access2000的数据通信,实现程序参数化绘图的基本思路及程序设计流程. 关键词:VBA AutoCAD ActiveX Automation ADO 参数化绘图Abstract: Taking the ActiveX Automation of VBA and AutoCAD2005 to access the AutoCAD drawings, and the ADO to make the data communication between the AUTOCADand ACCESS , the parameter-drawing can be well real

3、ized in the way what is described in the article .Key words:VBA AutoCAD ActiveX Automation ADOthe parameter-drawing 引言:传统的人机交互式绘图一般需要用精确的尺寸值定义几何元素,输入的每一条线都必须有确定的位置,图形一旦建立,即使结构相似但想改变图形大小尺寸,只能对图形进行编辑。而在工程设计中,一方面,进行新产品设计时不可避免地需要多次反复修改,需要进行多方面的综合协调和优化;另一方面,许多的专业图纸设计中,很多图形结构具有一定的相似性,往往只是尺寸的大小不同,其图形随尺寸参数的

4、变化而相应变化。因此,希望有一种比交互式绘图更方便、更高效、更适合结构相似图形绘制的方法.为了解决这个问题,我们可研制出一种绘图软件,图中尺寸参数通过交互方式输入,随后通过运行有关程序,确定所有的绘图信息,自动绘出图形,这种工作方式通常称为程序参数化绘图.这就是参数化绘图要解决的问题,同时它也是CAD系统很重要的一个环节.1. 程序参数化绘图的实质程序参数化绘图主要适用于图形结构形式基本固定而结构尺寸参数变化的图形。程序参数化绘图的实质,就是将图形信息记录在程序中。图形的描述通常可分为:图形的拓扑关系、图形的几何参数以及这些几何参数与图形结构参数之间的联系。通常用一组变量记录图形的几何参数,用

5、一系列的赋值语句表达几何参数与结构参数之间的关系,然后用一系列的调用语句来描述图形的拓扑关系。如图1所示图形的几何参数是四个点的坐标(x1,y1),(x2,y2),(x3,y3)和(x4,y4),结构参数是两个尺寸a和b。这些参数之间的关系为:x1=x4;y1=y2;x2=x3;y3=y4;x2=x1+a;y3=y1+b。 (x4,y4) (x3,y3) b (x1,y1) a (x2,y2) 图1 图形的描述2. 程序参数化绘图的实现途径 为了实现参数化绘图,需要建立一个计算机图形软件系统应用这个系统可以简化图形设计应用程序的编制,并能方便地应用计算机程序实现图形地输入和输出建立一个图形系统

6、可以有三种方式:(1)设计专用图形语言(2)修改高级程序设计语言,使其具有图形处理的功能(3)建立图形设计程序包前两种方式都需要用低级或高级语言重写一个编译器一般来说,修改或者重写一个编译器的工作量比较大,而且图形设计过程并非简单的数据处理过程,还包括许多文件结构和存贮结构的问题,从而使上述工作的复杂性大大增加有些绘图软件配有内部专用绘图语言,如AutoCAD配有AutoLISP编程语言,DDM/DIMENSION3图形软件配有DAL绘图语言等,利用这些语言用户可以开发参数化绘图软件但是这些语言的数组,循环,函数,逻辑关系等功能一般较差,不宜作大量的计算工作,编程也不太方便第三种方式即建立图形

7、设计程序包,其基本思想是选择一种合适的高级程序设计语言作为主语言,在此语言中扩展一系列的过程调用,以实现图形设计工作在这种情况下,用户编写的图形描述程序由两部分组成:一是主语言语句,另一个是主语言中扩展了的过程调用语句在扩充某种高级语言使其具有图形处理功能时,最好能利用已有的较成熟的图形软件3. 程序参数化绘图的技术路线要实现程序参数化绘图程序的编制, 本文采用AutoCAD2005为绘图支撑软件,采用VBA(Visual Basic for Application)进行AutoCAD2005的二次开发,运用AutoCAD实现参数化绘制工程图纸. 3.1 AUTOCAD2005简介1. Aut

8、oCAD是当今最流行的二维绘图软件, AutoCAD有强大的二维功能,如绘图、编辑、剖面线和图案绘制、尺寸标注以及二次开发等功能,同时有部分三维功能。2. 尽管AutoCAD是一个非常好的通用计算机辅助绘图和设计软件系统,但每一行业和专业都有自的行业和专业标准,许多单位也有自己的技术规格和企业标准,每个设计工程师和绘图员更有各自独特的工作方式和习惯。因而AutoCAD不可能完全满足每个用户的具体而特定的要求。对AutoCAD进行定制和二次开发,能使AutoCAD可以更加符合用户的需求,更方便、更规范、更专业的实现设计和绘图中的应用。AutoCAD提供的开放式体系结构正是为使用户可以根据各自的需

9、求来改进和扩充AutoCAD的许多功能而着想的3. AutoCAD提供AutoLISP、ADS、ARX、VBA作为二次开发的工具。在许多实际应用领域(如机械、建筑、电子)中,一些软件开发商在AutoCAD的基础上已开发出许多符合实际应用的软件,很好的实现了参数化绘制工程图纸.3.2 VBA开发AutoCAD2005采用面向对象的程序设计方法, 使用Visual Basic在AutoCAD2005 上用VBA技术进行二次开发, 能够较好地实现系统程序参数化绘图。VBA是通过AutoCAD ActiveX Automation接口来建立和AutoCAD对象间的联系。ActiveX是建立在COM对象

10、模型之上的一个标准通信协议,它允许对象之间通过一定的接口相互通信。而AutoCAD ActiveX提供在AutoCAD外控制编程的机制,通过使用AutoCAD对象,实现控制AutoCAD。 在 AutoCAD 中实现 ActiveX 接口有两大优点: 更多的编程环境可以编程访问 AutoCAD 图形。在 ActiveX Automation 出现以前,开发人员只能使用 AutoLISP或 C+ 接口。 与其他 Windows 应用程序(如 Microsoft Excel 和ACCESS)共享数据变得更加容易。对象是所有 ActiveX 应用程序的主要构造块。每一个显示的对象均精确代表一个 Au

11、toCAD 组件。AutoCAD ActiveX 接口中有许多不同类型的对象。例如: 直线、圆弧、文字和标注等图形对象都是对象。 线型与标注样式等样式设置都是对象。 图层、编组和块等组织结构都是对象。 视图与视口等图形显示都是对象。 甚至图形、AutoCAD 应用程序本身也是对象。AutoCAD对象是通过分层方式来组织的,应用程序对象为根对象。这种分层结构的视图被归结为对象模型。对象模型提供了用户访问下一层对象的途径,如图2所示。ApplicationPreferencesDocuments3DFaceDocument3DSolidBlockBlocksAttributeDatabaseMod

12、elSpaceBlockRefPaperSpaceCirclePViewportDim3PointAngDictionaryDictionariesDimAngularXRecordDimStylessDimStyleDimOrdinateDimRadialFileDependencyFileDependenciessGroupGroupsEllipseHyperlinksLayerLayersExternalRefHyperlinkLayoutLayoutsLeaderLineTypesLineTypesLinePlotConfigurationPlotConfigurationsMInse

13、rtBlockRegisteredApplicationRegisteredApplicationsSelectionSetsSelectionSetMLineTextStyleTextStylesPointUCSUCSsPolyfaceMeshViewViewsPolygonMeshhViewportsViewportsRayDatabasePreferencesRegionPlotSummaryInfoSolidUtilitySplineMenuBarTablePopupMenuTextMenuGroupsTraceMenuGroupPopupMenusXline集合PopupMenuPo

14、pupMenuItemToolbars对象ToolbarToolbarItem图2 AutoCAD的对象模型用户可直接通过用户定义变量引用对象。直接引用对象,应包括对象的层次。举一个最简单的例子,以下语句是增加一条直线到模型空间。Sub Drawline( )定义两个三维的数组startPoint和endPointDim startPoint(0 to 2) As Double Dim endPoint(0 to 2) As Double 定义LineObj为直线对象Dim LineObj As AcadLine定义起点startPoint(0) = 0startPoint(1) = 0sta

15、rtPoint(2) = 0定义终点endPoint(0)=30endPoint(1)=20endPoint(2)=10调用AddLine方法绘制直线Set LineObj = ThisDrawing.ModelSpace.AddLine(startPoint,endPoint)End sub4. 参数化绘制图形程序的编制4.1 创建基准函数在实际工程中设计良好的底层库能够节省很多的编码量,并且有助于团体协作的实现底层库最好在工程编码开始之前就已经完全确定. 在以上创建二维对象方法的基础上,采用对系统提供的方法进行封装,创建底层函数库,即由对象的基准函数构成.,其中还包含一些常用的计算函数 基

16、准函数就是与系统提供的方法参数一致的函数,其他的函数均调用基准函数创建对象.如.创建直线基准函数的具体步骤如下:1.在AUTOCAD2004中,选择工具/宏/VBA管理器菜单项,在弹出的VBA管理器对话框中单击新建按钮,创建一个新的工程,然后选择该工程,单击另存为按钮,将其保存在适当的位置。2.在VBA管理器对话框中单击Visual Basic编辑器按钮,进入VBA集成开发环境,选择插入/模块菜单项,向工程中添加一个标准模块。3.选择插入/过程菜单项,选择类型为函数,范围为公有的,在名称文本框中输入Addline,单击确定按钮,就在当前的模块中添加了AddLine函数。提示: 在VB中,子程序

17、和函数的主要区别就在于,子程序没有返回值,但函数可以有返回值,而在VBA中,宏的定义通过子程序来实现.因此我们创建底层函数均使用函数。4.创建直线的基准函数代码为:Public Function AddLine(ByVal ptSt As Variant, ByVal ptEn As Variant) As AcadLineSet AddLine = This Drawing .Model Space .AddLine (ptSt, ptEn)End Function需要注意的是,基准函数名称与VBA中对应的方法保持一致.函数的返回值为AcadLine,输入参数为两个Variant类型的变量,

18、分别用于表示起点和终点的位置。Set是VBA的一个关键字,用于对象变量的赋值(数值变量的赋值形如a=b),而函数的返回值使用形如”函数名称=表达式”的形式来实现。 4.2参数化绘制基本二维对象使用AutoCAD VBA开发的软件,大部分仍属于交互式的软件,必须考虑和用户进行交互的问题AutoCAD本身提供了两种人机交互的方式,一种是在命令中进行操作,另一种则是通过对话框输入参数 在VBA中要利用圆心和半径创建圆:1.首先在AUTOCAD2004中,选择工具/宏/VBA管理器菜单项,在弹出的VBA管理器对话框中单击新建按钮,将其保存在适当的位置。2。在VBA管理器对话框中单击Visual Bas

19、ic编辑器按钮,进入VBA集成开发环境,选择插入/用户窗体菜单项,向工程中添加一个用户窗体.3.在用户窗体上插入如图4.2.1所示的相关控件,并把相对应的文本框名称分别修改为text1,text2,text3.4.在文本框2后面添加一个拾取按钮,并把拾取按钮的Caption属性修改为空,单击PICTURE属性后的.按钮,从弹出的加载图片对话框中,选择配套光盘中的PICKSET图片,设置PICTUREPOSITION属性为参数12,就得到了如图4.2.1中的拾取点按钮效果.5.双击确定按钮,在该按钮的CLICK事件中添加下面的代码:Private Sub CommandButton1_Click

20、() 图4.2.1Dim pt1(2) As DoubleDim radius As DoubleDim addcircle As AcadCirclept1(0) = Text1.Text:pt1(1) = Text2.Textradius = Text3.TextUserForm1.HideThisDrawing.ModelSpace.addcircle pt1, radiusEnd Sub6.双击窗体上的取消按钮,进入代码窗口,在该按钮的CLICK事件中添加下面的代码:Private Sub CommandButton2_Click()EndEnd Sub7.双击窗体上的拾取按钮,进入代

21、码窗口,在该按钮的CLICK事件中添加下面的代码:在VBA中建立圆心的拾取点代码如下:Private Sub CommandButton3_Click()Dim PtPick As VariantUserForm1.HidePtPick = ThisDrawing.Utility.GetPoint(, 请在屏幕上选择起点:)Text1.Text = PtPick(0): Text2.Text = PtPick(1)UserForm1.ShowEnd Sub在这段代码中,获取点的位置实现方法为GETPOINT,其返回值必须为VARIANT类型的变量,用来存储点的位置.在此过程中,还要在适当的时候

22、隐藏和显示窗体,不然AUTOCAD无法获得控制权,程序就会出错.4.3餐厅用具(冰箱)二维参数化绘图实例如图3所示为餐厅用具(冰箱)的参数化过程图3此过程主要体现的是由图形的几何参数和结构参数来进行图形的参数化绘制(基点坐标和尺寸长度)。拾取基点后:输入长度和宽度。即可绘制出其二维图形.5. 参数化绘制三维图形 AUTOCAD VBA二次开发具有强大的平面图形绘制功能。使用它编制的程序可以得到复杂的二维图形。但二维图形存在一定的局限性和缺陷,因为无法实现尺寸关联,不能直观观察产品的设计效果,虽然可以通过轴测视图的方式来解决,但操作麻烦,效果不佳,而如果使用三维图形,就可以弥补二维图形的在表现上

23、的不足。以下介绍VBA中关于三维建模部分的功能。采用的和二维操作一样的界面风格,从窗体中输入参数得到图形。5. 1三维弹簧模型(1) 实例说明该例提供了简洁的对话框界面,用户只要输入参数:中心点,旋转圈数,起始半径,水平增长,垂直增长和每圈分段数就可得到按要求的三维螺旋线如图4图4 (2) 编程思路:1 计算机使用多边形来模拟圆形,这里的程序同样使用这个原理,每一个螺旋线都是由许多小线段直线组成,当直线足够多时,就呈现出螺旋线的效果。2 如果能够得到各个点的坐标,就能够利用多段线建立一条螺旋线,但是二维多段线无法获得Z 方向的坐标,因此只能使用三维多段线3 用柱坐标表示螺旋线的控制点的坐标比较

24、方便,因此在程序中有一个重要的问题就是柱坐标和平面直角坐标的转换。4 由于是用多段线来表示圆,固 圆形的分段数的设定时竟可能多,少了就的到多段线螺旋。所以初值我们定为30。如绘制多段线调用内置函数 Dim ObjPline As Acad3DPolyline Set ObjPline = ThisDrawing.ModelSpace.Add3DPoly(PtControl)5.2.2圆筒模型(1)实例说明: 运行本实例,能够在图形窗口中创建一个圆筒模型,大小,半径,深度都可以改变。如图5:图5(2)编程思路1 我们知道圆筒有两种画法,一种是建立平面的图形,得到两个圆建立面域后拉伸得到,一种是直

25、接建立两个圆柱体,但两个圆柱体是同心的,在进行差集计算得到挖空的模型。2 本程序就是建立两个同心但大小和半径不同的圆柱体,差集得到上图模型。如主要代码:Dim objCylinder As Acad3DSolid Dim objCylinder1 As Acad3DSolidSet objCylinder1 = ThisDrawing.ModelSpace.AddCylinder(ptCen, radius1, height1) 创建圆柱体 Set objCylinder = ThisDrawing.ModelSpace.AddCylinder(ptCen, radius, height)布尔

26、运算的第一步:圆柱体减去圆柱体objCylinder .Boolean acSubtraction, objCylinder16. 系统数据库管理程序参数化绘图过程中,有效的管理图形数据,特别对一些标准件,通用件,建立标准参数图库,是很重要的一个环节.可以采用Microsoft Access2000进行数据库管理,连接方法采用ADO,实现AUTOCAD与ACCESS的数据通信,其主要功能是对参数化生成的图形的几何参数和结构参数进行记录并管理这些数据。6.1 数据库连接方法ADO数据库连接方法ADO是Microsoft ActiveX Data Objects的简称,ADO作为一种更新的数据库访

27、问技术,“扩展”了DAO和RDO所使用的对象模型,包含较少的对象和更多的属性、方法、事件。ADO连接数据库的编程思路:在使用ADO对象之前,需要在VBA集成开发环境中,选择工程引用菜单项,从弹出的对话框中选中microsoft ActiveX Data Objects 2.5 Library选项,引用ADO的对象模型如图7图7 在编程过程中使用ADO的一个典型的存取数据的步骤为: (1 连接数据源。可以使用连接对象的Open方法打开数据库对象,例如: adoCon.Open Provider=Microsoft.Jet.OLEDB.4.0;Data Source= & _ Left(strPath, Len(strPath) - 6) & CT.mdb; (2 打开记录集对象。可以使用记录集对象的Open方法打开记录集对象,例如: adoRs.OpenbingxiangData2,adoCon,adOpenDynamic,adLockOptimistic (3 使用记录集。在各个记录集之间切换一般可以使用记录集对象的Move、MoveFi

温馨提示

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

评论

0/150

提交评论