AutoCADVBA技术在杭州萧山机场T3航站楼金属吊顶工程中的初步应用Word_第1页
AutoCADVBA技术在杭州萧山机场T3航站楼金属吊顶工程中的初步应用Word_第2页
AutoCADVBA技术在杭州萧山机场T3航站楼金属吊顶工程中的初步应用Word_第3页
AutoCADVBA技术在杭州萧山机场T3航站楼金属吊顶工程中的初步应用Word_第4页
AutoCADVBA技术在杭州萧山机场T3航站楼金属吊顶工程中的初步应用Word_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

1、autocad-vba技术在杭州萧山机场t3航站楼金属吊顶工程中的初步应用亨特道格拉斯(中国)投资有限公司 吕志路摘要:autocad软件是当前建筑装饰工程中应用最广泛的cad(计算机辅助设计)软件。autocad-vba技术是应用microsoft vba编程环境,对autocad进行二次开发的编程技术。本文介绍了在萧山机场t3航站楼金属吊顶工程中,如何运用autocad-vba技术,解决大规模曲面吊顶autocad模型空间点坐标数据提取和金属吊顶单元面板数据(面板加工尺寸数据)生成等工程问题。通过该技术的应用,减少了大量的从吊顶三维曲面模型到实际金属面板加工工艺尺寸的转化时间和人工成本,也

2、杜绝了如果采用人工转化的出错可能。关键词:autocad-vba autocad二次开发 金属吊顶 一、autocad-vba技术基本介绍autocad-vba的编程环境是microsoft vba ,microsoft vba是一个面向对象的编程环境,其编程的核心语言是visual basic语言(vb语言),可提供类似 visual basic的丰富开发功能。autocad-vba和 autocad 在同一进程空间中运行,所以autocad-vba可以与autocad人工操作界面进行交互操作,进一步发挥和扩展autocad的原有功能。由于microsoft公司的办公软件excel也提供了m

3、icrosoft vba的操作接口,所以还可以运用autocad-vba技术进行autocad与excel进行信息的互通(提取autocad软件中的模型数据,储存到excel文件中,反之也可以)。autocad中集成了microsoft vba的编程环境,进入编程环境可以运用以下两种方法:1. autocad命令行输入:vbaide2. 菜单路径:【工具】【宏】【visual basic 编辑器】本文将不具体讲述编程环境的操作和使用,如果有需要可以查看autocad的help文件。二、杭州萧山机场t3航站楼金属吊顶工程基本介绍该吊顶工程是大型的异形曲面(双曲面)金属吊顶,总面积超过5万平面。吊

4、顶单元组块为平面三角形,单个组块面积在1平米左右,每个三角形组块的边长都不一致。通过5万多块尺寸不一的空间三角形的拼接,就拟合出一个超大型的空间波浪形曲面。萧山机场吊顶效果图三、工程中遇到的难题吊顶原始模型是autocad文件中大量的空间点。这些空间点连线形成的三角形就形成三角形板块的分格线(这还不是金属板块的真实边线和真实尺寸),由于工程安装需要和考虑环境温度变化等因素,板块与板块之间必须留有一定的缝隙,所以空间点连接形成的三角形还必须进行边的偏移处理(偏缝处理)才能得到真实的金属面板尺寸模型。最后提取真实模型的边长尺寸,制成excel加工清单表格,才能最终用到工厂的生成加工中去。吊顶三角面

5、板分格模型图(左:俯视图 右:轴测图)分格线与真实面板边线示意图总的来说,如果进行人工处理,从吊顶原始模型到excel加工清单必须经过以下过程:原始模型空间点连线>空间三角形分格模型>分格模型边线偏移处理>真实金属面板尺寸模型>手工提取真实金属面板尺寸数据>制成excel加工清单表格整个工程有5万多块三角形面板需要经过上面的过程处理,这将是十分繁重的工作,需要大量的时间和人力。并且在转换过程中有大量的模型操作和数据操作,人工处理很容易产生差错。产生差错后,很难在最后现场安装前检查出来。这些都给工程带来很大的时间和经济风险。如何在尽可能少的人力和时间投入下,保证所有

6、面板能按照正确尺寸加工,减少工程的时间和经济风险就是我们遇到的最大困难。四、问题分析和解决方案分析前面的问题,发现虽然要处理的板块数量十分巨大,但是处理的步骤是一致的。对于这种数据相对简单,流程统一的批量化处理,计算机程序最擅长的。我们只要运用合适的计算机语言,把中间的转换过程打包成“黑箱程序”,就能避免前面的各种风险,也可以节省大量的人力和时间。 真实金属面板尺寸模型简化后的过程:原始模型空间点输入>黑箱程序 excel加工清单表格过程中唯一要求人工操作的是选择原始模型空间的三个点,最终输出真实金属面板尺寸模型和excel加工清单表格都由程序完成。满足上述“黑箱程序”程序的语言,首先要

