VBA开发AUTOCAD实现参数化绘图.docx

上传人:b****5 文档编号:28116721 上传时间:2023-07-08 格式:DOCX 页数:19 大小:203.46KB
下载 相关 举报
VBA开发AUTOCAD实现参数化绘图.docx_第1页
第1页 / 共19页
VBA开发AUTOCAD实现参数化绘图.docx_第2页
第2页 / 共19页
VBA开发AUTOCAD实现参数化绘图.docx_第3页
第3页 / 共19页
VBA开发AUTOCAD实现参数化绘图.docx_第4页
第4页 / 共19页
VBA开发AUTOCAD实现参数化绘图.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

VBA开发AUTOCAD实现参数化绘图.docx

《VBA开发AUTOCAD实现参数化绘图.docx》由会员分享,可在线阅读,更多相关《VBA开发AUTOCAD实现参数化绘图.docx(19页珍藏版)》请在冰豆网上搜索。

VBA开发AUTOCAD实现参数化绘图.docx

VBA开发AUTOCAD实现参数化绘图

VBA开发AUTOCAD实现参数化绘图

王若慧

RealizingTheParameter-DrawingtakingtheVBAandAUTOCAD

(.山西大学工程学院,山西省太原,030013)

WangRuoHui

EngineeringColledgeofSHANXIUniversity,Taiyuan030013)

摘要:

介绍了采用VBA(VisualBasicforApplication)进行AutoCAD2005的二次开发,应用AutoCADActiveXAutomation接口技术访问AutoCAD对象,采用ADO实现AUTOCAD与MicrosoftAccess2000的数据通信,实现程序参数化绘图的基本思路及程序设计流程.

关键词:

VBAAutoCADActiveXAutomationADO参数化绘图

Abstract:

TakingtheActiveXAutomationofVBAandAutoCAD2005toaccesstheAutoCADdrawings,andtheADOtomakethedatacommunicationbetweentheAUTOCAD and ACCESS,theparameter-drawingcanbewellrealizedinthewaywhatisdescribedinthearticle.

Keywords:

VBAAutoCADActiveXAutomationADO

theparameter-drawing

引言:

传统的人机交互式绘图一般需要用精确的尺寸值定义几何元素,输入的每一条线都必须有确定的位置,图形一旦建立,即使结构相似但想改变图形大小尺寸,只能对图形进行编辑。

而在工程设计中,一方面,进行新产品设计时不可避免地需要多次反复修改,需要进行多方面的综合协调和优化;另一方面,许多的专业图纸设计中,很多图形结构具有一定的相似性,往往只是尺寸的大小不同,其图形随尺寸参数的变化而相应变化。

因此,希望有一种比交互式绘图更方便、更高效、更适合结构相似图形绘制的方法.为了解决这个问题,我们可研制出一种绘图软件,图中尺寸参数通过交互方式输入,随后通过运行有关程序,确定所有的绘图信息,自动绘出图形,这种工作方式通常称为程序参数化绘图.这就是参数化绘图要解决的问题,同时它也是CAD系统很重要的一个环节.

1.程序参数化绘图的实质

程序参数化绘图主要适用于图形结构形式基本固定而结构尺寸参数变化的图形。

程序参数化绘图的实质,就是将图形信息记录在程序中。

图形的描述通常可分为:

图形的拓扑关系、图形的几何参数以及这些几何参数与图形结构参数之间的联系。

通常用一组变量记录图形的几何参数,用一系列的赋值语句表达几何参数与结构参数之间的关系,然后用一系列的调用语句来描述图形的拓扑关系。

如图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.程序参数化绘图的实现途径

为了实现参数化绘图,需要建立一个计算机图形软件系统.应用这个系统可以简化图形设计应用程序的编制,并能方便地应用计算机程序实现图形地输入和输出.建立一个图形系统可以有三种方式:

(1)设计专用图形语言.

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

第三种方式即建立图形设计程序包,其基本思想是选择一种合适的高级程序设计语言作为主语言,在此语言中扩展一系列的过程调用,以实现图形设计工作.在这种情况下,用户编写的图形描述程序由两部分组成:

一是主语言语句,另一个是主语言中扩展了的过程调用语句.在扩充某种高级语言使其具有图形处理功能时,最好能利用已有的较成熟的图形软件.

3.程序参数化绘图的技术路线

要实现程序参数化绘图程序的编制,本文采用AutoCAD2005为绘图支撑软件,采用VBA(VisualBasicforApplication)进行AutoCAD2005的二次开发,运用AutoCADVBA实现参数化绘制工程图纸.

3.1AUTOCAD2005简介

1.AutoCAD是当今最流行的二维绘图软件,AutoCAD有强大的二维功能,如绘图、编辑、剖面线和图案绘制、尺寸标注以及二次开发等功能,同时有部分三维功能。

2.尽管AutoCAD是一个非常好的通用计算机辅助绘图和设计软件系统,但每一行业和专业都有自的行业和专业标准,许多单位也有自己的技术规格和企业标准,每个设计工程师和绘图员更有各自独特的工作方式和习惯。

因而AutoCAD不可能完全满足每个用户的具体而特定的要求。

对AutoCAD进行定制和二次开发,能使AutoCAD可以更加符合用户的需求,更方便、更规范、更专业的实现设计和绘图中的应用。

AutoCAD提供的开放式体系结构正是为使用户可以根据各自的需求来改进和扩充AutoCAD的许多功能而着想的

3.AutoCAD提供AutoLISP、ADS、ARX、VBA作为二次开发的工具。

在许多实际应用领域(如机械、建筑、电子)中,一些软件开发商在AutoCAD的基础上已开发出许多符合实际应用的软件,很好的实现了参数化绘制工程图纸.

3.2VBA开发AutoCAD2005

采用面向对象的程序设计方法,使用VisualBasic在AutoCAD2005上用VBA技术进行二次开发,能够较好地实现系统程序参数化绘图。

VBA是通过AutoCADActiveXAutomation接口来建立和AutoCAD对象间的联系。

ActiveX是建立在COM对象模型之上的一个标准通信协议,它允许对象之间通过一定的接口相互通信。

而AutoCADActiveX提供在AutoCAD外控制编程的机制,通过使用AutoCAD对象,实现控制AutoCAD。

在AutoCAD中实现ActiveX接口有两大优点:

∙更多的编程环境可以编程访问AutoCAD图形。

在ActiveXAutomation出现以前,开发人员只能使用AutoLISP或C++接口。

∙与其他Windows应用程序(如MicrosoftExcel和ACCESS)共享数据变得更加容易。

对象是所有ActiveX应用程序的主要构造块。

每一个显示的对象均精确代表一个AutoCAD组件。

AutoCADActiveX接口中有许多不同类型的对象。

例如:

∙直线、圆弧、文字和标注等图形对象都是对象。

∙线型与标注样式等样式设置都是对象。

∙图层、编组和块等组织结构都是对象。

∙视图与视口等图形显示都是对象。

∙甚至图形、AutoCAD应用程序本身也是对象。

AutoCAD对象是通过分层方式来组织的,应用程序对象为根对象。

这种分层结构的视图被归结为对象模型。

对象模型提供了用户访问下一层对象的途径,如图2所示。

 

Application

Preferences

Documents

3DFace

Document

3DSolid

Block

Blocks

Attribute

Database

ModelSpace

BlockRef

PaperSpace

Circle

PViewport

Dim3PointAng

Dictionary

Dictionaries

DimAngular

XRecord

DimStyless

DimStyle

DimOrdinate

DimRadial

FileDependency

FileDependenciess

Group

Groups

Ellipse

Hyperlinks

Layer

Layers

ExternalRef

Hyperlink 

Layout

Layouts

Leader

LineTypes

LineTypes

Line

PlotConfiguration

PlotConfigurations

MInsertBlock

RegisteredApplication

RegisteredApplications

SelectionSets

SelectionSet

MLine

TextStyle

TextStyles

Point

UCS

UCSs

PolyfaceMesh

View

Views

PolygonMeshh

Viewports

Viewports

Ray

DatabasePreferences

Region

Plot

SummaryInfo

Solid

Utility

Spline

MenuBar

Table

PopupMenu

Text

MenuGroups

Trace

