本一CAD课程设计-VBA参数化编程方法及实例_第1页
本一CAD课程设计-VBA参数化编程方法及实例_第2页
本一CAD课程设计-VBA参数化编程方法及实例_第3页
本一CAD课程设计-VBA参数化编程方法及实例_第4页
本一CAD课程设计-VBA参数化编程方法及实例_第5页
免费预览已结束,剩余10页可下载查看

下载本文档

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

文档简介

1、第6章化学工程常用图形VBA参数化编程方法及实例6.1 VBA参数化编程方法简介VBA的全称是ViSUal BaSiC for APPliCation,它有着与VB儿乎相同的语 法和开发环境。基于VBA的参数化编程允许用户对AUtOCAD进行二次开发, 山用户输入(或选择)参数值,程序自动绘制相应的图形。其编程的一般步骤 是先由用户输入一个基准点,然后根据基准点计算出其它各点的位置,调用 AUtOCAD命令进行绘图,最后还要对绘制的图形进行编辑修改,达到最终的效 果,具体来说,二维、三维参数化编程主要分为下面儿个步骤:(1) 绘制图形并确定点图 交互绘制:拿到一个图形,首先要进行分析,这是必不

2、可少的步骤。先 要交互将图形绘制岀来。 确定基点和其它点名:基点就是用户绘图的插入点,要根据实际悄况确 定,例如圆的基准点一般选择圆心,螺钉类图形通常选其结合面的中心点等。 用文字命令将点名写到交互绘制图形上,例如0、1、2n以便后面编程用到 时候方便。 复杂图形:如果图形复杂,应该找出其相似的部分,单独编成函数,这 样可以减少程序的代码量。 特点分析:对称性、重复性、循环性是某些编程图形的特点,符合这种 特点的图形,在编程中只需绘出一个单元图,其余通过镜像、复制、循环语句 即可绘出,这在编程中也是很重要的,它可以大大降低编程的工作量,提高程 序的质量。(2) 确定参数和尺寸参数表 独立参数:

3、参数化编程必须有参数,注意有些参数是独立的,需要山用 户交互式输入,有些参数是不独立的,可能与某些独立参数相关,只需保留独 立参数,不独立参数通过计算得到即可; 尺寸参数表:此外通常标准件在手册上给出了图形各个尺寸参数的表 格,技术人员需要根据表格中的参数及数据,将其输入使得讣算机或CAD软件 能够应用它们。 参数取舍:有些参数比较多,像化工上用的法兰或螺钉标准件,编程的 参数太多,使得其工作量增加很多,有些参数对于设计人员来说是不重要的, 此时将其适当简化是应该的,比如倒角半径、螺纹内外直径差、一些非常小的 无关尺寸,当然一定是不重要的尺寸可以简化,重要的尺寸决不能采用这种方 法,由此达到尽

4、可能简化参数的数量,降低编程的工作量。 图形简化:有些图形真实的结果是非常复杂的,其至有时用编程方法绘 制相当麻烦,比如螺栓的头部圆角,法兰的各个侧面的倒角,此时应该将图形 的圆角或倒角忽略,适当的忽略在参数化编程中是允许的,只要标注正确即可。 重新命名:在设计手册常用件、标准件的参数化尺寸表中,通常有些不 同参数名称是一样的,例如D、d、R、r,这些参数指代的不是同一内容,此 时需要重新命名这些变量,比如用DI、D2、Rl、R2等名称重新命名,因为程 序中这些变量不分大小写,所以尺寸参数表和手册中的标准参数表的变量名称 有时是不一样的,编程者务必注意这样的事情。(3) 列岀编程点表基准点和参