7、能与autocad进行交互操作,而且能与excel进行通讯,把最终模型尺寸信息储存在excel文件中。这样,大量的模型操作和数据操作都由程序完成,杜绝了人工出错的可能。autocad进行二次开发技术主要有一下几种技术:lisp技术(运用visual lisp语言)、autocad-vba技术、arx技术(运用c+语言)。visual lisp语言的前生是autolisp,是autodesk公司最早推出的能对autocad进行二次开发的编程语言,由于技术推广和使用的时间较久,该方面的技术人员和技术积累也较多。但是visual lisp局限性较大,除了能灵活操作和控制autocad,不能很好的与其

8、他程序(如word、excel等)进行通讯。c+语言功能十分强大,能满足本工程的要求,但是由于它的语法规则严格,计算机专业知识、技能要求高,基本都是专业的计算机人员在使用,不适合普通的建筑工程技术人员学习、使用。autocad-vba使用的语言microsoft vba语法简单。语句容易从表面意思理解,容易被非计算机程序专业人员掌握,而且能与excel表格程序进行很好通讯,所以本工程采用了autocad-vba技术。五、真实模型的几何推导我们运用计算机语言与autocad、excel进行交互。但是,从空间三角形分格模型到真实金属面板尺寸模型必须预先进行几何推导,再把推导写成计算机语言的形式。就

9、几何上来说,我们已知三角形单元的原始模型空间点和点间的连线(分格线),如下图:已知p01、p02、p03点空间点坐标需要求解的是真实金属面板尺寸模型,如下图:即求解p11、p12、p13的空间坐标和l11、l12、l13的长度。图中off为偏缝(偏移)距离,本工程为2.5mm。推导过程:已知p01x、y、z、p02x、y、z和p03x、y、z可得三角形边长l01、l02、l03l01=(p01x-p02x)2+(p01y-p02y)2+(p01z-p02z)20.5l02=(p02x-p03x)2+(p02y-p03y)2+(p02z-p03z)20.5l03=(p03x-p01x)2+(p0

10、3y-p01y)2+(p03z-p01z)20.5有三角形三边长度,可得三角形角度a1、a2、a3a1=arc cos(l012+ l032- l022)/(2*l01*l03)a2=arc cos(l022+ l012- l032)/(2*l02*l01)a3=arc cos(l032+ l022- l012)/(2*l03*l02)接下来推导p11、p12、p13点坐标p11x、y、z= p01x、y、z+v1x、y、z+v2 x、y、zv1x、y、z、v2 x、y、z为空间向量其中:v1x =off/sin(a1)*(p02x-p01x)/l01v1y =off/sin(a1)*(p02

11、y-p01y)/l01v1z =off/sin(a1)*(p02z-p01z)/l01v2x =off/sin(a1)*(p03x-p01x)/l03v2y =off/sin(a1)*(p03y-p01y)/l03v2z =off/sin(a1)*(p03z-p01z)/l03所以p11的三维坐标分别为:p11x= p01x+ off/sin(a1)*(p02x-p01x)/l01+ off/sin(a1)*(p03x-p01x)/l03p11y= p01y+ off/sin(a1)*(p02y-p01y)/l01+ off/sin(a1)*(p03y-p01y)/l03p11z= p01z+

12、 off/sin(a1)*(p02z-p01z)/l01+ off/sin(a1)*(p03z-p01z)/l03同理,可得p12、p13的三维坐标p12x= p02x+ off/sin(a2)*(p03x-p02x)/l02+ off/sin(a2)*(p01x-p02x)/l01p12y= p02y+ off/sin(a1)*(p03y-p02y)/l02+ off/sin(a2)*(p01y-p02y)/l01p12z= p02z+ off/sin(a2)*(p03z-p02z)/l02+ off/sin(a2)*(p01z-p02z)/l01p13x= p03x+ off/sin(a3

13、)*(p01x-p03x)/l03+ off/sin(a3)*(p02x-p03x)/l02p13y= p03y+ off/sin(a3)*(p01y-p03y)/l03+ off/sin(a3)*(p02y-p03y)/l02p13z= p03z+ off/sin(a3)*(p01z-p03z)/l03+ off/sin(a3)*(p02z-p03z)/l02最后得到l11、l12、l13长度尺寸l11=(p11x-p12x)2+(p11y-p12y)2+(p11z-p12z)20.5l12=(p12x-p13x)2+(p12y-p13y)2+(p12z-p13z)20.5l13=(p13x

14、-p11x)2+(p13y-p11y)2+(p13z-p11z)20.5到此,整个几何推导完毕,真实面板的空间点坐标和面板边长都已经得到求解。六、本工程“黑箱程序”option explicitpublic sub angle_panel()dim p01 as variant ''定义p01空间点坐标变量dim p02 as variant ''定义p02空间点坐标变量dim p03 as variant ''定义p03空间点坐标变量repeat:on error goto ext ''程序错误处理p01 = thisdrawi