MenuGroup

PopupMenus

Xline

集合

PopupMenu

PopupMenuItem

Toolbars

对象

Toolbar

ToolbarItem

 

图2AutoCAD的对象模型

用户可直接通过用户定义变量引用对象。

直接引用对象,应包括对象的层次。

举一个最简单的例子,以下语句是增加一条直线到模型空间。

SubDrawline()

’定义两个三维的数组startPoint和endPoint

DimstartPoint(0to2)AsDouble

DimendPoint(0to2)AsDouble

’定义LineObj为直线对象

DimLineObjAsAcadLine

’定义起点

startPoint(0)=0

startPoint

(1)=0

startPoint

(2)=0

’定义终点

endPoint(0)=30

endPoint

(1)=20

endPoint

(2)=10

’调用AddLine方法绘制直线

SetLineObj=ThisDrawing.ModelSpace.AddLine(startPoint,endPoint)

Endsub

4.参数化绘制图形程序的编制

4.1创建基准函数

在实际工程中设计良好的底层库能够节省很多的编码量,并且有助于团体协作的实现.底层库最好在工程编码开始之前就已经完全确定.

在以上创建二维对象方法的基础上,采用对系统提供的方法进行封装,创建底层函数库,即由对象的基准函数构成.,其中还包含一些常用的计算函数

基准函数就是与系统提供的方法参数一致的函数,其他的函数均调用基准函数创建对象..

如.创建直线基准函数的具体步骤如下:

1.在AUTOCAD2004中,选择[工具/宏/VBA管理器]菜单项,在弹出的[VBA管理器]对话框中单击[新建]按钮,创建一个新的工程,然后选择该工程,单击[另存为]按钮,将其保存在适当的位置。

2.在[VBA管理器]对话框中单击[VisualBasic编辑器]按钮,进入VBA集成开发环境,选择[插入/模块]菜单项,向工程中添加一个标准模块。

3.选择[插入/过程]菜单项,选择[类型]为[函数],[范围]为[公有的],在[名称]文本框中输入Addline,单击[确定]按钮,就在当前的模块中添加了AddLine函数。

提示:

在VB中,子程序和函数的主要区别就在于,子程序没有返回值,但函数可以有返回值,而在VBA中,宏的定义通过子程序来实现.因此我们创建底层函数均使用函数。

4.创建直线的基准函数代码为:

PublicFunctionAddLine(ByValptStAsVariant,ByValptEnAsVariant)AsAcadLine

SetAddLine=ThisDrawing.ModelSpace.AddLine(ptSt,ptEn)

EndFunction

需要注意的是,基准函数名称与VBA中对应的方法保持一致.函数的返回值为AcadLine,输入参数为两个Variant类型的变量,分别用于表示起点和终点的位置。

Set是VBA的一个关键字,用于对象变量的赋值(数值变量的赋值形如a=b),而函数的返回值使用形如”函数名称=表达式”的形式来实现。

4.2参数化绘制基本二维对象

使用AutoCADVBA开发的软件,大部分仍属于"交互式"的软件,必须考虑和用户进行交互的问题.AutoCAD本身提供了两种人机交互的方式,一种是在命令中进行操作,另一种则是通过对话框输入参数.

在VBA中要利用圆心和半径创建圆:

<1.首先在AUTOCAD2004中,选择[工具/宏/VBA管理器]菜单项,在弹出的[VBA管理器]对话框中单击[新建]按钮,将其保存在适当的位置。

<2。

在[VBA管理器]对话框中单击[VisualBasic编辑器]按钮,进入VBA集成开发环境,选择[插入/用户窗体]菜单项,向工程中添加一个用户窗体.

<3.在用户窗体上插入如图4.2.1所示的相关控件,并把相对应的文本框名称分别修改为text1,text2,text3.

<4.在文本框2后面添加一个拾取按钮,并把拾取按钮的Caption属性修改为空,单击PICTURE属性后的[….]按钮,从弹出的加载图片对话框中,选择配套光盘中的PICKSET图片,设置PICTUREPOSITION属性为参数12,就得到了如图4.2.1中的拾取点按钮效果.

<5.双击[确定]按钮,在该按钮的CLICK事件中添加下面的代码:

PrivateSubCommandButton1_Click()图4.2.1

Dimpt1

(2)AsDouble

DimradiusAsDouble

DimaddcircleAsAcadCircle

pt1(0)=Text1.Text:

pt1

(1)=Text2.Text

radius=Text3.Text

UserForm1.Hide

ThisDrawing.ModelSpace.addcirclept1,radius

EndSub

<6.双击窗体上的取消按钮,进入代码窗口,在该按钮的CLICK事件中添加下面的代码:

PrivateSubCommandButton2_Click()

End

EndSub

<7.双击窗体上的拾取按钮,进入代码窗口,在该按钮的CLICK事件中添加下面的代码:

在VBA中建立圆心的拾取点代码如下:

PrivateSubCommandButton3_Click()

DimPtPickAsVariant

UserForm1.Hide

PtPick=ThisDrawing.Utility.GetPoint(,"请在屏幕上选择起点:

")

Text1.Text=PtPick(0):

Text2.Text=PtPick

(1)

UserForm1.Show

EndSub

在这段代码中,获取点的位置实现方法为GETPOINT,其返回值必须为VARIANT类型的变量,用来存储点的位置.在此过程中,还要在适当的时候隐藏和显示窗体,不然AUTOCAD无法获得控制权,程序就会出错.

4.3餐厅用具(冰箱)二维参数化绘图实例

如图3所示为餐厅用具(冰箱)的参数化过程

图3

此过程主要体现的是由图形的几何参数和结构参数来进行图形的参数化绘制(基点坐标和尺寸长度)。

拾取基点后:

输入长度和宽度。

即可绘制出其二维图形.

5.参数化绘制三维图形

AUTOCADVBA二次开发具有强大的平面图形绘制功能。

使用它编制的程序可以得到复杂的二维图形。

但二维图形存在一定的局限性和缺陷,因为无法实现尺寸关联,不能直观观察产品的设计效果,虽然可以通过轴测视图的方式来解决,但操作麻烦,效果不佳,而如果使用三维图形,就可以弥补二维图形的在表现上的不足。

以下介绍VBA中关于三维建模部分的功能。

采用的和二维操作一样的界面风格,从窗体中输入参数得到图形。

5.1三维弹簧模型

(1)实例说明

该例提供了简洁的对话框界面,用户只要输入参数:

中心点,旋转圈数,起始半径,水平增长,垂直增长和每圈分段数就可得到按要求的三维螺旋线如图4

图4

(2)编程思路:

1.计算机使用多边形来模拟圆形,这里的程序同样使用这个原理,每一个螺旋线都是由许多小线段直线组成,当直线足够多时,就呈现出螺旋线的效果。

2.如果能够得到各个点的坐标,就能够利用多段线建立一条螺旋线,但是二维多段线无法获得Z方向的坐标,因此只能使用三维多段线

3.用柱坐标表示螺旋线的控制点的坐标比较方便,因此在程序中有一个重要的问题就是柱坐标和平面直角坐标的转换。

4.由于是用多段线来表示圆,固圆形的分段数的设定时竟可能多,少了就的到多段线螺旋。

所以初值我们定为30。

如绘制多段线调用内置函数

DimObjPlineAsAcad3DPolyline

SetObjPline=ThisDrawing.ModelSpace.Add3DPoly(PtControl)

5.2.2圆筒模型

(1)实例说明:

运行本实例,能够在图形窗口中创建一个圆筒模型,大小,半径,深度都可以改变。

如图5:

图5

(2)编程思路

1.我们知道圆筒有两种画法,一种是建立平面的图形,得到两个圆建立面域后拉伸得到,一种是直接建立两个圆柱体,但两个圆柱体是同心的,在进行差集计算得到挖空的模型。

2.本程序就是建立两个同心但大小和半径不同的圆柱体,差集得到上图模型。

如主要代码:

DimobjCylinderAsAcad3DSolid

DimobjCylinder1AsAcad3DSolid

SetobjCylinder1=ThisDrawing.ModelSpace.AddCylinder(ptCen,radius1,height1)

'创建圆柱体

SetobjCylinder=ThisDrawing.ModelSpace.AddCylinder(ptCen,radius,height)

'布尔运算的第一步:

圆柱体减去圆柱体

objCylinder.BooleanacSubtraction,objCylinder1

6.系统数据库管理

程序参数化绘图过程中,有效的管理图形数据,特别对一些标准件,通用件,建立标准参数图库,是很重要的一个环节.

可以采用MicrosoftAccess2000进行数据库管理,连接方法采用ADO,实现AUTOCAD与ACCESS的数据通信,其主要功能是对参数化生成的图形的几何参数和结构参数进行记录并管理这些数据。

6.1数据库连接方法ADO

数据库连接方法ADO是MicrosoftActiveXDataObjects的简称,ADO作为一种更新的数据库访问技术,“扩展”了DAO和RDO所使用的对象模型,包含较少的对象和更多的属性、方法、事件。

ADO连接数据库的编程思路:

在使用ADO对象之前,需要在VBA集成开发环境中,选择[工程/引用]菜单项,从弹出的对话框中选中[microsoftActiveXDataObjects2.5Library]选项,引用ADO的对象模型如图7

图7

在编程过程中使用ADO的一个典型的存取数据的步骤为:

(1.连接数据源。

可以使用连接对象的Open方法打开数据库对象,例如:

adoCon.Open"Provider=Microsoft.Jet.OLEDB.4.0;DataSource="&_

Left(strPath,Len(strPath)-6)&"\CT.mdb;"

(2.打开记录集对象。

可以使用记录集对象的Open方法打开记录集对象,例如:

adoRs.Open"bingxiangData2",adoCon,adOpenDynamic,adLockOptimistic

(3.使用记录集。

在各个记录集之间切换一般可以使用记录集对象的Move、MoveFirst、MoveNext、MovePrevious和MoveLast方法,添加新的记录可以使用记录集对象的AddNew方法,修改当前记录的内容只需对数据库记录集中的对象重新赋值即可,删除当前的记录可以使用记录集的Delete方法。

其中,记录集在进行添加的操作之后,必须使用Update方法更新数据库。

(4.断开连接。

使用Close方法能够关闭记录集和数据库连接对象,在退出程序之后,必须用Close方法关闭这两个对象。

6.2餐厅用具(冰箱)的数据库连接过程

如图8所示为餐厅用具(冰箱)的数据库连接部分。

图8餐厅用具(冰箱)的数据库连接部分

此连接有添加、修改和删除的功能,通过添加按钮可以向数据库中添加新的记录,修改按钮可以修改库中已有的数据,而删除按钮可以删除旧的记录。

另外用户可以通过导向按钮查看库中的数据记录情况,并调出需要的数据进行绘图。

如图9所示为餐厅用具(冰箱)的数据库表。

图9餐厅用具(冰箱)的数据库表

此表记录了餐厅用具(冰箱)的结构参数,通过此表用户就可以对和冰箱有关的所有参数进行管理。

4.结束语:

程序参数化绘图以VB可视化编程为基础,得到一个非常简洁的人机对话界面,依托AUTOCAD的强大图形功能为工具,用VBA对AUTOCAD进行二次开发。

VBA程序设计人员事先编制好实现图形的程序.用户只需在对话框内输入参数.便可以得到图形,根据参数的不同和程序不同得到不同工程图.

CAD已广泛应用于设计与制造的各个领域如飞机、汽车、机械、模具、建筑、集成电路中,程序参数化绘图作为CAD系统设计的重要环节,也在得到更全面,更专业的应用,以上介绍的参数化绘图基本思路,有很大的实用价值,可以作更进一步的专业开发与设计,极大满足工程设计的需要.

 

[1]李长勋.AutoCADVBA程序开发技术.国防工业出版社,2004.1

[2]张帆,郑立楷,王华杰AutocadVBA开发精彩实例教程.北京:

清华大学出版社,2004..

[3]龚沛曾,陆慰民,杨志强VB程序设计教程[].北京:

高等教育出版社,2000..

[4]东岳创作室.AutoCAD2000与产品设计.人民邮电出版社,1999.10

[5]肖刚等.机械CAD原理与实践.清华大学出版社,1999

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1