本一CAD课程设计VBA参数化编程方法及实例.docx

上传人:b****7 文档编号:11361569 上传时间:2023-02-28 格式:DOCX 页数:26 大小:234.33KB
下载 相关 举报
本一CAD课程设计VBA参数化编程方法及实例.docx_第1页
第1页 / 共26页
本一CAD课程设计VBA参数化编程方法及实例.docx_第2页
第2页 / 共26页
本一CAD课程设计VBA参数化编程方法及实例.docx_第3页
第3页 / 共26页
本一CAD课程设计VBA参数化编程方法及实例.docx_第4页
第4页 / 共26页
本一CAD课程设计VBA参数化编程方法及实例.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

本一CAD课程设计VBA参数化编程方法及实例.docx

《本一CAD课程设计VBA参数化编程方法及实例.docx》由会员分享,可在线阅读,更多相关《本一CAD课程设计VBA参数化编程方法及实例.docx(26页珍藏版)》请在冰豆网上搜索。

本一CAD课程设计VBA参数化编程方法及实例.docx

本一CAD课程设计VBA参数化编程方法及实例

第6章化学工程常用图形VBA参数化编程方法及实例

6.1VBA参数化编程方法简介

VBA的全称是VisualBasicforApplication,它有着与VB几乎相同的语法和开发环境。

基于VBA的参数化编程允许用户对AutoCAD进行二次开发,由用户输入(或选择)参数值,程序自动绘制相应的图形。

其编程的一般步骤是先由用户输入一个基准点,然后根据基准点计算出其它各点的位置,调用AutoCAD命令进行绘图,最后还要对绘制的图形进行编辑修改,达到最终的效果,具体来说,二维、三维参数化编程主要分为下面几个步骤:

(1)绘制图形并确定点图

①交互绘制:

拿到一个图形,首先要进行分析,这是必不可少的步骤。

先要交互将图形绘制出来。

②确定基点和其它点名:

基点就是用户绘图的插入点,要根据实际情况确定,例如圆的基准点一般选择圆心,螺钉类图形通常选其结合面的中心点等。

用文字命令将点名写到交互绘制图形上,例如0、1、2…n以便后面编程用到时候方便。

③复杂图形:

如果图形复杂,应该找出其相似的部分,单独编成函数,这样可以减少程序的代码量。

④特点分析:

对称性、重复性、循环性是某些编程图形的特点,符合这种特点的图形,在编程中只需绘出一个单元图,其余通过镜像、复制、循环语句即可绘出,这在编程中也是很重要的,它可以大大降低编程的工作量,提高程序的质量。

(2)确定参数和尺寸参数表

①独立参数:

参数化编程必须有参数,注意有些参数是独立的,需要由用户交互式输入,有些参数是不独立的,可能与某些独立参数相关,只需保留独立参数,不独立参数通过计算得到即可;

②尺寸参数表:

此外通常标准件在手册上给出了图形各个尺寸参数的表格,技术人员需要根据表格中的参数及数据,将其输入使得计算机或CAD软件能够应用它们。

③参数取舍:

有些参数比较多,像化工上用的法兰或螺钉标准件,编程的参数太多,使得其工作量增加很多,有些参数对于设计人员来说是不重要的,此时将其适当简化是应该的,比如倒角半径、螺纹内外直径差、一些非常小的无关尺寸,当然一定是不重要的尺寸可以简化,重要的尺寸决不能采用这种方法,由此达到尽可能简化参数的数量,降低编程的工作量。

④图形简化:

有些图形真实的结果是非常复杂的,甚至有时用编程方法绘制相当麻烦,比如螺栓的头部圆角,法兰的各个侧面的倒角,此时应该将图形的圆角或倒角忽略,适当的忽略在参数化编程中是允许的,只要标注正确即可。

⑤重新命名:

在设计手册常用件、标准件的参数化尺寸表中,通常有些不同参数名称是一样的,例如D、d、R、r,这些参数指代的不是同一内容,此时需要重新命名这些变量,比如用D1、D2、R1、R2等名称重新命名,因为程序中这些变量不分大小写,所以尺寸参数表和手册中的标准参数表的变量名称有时是不一样的,编程者务必注意这样的事情。