5、数确定后,下面就需要列表计算其它各点的坐标位置,所有这 些点都是根据基点和各个已知参数计算出来的,注意为了编程过程中不乱并便 于检查程序,应该将其以文本表格形式列出,其具体形式请参见后面实例中的 编程点表。(4) 初步编程有了点图、尺寸参数表、编程点表,就可以用进入ViSUaI BaSiC编辑器, 开始编程。点击AUtOCAD环境中的【工具】【宏】VisualBasic编辑器】 菜单,进入UBA编辑环境。可以在VBA环境中插入窗体,设计VB风格的界面。 将上述点图、尺寸参数表、编程点表作为重要依据,进行点和参数语句的编程, 有时为了输入数据的简单,先提前赋值给某些变量,或调用数据库中的参数,

6、直至最后能够用程序绘制出该图形。这里一定要熟悉在VBA环境中调用CAD 命令的格式,避免岀错。(5) 调试任何一位编程人员也不敢保证他所编的程序一点错误也没有,出错是在所 难免的,这就需要调试,试运行程序。设置断点、跟踪变量都是调试程序的助 手。此外还有可能需要在程序中加入尺寸参数表数据,再进一步调试,这一步 调通意味着程序运行可以实现多组数据绘图。如果有必要,AUtOCAD可对源代 码进行工程级加密的功能,保护编程者的劳动。注意:三维参数化编程除了要遵循上述主要步骤之外,还需要注意以下儿 占 编程中计算点的时候,尽量不要变换坐标系,除非万不得已不动; 安排好空间点的位置,注意其变化; 尽量多

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

8、个实例。6. 2.1 一种法兰二维编程实例在化工管道中,法兰连接的使用十分广泛,法兰连接是化工制图中常用图 形。环连接面整体钢制管法兰的剖面图见图6,该图是左右对称的结构,可 以先绘制右侧部分,然后使用镜像命令复制出左侧部分。其点图、尺寸参数表、 点表如下所示:工NSO.表61环连接而整体钢制管法兰尺寸参数表dndddkLnnIhPCfCnSOSIXX151055575144Ml 2 356.592045101575201306890184"Ml 6-456.5920501015902514078100184"M16-506.5924611018IOO32401558611

9、0224M20"656.592468IO18IlO5()170102125224M20"756.592682102112565180112135224wM20-85812269010 13580205136160?8*M2011081226105102016()100215146170R 8"M20"115812281221121170125150*>0()250172200268wM24 145812301461223200295208240308M27-175812341771326240250345245280338"M30X2,2

10、05812362(M142728()30()4153063453612M3X2”2658124226416323453504703624()03612wM33X2-3208124632019354004<)()5304224603616M33X2w3758125237821394606004755253916wM36X3-4208125643423425256705405854216M39X3H480812604902645585我们以Po点为该图形的起点(插入点),XX, SO, SL, L, N, F, P, d, K, Ckh E, C为参数,确定Popl7各点的坐标为:表6-2法