15、ng.utility.getpoint_(, vbcrlf & "请输入三个点坐标,第一点: ") '从模型中得到第一点坐标p02 = thisdrawing.utility.getpoint_(, vbcrlf & "第二点: ") '从模型中得到第二点坐标p03 = thisdrawing.utility.getpoint_(, vbcrlf & "第三点: ") '从模型中得到第三点坐标dim l01 as double ''定义l01长度变量dim l02 as

16、double ''定义l02长度变量dim l03 as double ''定义l03长度变量l01 = (p01(0) - p02(0) 2 + (p01(1) - p02(1) 2_ + (p01(2) - p02(2) 2) 0.5l02 = (p02(0) - p03(0) 2 + (p02(1) - p03(1) 2 _+ (p02(2) - p03(2) 2) 0.5l03 = (p03(0) - p01(0) 2 + (p03(1) - p01(1) 2 _+ (p03(2) - p01(2) 2) 0.5dim a1 as double '

17、;'定义a1角度变量dim a2 as double ''定义a2角度变量dim a3 as double ''定义a3角度变量dim x1 as double ''中间变量dim x2 as double ''中间变量dim x3 as double ''中间变量x1 = (l01 2 + l03 2 - l02 2) / (2 * l01 * l03)x2 = (l02 2 + l01 2 - l03 2) / (2 * l02 * l01)x3 = (l03 2 + l02 2 - l01 2) /

18、(2 * l03 * l02)'''由于vb没提供arccos() 函数,我们应用vb的atn(反正切)转化a1 = abs(atn(1 - x1 2) 0.5 / x1)a2 = abs(atn(1 - x2 2) 0.5 / x2)a3 = abs(atn(1 - x3 2) 0.5 / x3)dim p11(0 to 2) as double ''定义p11空间点坐标变量dim p12(0 to 2) as double ''定义p12空间点坐标变量dim p13(0 to 2) as double ''定义p13空

19、间点坐标变量dim off as double ''定义偏移距离off = 2.5p11(0) = p01(0) + off / sin(a1) * (p02(0) - p01(0) / l01 _ + off / sin(a1) * (p03(0) - p01(0) / l03p11(1) = p01(1) + off / sin(a1) * (p02(1) - p01(1) / l01 _ + off / sin(a1) * (p03(1) - p01(1) / l03p11(2) = p01(2) + off / sin(a1) * (p02(2) - p01(2) /

20、l01 _ + off / sin(a1) * (p03(2) - p01(2) / l03 p12(0) = p02(0) + off / sin(a2) * (p03(0) - p02(0) / l02 _ + off / sin(a2) * (p01(0) - p02(0) / l01p12(1) = p02(1) + off / sin(a2) * (p03(1) - p02(1) / l02 _ + off / sin(a2) * (p01(1) - p02(1) / l01p12(2) = p02(2) + off / sin(a2) * (p03(2) - p02(2) / l0

21、2 _ + off / sin(a2) * (p01(2) - p02(2) / l01 p13(0) = p03(0) + off / sin(a3) * (p01(0) - p03(0) / l03 _ + off / sin(a3) * (p02(0) - p03(0) / l02p13(1) = p03(1) + off / sin(a3) * (p01(1) - p03(1) / l03 _ + off / sin(a3) * (p02(1) - p03(1) / l02p13(2) = p03(2) + off / sin(a3) * (p01(2) - p03(2) / l03

22、_ + off / sin(a3) * (p02(2) - p03(2) / l02''生成真实面板边线thisdrawing.modelspace.addline p11, p12thisdrawing.modelspace.addline p12, p13thisdrawing.modelspace.addline p13, p11dim l11 as double ''定义真实面板边长l11变量dim l12 as double ''定义真实面板边长l12变量dim l13 as double ''定义真实面板边长l13变量

23、l11 = (p11(0) - p12(0) 2 + (p11(1) - p12(1) 2_ + (p11(2) - p12(2) 2) 0.5l12 = (p12(0) - p13(0) 2 + (p12(1) - p13(1) 2 _+ (p12(2) - p13(2) 2) 0.5l13 = (p13(0) - p11(0) 2 + (p13(1) - p11(1) 2_ + (p13(2) - p11(2) 2) 0.5''l11、l12、l13尺寸输入到excel中dim xlapp as objecton error resume nextif xlapp is n

24、othing then set xlapp = getobject(, "excel.application") if err <> 0 then err.clear set xlapp = createobject("excel.application") if err <> 0 then thisdrawing.utility.prompt "不能连接excel" + vbcrlf exit sub end if end if xlapp.workbooks.add dim xlworksheet as object set xlworksheet = xlapp.activeworkbook.worksheets.add xlworksheet.name = "面板尺寸"xlworksheet.activatexlapp.activesheet.cells(1, 1) = "编号"xlapp.activesheet.cells(1, 2) = "l11"xlapp.activesheet.cells(1, 3) = "l12"xla

温馨提示

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

评论

0/150

提交评论