(3)列出编程点表

基准点和参数确定后,下面就需要列表计算其它各点的坐标位置,所有这些点都是根据基点和各个已知参数计算出来的,注意为了编程过程中不乱并便于检查程序,应该将其以文本表格形式列出,其具体形式请参见后面实例中的编程点表。

(4)初步编程

有了点图、尺寸参数表、编程点表,就可以用进入VisualBasic编辑器,开始编程。

点击AutoCAD环境中的【工具】|【宏】|【VisualBasic编辑器】菜单,进入VBA编辑环境。

可以在VBA环境中插入窗体,设计VB风格的界面。

将上述点图、尺寸参数表、编程点表作为重要依据,进行点和参数语句的编程,有时为了输入数据的简单,先提前赋值给某些变量,或调用数据库中的参数,直至最后能够用程序绘制出该图形。

这里一定要熟悉在VBA环境中调用CAD命令的格式,避免出错。

(5)调试

任何一位编程人员也不敢保证他所编的程序一点错误也没有,出错是在所难免的,这就需要调试,试运行程序。

设置断点、跟踪变量都是调试程序的助手。

此外还有可能需要在程序中加入尺寸参数表数据,再进一步调试,这一步调通意味着程序运行可以实现多组数据绘图。

如果有必要,AutoCAD可对源代码进行工程级加密的功能,保护编程者的劳动。

注意:

三维参数化编程除了要遵循上述主要步骤之外,还需要注意以下几点:

①编程中计算点的时候,尽量不要变换坐标系,除非万不得已不动;

②安排好空间点的位置,注意其变化;

③尽量多用三维旋转Rotate3d、移动Move等命令。

6.2化学工程二维图形VBA参数化编程实例

在化工CAD制图过程中,经常会用到大量的常用标准件的绘制问题,而这些标准件是常用的、结构一致,带有参数表的,这样的图形如果用交互式方法绘制,不仅麻烦,而且降低设计效率,利用AutoCAD系统提供的强大的参数化编程功能来减少工作量,来进行程序自动绘制,是AutoCAD软件系统的优越功能之一,本章将以化工常用标准件为例,用VBA编程模式,介绍法兰、法兰盖、封头、筒体、支座、人孔、手孔的二维参数化编程7个实例;鞍式支座、A型支承式支座、A型耳式支座、常压手孔、水平吊盖式平焊法兰人孔三维参数化编程5个实例。

6.2.1一种法兰二维编程实例

在化工管道中,法兰连接的使用十分广泛,法兰连接是化工制图中常用图形。

环连接面整体钢制管法兰的剖面图见图6-1,该图是左右对称的结构,可以先绘制右侧部分,然后使用镜像命令复制出左侧部分。

其点图、尺寸参数表、点表如下所示:

图6-1环连接面整体钢制管法兰

图6-2法兰点图

 

表6-1环连接面整体钢制管法兰尺寸参数表

dn

d

dd

k

L

nn

th

p

e

f

c

n

s0

s1

xx

15

20

25

32

40

50

65

80

100

125

150

200

250

300

350

400

105

55

75

14

4

"M12"

35

6.5

9

20

45

10

15

75

130

68

90

18

4

"M16"

45

6.5

9

20

50

10

15

90

140

78

100

18

4

"M16"

50

6.5

9

24

61

10

18

100

155

86

110

22

4

"M20"

65

6.5

9

24

68

10

18

110

170

102

125

22

4

"M20"

75

6.5

9

26

82

10

21

125

180

112

135

22

4

"M20"

85

8

12

26

90

10

22

135

205

136

160

22

8

"M20"

110

8

12

26

105

10

20

160

215

146

170

22

8

"M20"

115

8

12

28

122

11

21

170

250

172

200

26

8

"M24"

145

8

12

30

146

12

23

200

295

208

240

30

8

"M27"

175

8

12

34

177

13

26

240

345

245

280

33

8

"M30X2"

205

8

12

36

204

14

27

280

415

306

345