11、兰点表计算点相对点相对角度相对长麼计尊点相对点相对角度相对长度POPIoP91.5piXXPlp()1.5piXXPlIP5Pi(d-k+l>2P2p()OO.5n-(sl-sO)P12Pll1.5piCP3P21.5pi(XX-C-Cy3P13Pll01P4p()p0x÷0.5nPoy-(XX-C-C)pl4P1201P5p40(d-n2Pl5PI0(p-fY2P6P51.5piCpl6P15p!5x+0,5fpl5y+fP7P6Pi(d-dd2P17P150fP8P71.5piCPISP2Pin-2(sl-s)P9p()00.5n-slP19P5Pid接下来,就可以进行基于

12、VBA的参数化编程。(1)为了使用方便,首先在D盘根口录下构建名为“falanpan mdb”的 ACCeSS数据库,在库中创建一个名为“csb”的表格,存放各个参数数据,构 建各个字段(注意顺序不能改变,否则后面的程序按字段顺序提取数据时会出 错。)如图6-3所示,然后将表6-1中各个参数输入到数据库中(具体步骤请 参考ACCeSS资料)。(2)启动AUtOCAD,点击【工具】【宏】ViSUdlBasic编辑器】菜单,进入UBA编辑环境。在右侧“工程”项中点击鼠标右键,选择【插入】I【用户窗体】在VBA环境中插入一个用户窗体,过程如图6-4所示。接下来,在出现的“工具箱”中,单击鼠标右键,选

13、择“附加控件S向工具箱中添加11UMiCrOSOft ADO Data COntrOI 问参数库,如图6-5所示。6. O (SP4) (OLEDB) V控件,以备用ADO方式访附加揑件33dllddeKLnthPQ£r2SOSlx#图64在VBA环境中插入用戸窗体 Mi Crc-soft ACtiVeX Upload Control V 厶 Mi Crc-soft AgeJIt Control 2. 0 Microsoft Microsoft MiCrOSoft MiCrOSoft MiCres of t MiCroSOft Microsoft MiCr6oft确定取消AxIiln

14、 ati CRii Control 6. 0 (SF Axdmgtion Control, VerSie BarCOde COntrol 9.0 Chart COntrol丿 VerSLon 6. COInnlon Dialog: Control, Ve COlnnIUiIiCatiOiI£ ControIV COOIbar COntrol? veri On DtaJZcrbo Control, ver si T4Il显示只显示所选项©Microsoft ADO Data ControL 6.0 (SP4) (OLEDB) 位置C: WiRdwssytem32NSAODC.

15、 OCX图65向工具箱添加ADo控件(3)向用户窗体添加该AdodC控件,并将其UViSibleM属性设为UFalSen 以隐藏该控件。同时添加一个列表框、儿个标签控件和儿个文本框控件,为文 本框命名与标签对应的名字(参见图6-6以及后面的LiStBOXLCIiCk函数),添 加图像控件和两个按钮控件,并调整位置,然后向图像控件引入法兰图片,设 置窗体和按钮UCaPtiOnn属性,如图6-6所示。乔锻;刃邠锻;绒俯;帰莎;胭另;织;另;眾;另;织;朋;级;:協更口:仮图66窗体控件示意图(4)双击用户窗体,进入代码界面,首先在代码的最上端声明通用变量:Dim FaIanPan-COn AS A

16、DODB.ConnectionDim FalanpaneRec AS ADODB-Recordset其中,FalanPan-COn和FalanpaneRec,分别作为数据库对象和数据集对象。 选择窗体的"Initialize"响应函数,该函数负责连接数据库,向列表框添 加数据库中法兰盘的各参数数据。InitialiZe函数代码如下:PnVate SUb USerFOrm.InitializeO以ADO方式打开数据库Set FaIanPan_Con = NeW ADODB1ConnectionSet FaIa叩an-Rec = NeW ADODB-RecordsetDim S

17、QLAS StnngSQL = MPrOVider=MiCrOSOft.Jet.OLEDB.4.0;Data SOUrCe=d:falanan.IndbM '数据库的路径不同则这里需 要修改FaIanPall_Con.Open SQLFalanPalI_Rec.Open ,csb, FaIanPan_Con. adOenDynamic. HdLockBatchOplimistic讣算打开的数据表中有几条记录On ErrOr ReSUme NeXlDim CoUntl AS InIegerCOUntl =OFalanpaii_Rec.MoveFirstDo While NOt Falim

18、Pan_Rec.EOFCOUnll =COUntl + 1FalanPan_Rec.MoveNextLOOP'数据库的指针指向第一条记录Falanpaii_Rec.MoveFirst'向列表框添加记录LiStBOX 1 .ColuinnCount = 6LiStBOXI.AddItemLiSIBOXI.Lst(O. O) = M 型号”ListBoxLLisKO. I) = HDMLiStBOXLLiSt(0,2) = HdMListBoxLLisKO, 3) = MKMLiStBOXLLiSt(0.4) = 1VLiStBOXLLlSt(0,5) = Hn,FOri=I TO

19、COUnllLiStBOX LAddItem FaIimPan_Rec(O)LislBoxLLisUi. 0) = FaIanPalI_Rec( 1)LislBoxLLisUi. 1) = FaIanPalI_Rec(2)LislBoxLLisUi. 2) = FaIanPalI_Rec(3)ListBoxLLisKi. 3) = FaIanPanRec(4)ListBoxLLisKi. 4) = FaIanPaJl-.Rec( 5)ListBoxLLisKi. 5) = FaIanPalI_Rec(6)FaIanPan_Rec.MoveNextNeXl'初始选择确定按钮COInman

