版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、autocad-vba技術(shù)在杭州蕭山機(jī)場t3航站樓金屬吊頂工程中的初步應(yīng)用亨特道格拉斯(中國)投資有限公司 呂志路摘要:autocad軟件是當(dāng)前建筑裝飾工程中應(yīng)用最廣泛的cad(計(jì)算機(jī)輔助設(shè)計(jì))軟件。autocad-vba技術(shù)是應(yīng)用microsoft vba編程環(huán)境,對(duì)autocad進(jìn)行二次開發(fā)的編程技術(shù)。本文介紹了在蕭山機(jī)場t3航站樓金屬吊頂工程中,如何運(yùn)用autocad-vba技術(shù),解決大規(guī)模曲面吊頂autocad模型空間點(diǎn)坐標(biāo)數(shù)據(jù)提取和金屬吊頂單元面板數(shù)據(jù)(面板加工尺寸數(shù)據(jù))生成等工程問題。通過該技術(shù)的應(yīng)用,減少了大量的從吊頂三維曲面模型到實(shí)際金屬面板加工工藝尺寸的轉(zhuǎn)化時(shí)間和人工成本,也
2、杜絕了如果采用人工轉(zhuǎn)化的出錯(cuò)可能。關(guān)鍵詞:autocad-vba autocad二次開發(fā) 金屬吊頂 一、autocad-vba技術(shù)基本介紹autocad-vba的編程環(huán)境是microsoft vba ,microsoft vba是一個(gè)面向?qū)ο蟮木幊汰h(huán)境,其編程的核心語言是visual basic語言(vb語言),可提供類似 visual basic的豐富開發(fā)功能。autocad-vba和 autocad 在同一進(jìn)程空間中運(yùn)行,所以autocad-vba可以與autocad人工操作界面進(jìn)行交互操作,進(jìn)一步發(fā)揮和擴(kuò)展autocad的原有功能。由于microsoft公司的辦公軟件excel也提供了m
3、icrosoft vba的操作接口,所以還可以運(yùn)用autocad-vba技術(shù)進(jìn)行autocad與excel進(jìn)行信息的互通(提取autocad軟件中的模型數(shù)據(jù),儲(chǔ)存到excel文件中,反之也可以)。autocad中集成了microsoft vba的編程環(huán)境,進(jìn)入編程環(huán)境可以運(yùn)用以下兩種方法:1. autocad命令行輸入:vbaide2. 菜單路徑:【工具】【宏】【visual basic 編輯器】本文將不具體講述編程環(huán)境的操作和使用,如果有需要可以查看autocad的help文件。二、杭州蕭山機(jī)場t3航站樓金屬吊頂工程基本介紹該吊頂工程是大型的異形曲面(雙曲面)金屬吊頂,總面積超過5萬平面。吊
4、頂單元組塊為平面三角形,單個(gè)組塊面積在1平米左右,每個(gè)三角形組塊的邊長都不一致。通過5萬多塊尺寸不一的空間三角形的拼接,就擬合出一個(gè)超大型的空間波浪形曲面。蕭山機(jī)場吊頂效果圖三、工程中遇到的難題吊頂原始模型是autocad文件中大量的空間點(diǎn)。這些空間點(diǎn)連線形成的三角形就形成三角形板塊的分格線(這還不是金屬板塊的真實(shí)邊線和真實(shí)尺寸),由于工程安裝需要和考慮環(huán)境溫度變化等因素,板塊與板塊之間必須留有一定的縫隙,所以空間點(diǎn)連接形成的三角形還必須進(jìn)行邊的偏移處理(偏縫處理)才能得到真實(shí)的金屬面板尺寸模型。最后提取真實(shí)模型的邊長尺寸,制成excel加工清單表格,才能最終用到工廠的生成加工中去。吊頂三角面
5、板分格模型圖(左:俯視圖 右:軸測圖)分格線與真實(shí)面板邊線示意圖總的來說,如果進(jìn)行人工處理,從吊頂原始模型到excel加工清單必須經(jīng)過以下過程:原始模型空間點(diǎn)連線>空間三角形分格模型>分格模型邊線偏移處理>真實(shí)金屬面板尺寸模型>手工提取真實(shí)金屬面板尺寸數(shù)據(jù)>制成excel加工清單表格整個(gè)工程有5萬多塊三角形面板需要經(jīng)過上面的過程處理,這將是十分繁重的工作,需要大量的時(shí)間和人力。并且在轉(zhuǎn)換過程中有大量的模型操作和數(shù)據(jù)操作,人工處理很容易產(chǎn)生差錯(cuò)。產(chǎn)生差錯(cuò)后,很難在最后現(xiàn)場安裝前檢查出來。這些都給工程帶來很大的時(shí)間和經(jīng)濟(jì)風(fēng)險(xiǎn)。如何在盡可能少的人力和時(shí)間投入下,保證所有
6、面板能按照正確尺寸加工,減少工程的時(shí)間和經(jīng)濟(jì)風(fēng)險(xiǎn)就是我們遇到的最大困難。四、問題分析和解決方案分析前面的問題,發(fā)現(xiàn)雖然要處理的板塊數(shù)量十分巨大,但是處理的步驟是一致的。對(duì)于這種數(shù)據(jù)相對(duì)簡單,流程統(tǒng)一的批量化處理,計(jì)算機(jī)程序最擅長的。我們只要運(yùn)用合適的計(jì)算機(jī)語言,把中間的轉(zhuǎn)換過程打包成“黑箱程序”,就能避免前面的各種風(fēng)險(xiǎn),也可以節(jié)省大量的人力和時(shí)間。 真實(shí)金屬面板尺寸模型簡化后的過程:原始模型空間點(diǎn)輸入>黑箱程序 excel加工清單表格過程中唯一要求人工操作的是選擇原始模型空間的三個(gè)點(diǎn),最終輸出真實(shí)金屬面板尺寸模型和excel加工清單表格都由程序完成。滿足上述“黑箱程序”程序的語言,首先要
7、能與autocad進(jìn)行交互操作,而且能與excel進(jìn)行通訊,把最終模型尺寸信息儲(chǔ)存在excel文件中。這樣,大量的模型操作和數(shù)據(jù)操作都由程序完成,杜絕了人工出錯(cuò)的可能。autocad進(jìn)行二次開發(fā)技術(shù)主要有一下幾種技術(shù):lisp技術(shù)(運(yùn)用visual lisp語言)、autocad-vba技術(shù)、arx技術(shù)(運(yùn)用c+語言)。visual lisp語言的前生是autolisp,是autodesk公司最早推出的能對(duì)autocad進(jìn)行二次開發(fā)的編程語言,由于技術(shù)推廣和使用的時(shí)間較久,該方面的技術(shù)人員和技術(shù)積累也較多。但是visual lisp局限性較大,除了能靈活操作和控制autocad,不能很好的與其
8、他程序(如word、excel等)進(jìn)行通訊。c+語言功能十分強(qiáng)大,能滿足本工程的要求,但是由于它的語法規(guī)則嚴(yán)格,計(jì)算機(jī)專業(yè)知識(shí)、技能要求高,基本都是專業(yè)的計(jì)算機(jī)人員在使用,不適合普通的建筑工程技術(shù)人員學(xué)習(xí)、使用。autocad-vba使用的語言microsoft vba語法簡單。語句容易從表面意思理解,容易被非計(jì)算機(jī)程序?qū)I(yè)人員掌握,而且能與excel表格程序進(jìn)行很好通訊,所以本工程采用了autocad-vba技術(shù)。五、真實(shí)模型的幾何推導(dǎo)我們運(yùn)用計(jì)算機(jī)語言與autocad、excel進(jìn)行交互。但是,從空間三角形分格模型到真實(shí)金屬面板尺寸模型必須預(yù)先進(jìn)行幾何推導(dǎo),再把推導(dǎo)寫成計(jì)算機(jī)語言的形式。就
9、幾何上來說,我們已知三角形單元的原始模型空間點(diǎn)和點(diǎn)間的連線(分格線),如下圖:已知p01、p02、p03點(diǎn)空間點(diǎn)坐標(biāo)需要求解的是真實(shí)金屬面板尺寸模型,如下圖:即求解p11、p12、p13的空間坐標(biāo)和l11、l12、l13的長度。圖中off為偏縫(偏移)距離,本工程為2.5mm。推導(dǎo)過程:已知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)接下來推導(dǎo)p11、p12、p13點(diǎn)坐標(biāo)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的三維坐標(biāo)分別為: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的三維坐標(biāo)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到此,整個(gè)幾何推導(dǎo)完畢,真實(shí)面板的空間點(diǎn)坐標(biāo)和面板邊長都已經(jīng)得到求解。六、本工程“黑箱程序”option explicitpublic sub angle_panel()dim p01 as variant ''定義p01空間點(diǎn)坐標(biāo)變量dim p02 as variant ''定義p02空間點(diǎn)坐標(biāo)變量dim p03 as variant ''定義p03空間點(diǎn)坐標(biāo)變量repeat:on error goto ext ''程序錯(cuò)誤處理p01 = thisdrawi
15、ng.utility.getpoint_(, vbcrlf & "請輸入三個(gè)點(diǎn)坐標(biāo),第一點(diǎn): ") '從模型中得到第一點(diǎn)坐標(biāo)p02 = thisdrawing.utility.getpoint_(, vbcrlf & "第二點(diǎn): ") '從模型中得到第二點(diǎn)坐標(biāo)p03 = thisdrawing.utility.getpoint_(, vbcrlf & "第三點(diǎn): ") '從模型中得到第三點(diǎn)坐標(biāo)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() 函數(shù),我們應(yīng)用vb的atn(反正切)轉(zhuǎn)化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空間點(diǎn)坐標(biāo)變量dim p12(0 to 2) as double ''定義p12空間點(diǎn)坐標(biāo)變量dim p13(0 to 2) as double ''定義p13空
19、間點(diǎn)坐標(biāo)變量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''生成真實(shí)面板邊線thisdrawing.modelspace.addline p11, p12thisdrawing.modelspace.addline p12, p13thisdrawing.modelspace.addline p13, p11dim l11 as double ''定義真實(shí)面板邊長l11變量dim l12 as double ''定義真實(shí)面板邊長l12變量dim l13 as double ''定義真實(shí)面板邊長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) = "編號(hào)"xlapp.activesheet.cells(1, 2) = "l11"xlapp.activesheet.cells(1, 3) = "l12"xla
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 小班下學(xué)期工作計(jì)劃15篇
- 設(shè)計(jì)師個(gè)人工作總結(jié)2024報(bào)告
- 廢舊輪胎低溫真空裂解無害化資源化節(jié)能與環(huán)保示范項(xiàng)目可行性研究報(bào)告
- 年會(huì)領(lǐng)導(dǎo)發(fā)言稿大全簡短(模板7篇)
- 工業(yè)項(xiàng)目可行性研究報(bào)告
- 普外科診療指南技術(shù)操作規(guī)范
- 卓越小升初入學(xué)水平測試卷
- 人事代理人員用工合同
- 入住病房協(xié)議書模板
- 銷售部領(lǐng)導(dǎo)年度發(fā)言稿5篇
- 安全生產(chǎn)費(fèi)用提取使用明細(xì)
- (完整版)病例演講比賽PPT模板
- 直播合作協(xié)議
- 社科類課題申報(bào)工作輔導(dǎo)報(bào)告課件
- 頭痛的診治策略講課課件
- 沙利文-內(nèi)窺鏡行業(yè)現(xiàn)狀與發(fā)展趨勢藍(lán)皮書
- 國家開放大學(xué)一網(wǎng)一平臺(tái)電大《建筑測量》實(shí)驗(yàn)報(bào)告1-5題庫
- 規(guī)范診療服務(wù)行為專項(xiàng)整治行動(dòng)自查表
- (新平臺(tái))國家開放大學(xué)《建設(shè)法規(guī)》形考任務(wù)1-4參考答案
- 精益工廠布局及精益物流規(guī)劃課件
- 注射液無菌檢查的方法學(xué)驗(yàn)證方案
評(píng)論
0/150
提交評(píng)論