36

12

"M33X2"

265

8

12

42

264

16

32

345

470

362

400

36

12

"M33X2"

320

8

12

46

320

19

35

400

530

422

460

36

16

"M33X2"

375

8

12

52

378

21

39

460

600

475

525

39

16

"M36X3"

420

8

12

56

434

23

42

525

670

540

585

42

16

"M39X3"

480

8

12

60

490

26

45

585

我们以p0点为该图形的起点(插入点),xx,S0,SL,L,N,F,P,d,K,dd,E,C为参数,确定p0~p17各点的坐标为:

表6-2法兰点表

计算点

相对点

相对角度

相对长度

计算点

相对点

相对角度

相对长度

p0

p10

p9

1.5pi

xx

p1

p0

1.5pi

xx

p11

p5

pi

(d-k+l)/2

p2

p0

0

0.5n-(sl-s0)

p12

p11

1.5pi

c

p3

p2

1.5pi

(xx-c-e)/3

p13

p11

0

l

p4

p0

p0x+0.5n

p0y-(xx-c-e)

p14

p12

0

l

p5

p4

0

(d-n)/2

p15

p1

0

(p-f)/2

p6

p5

1.5pi

c

p16

p15

p15x+0.5f

p15y+f

p7

p6

pi

(d-dd)/2

p17

p15

0

f

p8

p7

1.5pi

e

p18

p2

pi

n-2(sl-s0)

p9

p0

0

0.5n-sl

p19

p5

pi

d

接下来,就可以进行基于VBA的参数化编程。

(1)为了使用方便,首先在D盘根目录下构建名为“falanpan.mdb”的Access数据库,在库中创建一个名为“csb”的表格,存放各个参数数据,构建各个字段(注意顺序不能改变,否则后面的程序按字段顺序提取数据时会出错。

)如图6-3所示,然后将表6-1中各个参数输入到数据库中(具体步骤请参考Access资料)。

(2)启动AutoCAD,点击【工具】|【宏】|【VisualBasic编辑器】菜单,进入VBA编辑环境。

在右侧“工程”项中点击鼠标右键,选择【插入】|【用户窗体】在VBA环境中插入一个用户窗体,过程如图6-4所示。

接下来,在出现的“工具箱”中,单击鼠标右键,选择“附加控件”,向工具箱中添加“MicrosoftADODataControl6.0(SP4)(OLEDB)”控件,以备用ADO方式访问参数库,如图6-5所示。

图6-3构建数据库字段

图6-4在VBA环境中插入用户窗体

图6-5向工具箱添加ADO控件

 

(3)向用户窗体添加该Adodc控件,并将其“Visible”属性设为“False”以隐藏该控件。

同时添加一个列表框、几个标签控件和几个文本框控件,为文本框命名与标签对应的名字(参见图6-6以及后面的ListBox1_Click函数),添加图像控件和两个按钮控件,并调整位置,然后向图像控件引入法兰图片,设置窗体和按钮“Caption”属性,如图6-6所示。

图6-6窗体控件示意图

(4)双击用户窗体,进入代码界面,首先在代码的最上端声明通用变量:

DimFalanpan_ConAsADODB.Connection

DimFalanpan_RecAsADODB.Recordset

其中,Falanpan_Con和Falanpan_Rec,分别作为数据库对象和数据集对象。

选择窗体的“Initialize”响应函数,该函数负责连接数据库,向列表框添

加数据库中法兰盘的各参数数据。

Initialize函数代码如下:

PrivateSubUserForm_Initialize()

'以ADO方式打开数据库

SetFalanpan_Con=NewADODB.Connection

SetFalanpan_Rec=NewADODB.Recordset

DimSQLAsString

SQL="provider=Microsoft.Jet.OLEDB.4.0;DataSource=d:

\falanpan.mdb"'数据库的路径不同则这里需要修改

Falanpan_Con.OpenSQL

Falanpan_Rec.Open"csb",Falanpan_Con,adOpenDynamic,adLockBatchOptimistic

'计算打开的数据表中有几条记录

OnErrorResumeNext

Dimcount1AsInteger