20、dBUltOnl .SelFocus'默认选择第一条记录LiStBOX LSeIeCted(I) = TnleEnd SUb(5) 在窗体上双击列表框,编写列表框的点击响应函数,实现选择不同类 型法兰盘时,文本框显示数据的改变,如下所示:PriVaIe SUb LisiBoxLClickO'点击IiStbOX 的首行不能绘图If LiStBOX 1.Listindex = 0 ThenCOmnIandBUtlOn 1 .Enabled = FalSeEXit SUbElSeCOmmandBUttOn LEnabled = TrUeEnd IfOn ErrOr ReSUnW Ne

21、XlFaIalIPalVReC.MoveFirstFOri=I To LiStBOXLLiStIndeX - 1:首行已经用于显示字段名,所以,下标为I为第一个记录FalimP an_ReC.MoveNextNeXlTxtD.Text = FaIanPan_Rec(2) Tala叩anjec(0)和(1)分别为 ID 号和型号Txtd2.Text = FaIanPan-Rec(3)TxtK-Text = FaIanPan_Rec(4)TxtL.Text = FaIanPan_Rec( 5)Txtn.Text = FalanP an_ReC(6)TXtth.Text = FaIanPan_Rec

22、( 7)Txt.Text = FalanP an_Rec(8)Txte.Text = FaIanPan_Rec(9)TxtfText = FalimP aii_ReC(IO)Txte.Text = FaIanPan_Rec( 11)Txtn2.Text = FalanPan_Rec( 12)TxtsO.Text = FalanP an_Rec( 13)TXtSLTeXt = Fala 叩 an_ReC(14)Txtxx.Text = FalimP an_Rec( 15)End SUb(6) 回到窗体界面,双击“确定”按钮,出现代码窗口。在这个函数中, 要分别创建粗实线层、中心线层、剖面线层并设

23、置其颜色、线型和线宽。在绘 图过程中,首先提示输入基点,然后根据点表62计算法兰盘右半侧的各点坐 标;接下来调用绘图命令绘制图形。在绘制过程中,用到了绘制直线命令和镜 像命令。剖面线的绘制要先绘制边界直线,然后在边界直线围成的区域内调用 打剖面线命令绘制剖面线。PnVate SUb COmInandBUttOnl _CliCkoK 制法兰盘'隐藏窗体.以显示绘图区Me.Hide'设定粗实线层颜色Dim CSXLayObj AS ACadLayerSet CSXLayObj = ThiSDraWing.Layers. Add('* 粗实线层”)CSXLayObj.colo

24、r = acWhiie'设定粗实线层的线型Dim entbj AS ACadLineTyPeDim found 1 AS BOoIeanfound 1 = FaISeFOr EaCh entbj In TlIiSDraWing.LinetypesIi StrCOlnP(entbj.Name, OCOntinUOus, 1) = 0 Thenfound 1 =TrUe EXit FOrEnd IfNeXl'如果没有加载粗实线线型,则从线型文件acad.lin中加载IfNOKfOUndI)ThenThiSDraWing.Linelypes.Load *,continuous,

25、9;, OaCadJin” End IfCSXLayObj.Linetype = MCOntinUOUSn'设定粗实线层的线宽CSXLayObj.Lineweight = acLnWtO3ODim CUrrLayer AS ACadLayer '用于保存肖前图层的对象变量Dim newLayer AS ACadLayer '保存新肖前图层的对象变量Set CUrrLayer = ThiSDraWing.ActiveLayerSet newLayer = ThiSDraWing.Layers(,粗实线层Z)ThiSDraWing.ActiveLayer = newLaye