count1=0

Falanpan_Rec.MoveFirst

DoWhileNotFalanpan_Rec.EOF

count1=count1+1

Falanpan_Rec.MoveNext

Loop

'数据库的指针指向第一条记录

Falanpan_Rec.MoveFirst

 

'向列表框添加记录

ListBox1.ColumnCount=6

ListBox1.AddItem

ListBox1.List(0,0)="型号"

ListBox1.List(0,1)="D"

ListBox1.List(0,2)="d"

ListBox1.List(0,3)="K"

ListBox1.List(0,4)="L"

ListBox1.List(0,5)="n"

Fori=1Tocount1

ListBox1.AddItemFalanpan_Rec(0)

ListBox1.List(i,0)=Falanpan_Rec

(1)

ListBox1.List(i,1)=Falanpan_Rec

(2)

ListBox1.List(i,2)=Falanpan_Rec(3)

ListBox1.List(i,3)=Falanpan_Rec(4)

ListBox1.List(i,4)=Falanpan_Rec(5)

ListBox1.List(i,5)=Falanpan_Rec(6)

Falanpan_Rec.MoveNext

Next

'初始选择确定按钮

CommandButton1.SetFocus

'默认选择第一条记录

ListBox1.Selected

(1)=True

EndSub

(5)在窗体上双击列表框,编写列表框的点击响应函数,实现选择不同类型法兰盘时,文本框显示数据的改变,如下所示:

PrivateSubListBox1_Click()

'点击listbox框的首行,不能绘图

IfListBox1.ListIndex=0Then

CommandButton1.Enabled=False

ExitSub

Else

CommandButton1.Enabled=True

EndIf

OnErrorResumeNext

Falanpan_Rec.MoveFirst

Fori=1ToListBox1.ListIndex-1'注意:

首行已经用于显示字段名,所以,下标为1为第一个记录

Falanpan_Rec.MoveNext

Next

TxtD.Text=Falanpan_Rec

(2)'falanpan_rec(0)和

(1)分别为ID号和型号

Txtd2.Text=Falanpan_Rec(3)

TxtK.Text=Falanpan_Rec(4)

TxtL.Text=Falanpan_Rec(5)

Txtn.Text=Falanpan_Rec(6)

Txtth.Text=Falanpan_Rec(7)

Txtp.Text=Falanpan_Rec(8)

Txte.Text=Falanpan_Rec(9)

Txtf.Text=Falanpan_Rec(10)

Txtc.Text=Falanpan_Rec(11)

Txtn2.Text=Falanpan_Rec(12)

Txts0.Text=Falanpan_Rec(13)

Txts1.Text=Falanpan_Rec(14)

Txtxx.Text=Falanpan_Rec(15)

EndSub

(6)回到窗体界面,双击“确定”按钮,出现代码窗口。

在这个函数中,要分别创建粗实线层、中心线层、剖面线层并设置其颜色、线型和线宽。

在绘图过程中,首先提示输入基点,然后根据点表6-2计算法兰盘右半侧的各点坐标;接下来调用绘图命令绘制图形。

在绘制过程中,用到了绘制直线命令和镜像命令。

剖面线的绘制要先绘制边界直线,然后在边界直线围成的区域内调用打剖面线命令绘制剖面线。

PrivateSubCommandButton1_Click()'绘制法兰盘

'隐藏窗体,以显示绘图区

Me.Hide

'设定粗实线层颜色

DimCSXLayObjAsAcadLayer

SetCSXLayObj=ThisDrawing.Layers.Add("粗实线层")

CSXLayObj.color=acWhite

'设定粗实线层的线型

DimentObjAsAcadLineType

Dimfound1AsBoolean

found1=False

ForEachentObjInThisDrawing.Linetypes

IfStrComp(entObj.Name,"continuous",1)=0Then

found1=True

ExitFor

EndIf

Next

'如果没有加载粗实线线型,则从线型文件acad.lin中加载

IfNot(found1)Then

ThisDrawing.Linetypes.Load"continuous","acad.lin"

EndIf

CSXLayObj.Linetype="continuous"

'设定粗实线层的线宽

CSXLayObj.Lineweight=acLnWt030

DimcurrLayerAsAcadLayer'用于保存当前图层的对象变量

DimnewLayerAsAcadLayer'保存新当前图层的对象变量

SetcurrLayer=ThisDrawing.ActiveLayer

SetnewLayer=ThisDrawing.Layers("粗实线层")

ThisDrawing.ActiveLayer=newLayer

'输入插入点

DiminsertPntAsVariant

OnErrorGoToGetPointWrong

insertPnt=ThisDrawing.Utility.GetPoint(,"请输入插入点:

")

'计算各点坐标

DimPnt1(0To2)AsDouble

DimxxAsDouble

xx=CDbl(Txtxx.Text)'CDbl为将文本数据转换成双精度数据函数

Pnt1(0)=insertPnt(0)

Pnt1

(1)=insertPnt

(1)-xx

Pnt1

(2)=insertPnt

(2)'平面绘图中,Z坐标为0

DimPnt2(0To2)AsDouble

Pnt2(0)=insertPnt(0)+0.5*CDbl(Txtn2.Text)-(CDbl(Txts1.Text)-CDbl(Txts0.Text))

Pnt2

(1)=insertPnt

(1)

Pnt2

(2)=insertPnt

(2)

DimPnt3(0To2)AsDouble

Pnt3(0)=Pnt2(0)

Pnt3

(1)=Pnt2

(1)-(CDbl(Txtxx.Text)-CDbl(Txtc.Text)-CDbl(Txte.Text))/3

Pnt3

(2)=insertPnt

(2)

DimPnt4(0To2)AsDouble

Pnt4(0)=insertPnt(0)+0.5*CDbl(Txtn2.Text)

Pnt4

(1)=insertPnt

(1)-(CDbl(Txtxx.Text)-CDbl(Txtc.Text)-CDbl(Txte.Text))

Pnt4

(2)=insertPnt

(2)

DimPnt5(0To2)AsDouble

Pnt5(0)=Pnt4(0)+(CDbl(TxtD.Text)-CDbl(Txtn2.Text))/2

Pnt5

(1)=Pnt4

(1)

Pnt5

(2)=insertPnt

(2)

DimPnt6(0To2)AsDouble

Pnt6(0)=Pnt5(0)

Pnt6

(1)=Pnt5

(1)-CDbl(Txtc.Text)

Pnt6

(2)=insertPnt

(2)

DimPnt7(0To2)AsDouble

Pnt7(0)=Pnt6(0)-(CDbl(TxtD.Text)-CDbl(Txtd2.Text))/2

Pnt7

(1)=Pnt6

(1)

Pnt7

(2)=insertPnt

(2)

DimPnt8(0To2)AsDouble

Pnt8(0)=Pnt7(0)

Pnt8

(1)=Pnt7

(1)-CDbl(Txte.Text)

Pnt8

(2)=insertPnt

(2)

DimPnt9(0To2)AsDouble

Pnt9(0)=insertPnt(0)+0.5*CDbl(Txtn2.Text)-CDbl(Txts1.Text)

Pnt9

(1)=insertPnt

(1)

Pnt9

(2)=insertPnt

(2)

DimPnt10(0To2)AsDouble

Pnt10(0)=Pnt9(0)

Pnt10

(1)=Pnt9

(1)-CDbl(Txtxx.Text)

Pnt10

(2)=insertPnt

(2)

DimPnt11(0To2)AsDouble

Pnt11(0)=Pnt5(0)-(CDbl(TxtD.Text)-CDbl(TxtK.Text)+CDbl(TxtL.Text))/2

Pnt11

(1)=Pnt5

(1)

Pnt11

(2)=insertPnt

(2)

DimPnt12(0To2)AsDouble

Pnt12(0)=Pnt11(0)

Pnt12

(1)=Pnt11

(1)-CDbl(Txtc.Text)

Pnt12

(2)=insertPnt

(2)

DimPnt13(0To2)AsDouble

Pnt13(0)

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

当前位置:首页 > 高等教育 > 历史学

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

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