26、r'输入插入点Dim InSertPnt AS ValiantOn ErrOr GOTO GetPOintWrOnginserlPnt = ThiSDraWing.Utilily.GelPoint(, K请输入插入点:M)'计算各点坐标Dim Pnll(O TO 2) AS DOUbleDim XX AS DoUbIeXX = CDbI(TXtXX.Text) CDbl为将文木数据转换成双精度数据函数PntI(O) = InsertPnt(O)PntI(I) = insertPnt(l)-XXPntl(2) = insertPnt(2)'平面绘图中,Z坐标为0Dim P

27、nt2(0 TO 2) AS DOUblePnt2(0) = insertPnt(O) + 0.5 * CDbI(TXln2.Text)(CDbl(TXISLTeXt) CDbl(TXtSO.Text) Pnt2( 1) = insertPnt( 1)Pnl2(2) = insertPnt(2)Dim Pnl3(0 TO 2) AS DOUblePnt3(0) = Pnt2(0)Pnl3( 1) = Pnt2( 1)(CDbl(TXtXX.Text) CDbI(TXtC.Text) CDbl(TXIe.Text) / 3Pnl3(2) = insertPnt(2)Dim Pnt4(0 TO 2

28、) AS DOUblePnt4(0) = insertPnt(O) + 0.5 * CDbI(TXtn2.Text)Pnt4( 1) = insertPnt( 1)(CDbl(TXtXX.Text) - CDbI(TXtC.Text) CDbI(TXte.Text) Pnt4(2) = insertPnt(2)Dim Pnt5(0 TO 2) AS DOUbIePnl5(0) = Pnl4(0) + (CDbKTXtD.Text) - CDbl(TXtn2.Texl) / 2Pnl5( 1) = Pnt4( 1)Pnt5(2) = insertPnt(2)Dim Pnl6(0 TO 2) AS

29、 DOUblePnl6(0) = Pnt5(0)Pnl6( 1) = Pnt5( 1) - CDbI(TXtC.Text)Pnl6(2) = insertPnl(2)Dim Pnt7(0 TO 2) AS DOUbIePnt7(0) = Pnt6(0)(CDbl(TXtD.Text) - CDbl(TXtd2.Texl)/ 2Pnl7(l) = Pnt6(l)Pnt7(2) = insertPnt(2)Dim Pnl8(0 TO 2) AS DOUblePntS(O) = Pnt7(0)Pnt8( 1) = Pnt7( 1) - CDbI(TXte.Text)Pnt8(2) = insertP

30、nt(2)Dim Pnl9(0 TO 2) AS DOUbIePnl9(0) = insertPnt(O) + 0.5 * CDbl(TXtn2.Text) CDbl(TXISl .Text)Pnl9( 1) = insertPnt( 1)Pnt9(2) = insertPnt(2)Dinl PntlO(O TO 2) AS DOUblePntlO(O) = Pnt9(0)PntlO(I) = Pnt9( 1) - CDbl(TXtXX.Text)PntlO(2) = insertPnt(2)Dim PntlI(O TO 2) AS DOUblePnIlI(O) = PntS(O) (CDbl

31、(TXtD.Text) CDbl(TXtK.Text) + CDbI(TXlL.Text) / 2PntlI(I) = PnI5(1)PntlI (2) = insertPnt(2)Dinl Pnt 12(0 TO 2) AS DOUbIePntP(O) = Pnill(O)Pntl2(1) = PnIll(I) CDbI(TXtC.Text)Pntl2(2) = insertPni(2)Dim Pnl 13(0 TO 2) AS DOUblePnt 13(0)= Pnl Il(O) + CDbI(TXtL.Text)Pntl3(l) = Pntl 1(1)Pntl3(2) = insertP

32、nt(2)Dim Pnt 14(0 TO 2) AS DOUblePnl 14(0) = Pnt 12(0) + CDbl(TXlL.Text)PnlU(I) = Pnt 12(1)Pnll4(2) = insertPnt(2)Dim Pnt 15(0 TO 2) AS DOUblePnt 15(0) = Pntl(O) + (CDbl(TXtP.Text) - CDbI(TXlf.Text)/2Pntl5(l) = Pntl(I)Pntl5(2) insertPnt(2)Dim Pnt 16(0 TO 2) AS DOUblePnt 16(0) = Pnt 15(0) + 0.5 * CDb

33、l(TXtf.Text)Pntl6(D = Pnt 15(1) + CDbI(TXtf.Text)Pntl6(2) insertPnt(2)Dim Pnt 17(0 TO 2) AS DOUbIePnt 17(0) = Pnt 15(0) ÷ CDbI(TXtf.Text)Pntl7(l) = Pntl5(l)Pnll7(2) = insertPnt(2)绘制半个法兰盘中不是剖而线边界的直线Dim IinObj(O TO 4) AS ACadLineSet IinObj(O) = ThiSDraWing.ModelSpace.AddLine(insertPnt, Pnt9)Sel I

34、inObj( 1) = ThiSDraWing.ModelSpace.AddLine(Pnt IL Pnt 13) Set IinObj(2) = ThiSDraWing.ModelSpace.AddLine(Pnt 12. Pnt 14)Set IlnObj(3) = ThiSDraWing.ModelSpace.AddLinefPnt 15. Pnt 17) Sel IinObj(4) = ThiSDraWing.ModelSpace.AddLinefPnt 10. PntI)'绘制半个法兰盘中是剖面线边界的直线DimOUterLOOP(OTO Il)ASACadEmiy注意:对彖

35、数址要严格和边界直线数一致 Set OUIerLoOP(O) = ThiSDraWing.ModelSace.AddLine(Pnt9. Pnt2)Set OUlerLoo( 1) = ThiSDraWing.ModelSace.AddLine(Pl2. Pnt3)Sel OUterLOOP=ThiSDraWing,ModelSace.AddLine(Pl3. Pnt4)Sel OUterLOOP(3) = ThiSDraWing,ModelSace.AddLine(Pnt4. Pntll)Set OUterLOOP(4) = ThiSDraWing.ModelSpace.AddLine(Pn

36、t 11. Pnt 12)Set OUterLOOP(5) = ThiSDraWing.ModelSpace.AddLine(Pnt 12. Pnt7)Set OUterLoOP =ThiSDraWing.ModelSace.AddLine(Pni7. Pnt8)Set OUterLOOP(7) = ThiSDraWing.ModelSace.AddLine(Pnt8. Pnt 17)Set OUlerLOOP=ThiSDraWing.ModelSpace.AddLine(Pnt 17. Pnt 16)Set OUlerLOOP=ThiSDraWing.ModelSpace.AddLine(P

37、nt 16. Pnt 15)Set OUterLoo( 10) = ThiSDraWing.ModeISpace.AddLine(Pnt 15. PntlO)Set OUterLoo( 11) = ThiSDraWing.ModelSpace.AddLine(Pnt 10. Pnt9)Dim OUIerLOOP2(0To 3) AS ACadEntity 注意:对畝数虽要严格和边界直线数一致Set OUIerLOOP2(0) = ThiSDraWing.ModelSpace.AddLine(Pnt 13, Pnl5)Set OUterLoOP2( 1) = ThiSDraWing.ModelS

38、pace.AddLine(Pnt5, Pm6)Set OUterLoOP2(2) = ThiSDraWing.ModelSpace.AddLine(Pnt6. Pnt 14)Set OUterLoOP2(3) = ThiSDraWing.ModelSpace.AddLine(Pnt 14. Pnt 13)设定剖面线层颜色Dim IiatchLayObj AS ACadLayerSet IiatchLayObj = ThiSDraWing.Layers.AddC 剖面线层") hatchLay Obj .color = acYellowSet newLayer = ThlSDraWin

39、g.Layers(剖面线层”)ThiSDraWing.ActiveLayer = newLayer'设定剖面线层的线型Dim entbj 1 AS ACadLineTyPeDim found AS BoOIealIfound = FalSeFOr EaCh entbjl In ThiSDraWing.LinetypesIi StrCoInP(entbj 1 .Naine. "cominuous", 1) = 0 Then found = TrUeEXit FOrEnd IfNeXt'如果没有加载剖面线线型,则从线型文件acad.lin中加载IfNOl (fo

40、und) ThenThiSDraWing.Linelvpes.Load HCOnlinUOus, "acad.lin”End IfhatchLayObj .Linetype = MCOntinUOUSMDim hatchbj AS ACadHalCh '声明剖面线对象变fitDim PatternName AS Strlng '保存剖而线模式名称的对象变虽Dim PalIernTyPe AS Long保存剖面线模式类型的对象变址Dim assocVar AS BOOIean'判断剖面线与轮廉是否结合定义剖面线模式PalternNanIe = MAnSi3 ,P

41、aIternTyPe = acHatchPatiernTypePreDefinedassocVar = Tnle 与边界结合'创建剖面线对象Sel hatchbj = TIliSDraWing.ModelSace.AddHatch(atternTye, PatternName. assocVar)'将外轮廓线和剖而线关联起來,并计算,使剖面线与边界吻合,完成打右侧的剖面线 hatchObj.AppendOuierLoop (OUIerLOOP)IiatchObj-EvaluateIiatchObj. APPendOUlerLOoP (OUlerLoOP2)hatchbj.Eva

42、luate'通过镜像绘制另一半Dim i AS IntegerDimretVal(OTOlI)ASACadLine '注意打剖面线时数组的大小要和轮廓线数S:致Dim retval2(0 TO 3) AS ACadLine YetValL 2分别是镜像后的对鉄集(直线集)Fori = OTo4 镜像不是剖Ini线边界的直线IinObj(I)Alirror insertPnt, PntlNeXl'镜像是剖面线边界的直线并记录其镜像后的线集以便绘制镜像后区域内的剖【加线FOri = OTO 11Set retVal(i) = OUIerLOOP(i).Mirror(inse

43、rtPnt, Pntl)NeXlFOri = OT0 3Set retval2(i) = OUterLOOP2(i).Mirror(insertPnt. Pnt 1)NeXl'给镜像的另一半打剖而线IiatchObj. APPendOUterLOOP (ret Val)IiatchObj-EvaluatehatchObj.AendOulerLoo (retval2)IiatchObj-Evaluate'绘制中心线'设定中心线层颜色Dim CenterLayObj AS ACadLayerSet CenlerLayObj = ThiSDraWing.Layers. Add

44、( 心线层 K)CenterLayObj .color = acGreenSet newLayer = ThiSDraWing.Layers("中心线层K)ThiSDraWing.ActiveLayer = newLayer'设定中心线层的线型tbund = FalSeFOr EaCh entbjl In ThiSDraWing.LinetypesIf StrCOmP(entbj 1 .Name. ,Cente 1) = 0 Thenfound = TrUeEXil FOrEnd IfNeXl'如果没有加载中心线线型,则从线型文件acad.lin中加载IfNOt (f

45、ound) ThenThisDrawing.Linelypes.Load MCenterH, MaCad.linEnd IfCenIerLayObj.Linetype = "Center"'设定中心线层的线宽'CenterLayObj-Lineweight = acLnWt(XX)'Sfi中心线Dim midPntl(O TO 2) As DOUbleDim midPnl2(0 TO 2) AS DOUbIeDim midPnt3(0 TO 2) AS DOUbIeInidPntl(O) = 0.5 * (PntlI(O) + Pnt 13(0)midPntKl) = PntlI(I)InidPntI

温馨提示

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

评论

0/150

提交评论