CAD水利水電工程技術管理論文
時間:2022-06-28 03:28:00
導語:CAD水利水電工程技術管理論文一文來源于網友上傳,不代表本站觀點,若需要原創文章可咨詢客服老師,歡迎參考。
1概述
美國Autodesk公司開發的Autocad系統自1982年推出以來,以其使用方便、功能強大和系統開放性一直獨領風騷。成為各工程領域首選的CAD系統。
水利水電工程領域利用AutoCAD平臺進行二次開發也取得了一系列成果,如90年代以來陸續開發的水電站地面廠房CAD系統、重力壩CAD系統、隧洞CAD系統、水機油汽水CAD系統、地質柱狀圖CAD等均取得了較好的應用效果。但水電工程設計的復雜性決定了任何現成的CAD軟件都有其局限性,設計過程中許多問題還只能用原始的方法解決。本文通過幾個實例對AutoCAD二次開發常用的Lisp語言在水電工程設計中的應用進行了初步探討,希望能夠起到拋磚引玉的作用。
VisualLisp語言是AutoCADR14版本以后提供的全新的開發環境,是嵌于AutoCAD內部,將Lisp語言與AutoCAD相結合的產物,是一種智能型語言。利用AutoLisp可以靈活方便地增加AutoCAD新命令,幾乎無限地擴展AutoCAD新功能,
2應用實例
2.1坐標畫線
利用已知坐標點畫線是設計工作中經常遇到的問題,如河道、堤防等實測斷面、水位流量關系曲線、堰面曲線等數據的處理,均可歸結為坐標畫線問題。對于堰面曲線等有函數方程的曲線可以利用EXCEL按照期望的步長自動生成一系列坐標點。對于測量常用的起點距-高程形式的數據,也可以利用EXCEL轉化成坐標點形式。
(1)利用腳本文件(.SCR)
利用任何文本編輯器如Note、Uedit、Word、Excel等建立純文本文件EX1.SCR,注意文本文件后綴必須為.SCR,坐標之間用半角逗號分開,文件中不允許出現空格,文件最后一行必須為空回車。文件建立時,可以直接把EXCEL或其他文件中的坐標表利用拷貝、粘貼功能加入腳本文件中。
Pline
345.66,238.65
213.45,124.56
128.44,235.66
文件保存后,執行AutoCAD中“工具”下的“運行腳本”,在顯示的窗口中查找并選中EX1.SCR,屏幕上會立即顯示所繪線條。
(2)利用LSP程序
建立坐標表文件EX2.DAT,后綴任意,可以依次輸入多段曲線,中間用曲線名稱分開,程序自動繪制多條曲線并可標注坐標表。
“曲線1”
213.45,124.56
128.44,235.66
345.66,231.78
“曲線2”
433.34,567.23
434.12,464.12
利用AutoCAD中“工具”菜單下的“VisulLisp編輯器”建立DRLINE.LSP文件如下
(defunC:drline()
(iffn
(setqfn(getfiled"坐標點文件名"fn""2))
(setqfn(getfiled"坐標點文件名"""""2))
)
(setqf(openfn"r"))
(setqp0(getpoint"/n畫線起點:"))
(setqbz0mm1)
(command"pline")
(while(/=bz1)
(setqmd(read-linef))
(if(/=mdnil)
(setqzbb(readmd))
(setqbz1)
)
(setqdx(carzbb)dy(cadrzbb))
(setqp1(list(+dx(carp0))
(+dy(cadrp0)))
)
(commandp1)
(setqmm(1+mm))
)
(command"")
(closef)
)
文件存盤后,加載運行,相當于新增加了坐標畫線命令DRLINE,按提示選中存放坐標表的文件即可實現自動繪制曲線。
2.2地形切剖面
水電工程設計中經常遇到在地形圖上切剖面的問題,借助VisualLisp可以實現快速切剖面。
(1)初始地形圖處理
把帶z坐標的地形平面圖進行變換,變換后z坐標值成為層名,為加快切剖面運行速度,把“LWPOLYLINE”和”SPLINE”均轉化為”LINE“線,程序如下
(defunc:pltol()
;LWPOLYLINE轉化為LINE
(setqn0)
(setqe(ssget"X"(list(cons0"LWPOLYLINE"))))
(setqsh(sslengthe))
(ife
(while(<nsh)
(setqe1(ssnameen))
(command"pedit"e1"d""")
(setqx(entgete1))
(setqngc(atof(setqla(fld8x))))
(command"explode"e1)
(setqn(+n1))
)))
(defunfld(numlst)
(cdr(assocnumlst))
)
(defunc:spltol()
;SPLINE轉化為LINE
(setqn0)
(setqe(ssget"X"(list(cons0"SPLINE"))))
(setqsh(sslengthe))
(ife
(while(<nsh)
(setqx(entget(setqe1(ssnameen))))
(setqnla(itoa(fix(caddr(fld10x)))))
(if(=(fld0x)"SPLINE")
(progn
(command"layer""n"nla"c"
"6"nla"s"nla"")
(command"line")
(setqnm(lengthx)
dzs(fld73x)dzs1(fld74x))
(while(>nm5)
(if(=(car(nthnmx))10)
(progn
(setqb1(nthnmx))
(setqx1(cadrb1))
(setqy1(caddrb1))
(setqz1(cadddrb1))
(setqglb(listx1y1))
(commandglb)
))
(setqnm(-nm1))
)))
(command"")
(setqn(+n1))
)))
(2)切剖面
輸入剖面編號,在平面地形圖上指定兩點確定剖面剖切線位置,指定剖面圖起點,利用AutoCAD的inters函數搜索剖切線與地形圖的全部交點,自動計算交點坐標,計算交點與剖面位置起點的距離,按各交點高程和與起點的距離形成剖面圖各點坐標,即可用本文實例1坐標畫線生成地形圖的剖面。
(defundxtent1()
(setqn0xdzbnil)
(setqxds0)
(setqsh(sslengthe1))
(while(<nsh)
(setqx(entget(ssnamee1n)))
(if(=(fld0x)"LINE")
(progn
(setqdxtgcgc(fld8x))
(setqdxtgcgc(atoidxtgcgc))
(if(>dxtgcgc10)
(progn
(setqpst(fld10x))
(setqpet(fld11x))
(setqzb(listgc
(list(carpst)(cadrpst))
(list(carpet)(cadrpet))
))
(setqxdzb(conszbxdzb))
(setqxds(+xds1))
))))
(setqn(+n1))
))
(defunc:dxtsec()
(setqpmh(+pmh1))
(setqpmh(getstring"/n剖面號"))
(setqpt1(getpoint"/n剖切位置起點:"))
(setqpt2(getpointpt1"/n剖切位置終點:"))
(setqpt3(getpoint"/n剖面圖布置:"))
(setqp01pt3)
(setqe1(ssget"F"(listpt1pt2)));利用AutoCAD的目標選擇“F”方式選取與剖切線相交的地形線。
(dxtent);獲取與剖切線相交地形線的坐標
(setqmxgc-100)
(setqmngc10000)
(setqm0pmpnil)
(setqnxdsi0)
(while(<in)
(setqcrosp
(interspt1pt2(nth1(nthixdzb))(nth2(nthixdzb))1)
);求剖切線與地形線的交點
(if(/=crospnil)
(progn
(setqdxtgcgc(nth0(nthixdzb)))
(setqmxgc(maxmxgcdxtgcgc))
(setqmngc(minmngcdxtgcgc))
(setqdst(distancept1crosp));剖切線起點與交點的距離
(setqdst(*(/blczdxthtbl)dst))
(setqpmp(cons(listmdstdxtgcgc)pmp))
(setqm(+m1))
))
(setqi(+i1))
))
2.3沿曲線標注
在設計中會遇到沿給定曲線進行標注問題,如平面布置圖中的開挖線符號沿開挖輪廓的標注,剖面圖中巖石符號沿輪廓線標注、點筋標注、沿任意曲線進行漢字標注等。此類問題主要應用AutoCAD的Measure或divide命令來解決。兩個命令的主要差別是前者按指定的長度在曲線上標注,后者按給定的分段數等分曲線并在等分點處進行標注。要標注的輪廓曲線最好用pline線,要標注的符號預先做成圖塊,圖塊采用單位塊,執行measure或divide命令,選取要標注的曲線,指定標注符號,分段長度或分段數即可完成標注,當發現標注的符號太密或太疏時,可以執行erase命令選擇P進行刪除,比例不合適或符號方向不正確,可以利用特性編輯器,選中所有標注符號,對標注符號的比例和旋轉角度進行調整,直到滿意為止。對于更高級的應用,可以編制LSP程序,實現符號和文字沿任意曲線標注。
2.4表格生成
AutoCAD本身沒有表格處理功能,設計圖紙中工程量表、鋼筋表等涉及到表格生成的問題可以采用以下方法處理:
(1)直接把Word或Excel文件中的表格直接粘貼到CAD圖形中,修改時只要雙擊圖中的表格即可進入Word或Excel中進行編輯修改,修改完成后退出即可返回到AutoCAD中繼續進行設計,該法優點是方便,快捷,易于掌握,可以充分利用Excel的強大計算功能。缺點是表格在AutoCAD中并不是一個普通圖元,無法利用CAD功能對表格的字高、顏色和線寬進行編輯。
(2)編制LSP程序,依次輸入表格標題、表格行數、表格列數、表格行高和列寬以及表格插入點等參數,可以自動生成表格,表格中已經按仿Excel形式填入了文字,可以用字處理軟件對表格中文字進行編輯修改。
(defunC:mtab()
(setqtb1niltb2niltb3nil)
(setqrows(getint"表格行數"))
(setqcols(getint"表格列數"))
(setqrowh(getreal"行高"))
(setqcolw(getreal"列寬"))
(setqp1(getpoint"/n表格左上角點位置:"))
(command"pline"p1"w""0.5""0.5"
(setqp2(list(+(carp1)(*colscolw))(cadrp1)))
(setqp4(list(carp2)(-(cadrp2)(*rowsrowh))))
(setqp3(list(carp1)(-(cadrp2)(*rowsrowh))))
"C")
(setqn1)
(while(<nrows);繪水平線表格
(command"pline"(list(carp1)(-(cadrp1)(*nrowh)))"w""0""0"
(list(carp2)(-(cadrp2)(*rowhn)))"")
(setqn(+n1))
)
(setqn1)
(while(<ncols);繪垂直表格線
(command"pline"(list(+(carp1)(*ncolw))(cadrp1))"w""0""0"(list(+(carp1)(*ncolw))(cadrp3))
"")
(setqn(+n1))
)
(command"text""m"(list(+(carp1)(*0.5colscolw))
(+(cadrp1)5))"3""0""TITLE")
(setqn0)
(while(<nrows)
(setqm0)
(while(<mcols)
(cond
((<m26)(setqbzstr(chr(+65m))))
((>=m26)(setqbzstr(strcat(chr(+64(/m26)))(chr(+65(-m(*26(/m26))))))))
)
(command"text""m"(list(+(carp1)(*0.5colw)(*mcolw));表格內容標注
(-(cadrp1)(*0.5rowh)(*nrowh)))
(getvar"TEXTSIZE")"0"(strcatbzstr(itoa(+n1))))
(setqm(+m1))
)
(setqn(+n1))
))
(3)生成鋼筋表
鋼筋表和材料表生成是施工圖設計中比較繁瑣的一項工作,很容易出錯,此處介紹利用程序進行鋼筋表和材料表自動生成的方法。利用造字程序增加I、II級鋼筋的直徑標注符號和,以后在其它電腦上只要把EUDC.TTE和E
見下表,增加3個命令:生成鋼筋表、鋼筋表添加和自動生成材料表。
生成鋼筋表時按指定表格位置生成鋼筋表表頭,根據提示輸入鋼筋編號(可以不連續)、鋼筋等級和直徑如20、16,交互繪制鋼筋簡圖和標注長度(標注長度可以輸入多種形式如50~200表示長度等差變化;30,40,50表示一個編號多個鋼筋長度,),鋼筋根數,構件組數,程序自動完成表格其余各項(總長度、重量,對于I級鋼筋長度中自動計入彎鉤長度)的填寫,備注欄中自動填入等差變化鋼筋的等差值。
采集鋼筋表中直徑、等級和總長信息,經過自動分類匯總,生成鋼筋表的材料表。
2.6高程小數位數處理
尺寸標注小數位數很容易調整,但諸如高程、表格中數字要調整則很困難,借助LSP程序的調整很方便,只要選取需要調整的數字,根據提示輸入需要保留的小數位數,則程序自動對所有選種數字進行修改。
(defunentsgc()
(setqn0)
(setqsh(sslengthe1))
(while(<nsh)(setqx(entget(ssnamee1n)))
(if(=(fld0x)"TEXT")
(progn
(setqagc(fld1x))
(setqc(substragc11))
(if(or(=c"+")(=c"-")(and(>=c"0")(<=c"9")))
(progn
(if(or(=c"+")(=c"-"))
(setqbgc(substragc2))
(setqbgcagc)
)
(setqcgc(atofbgc))
(setqzh(rtoscgc2gcws))
(if(or(=c"+")(=c"-"))
(setqzh(strcatczh)))
(setqx(subst(cons1zh)(assoc1x)x))
(entmodx)
)
))
))
(setqn(+n1)))
)
(defunc:yxws()
(setqe1(ssget))
(setvar"dimzin"0)
(setqgcws(getint"保留小數位數:"))
(ife1(entsgc)(print"/nnotfound"))
(setqxnil)
)
2.7應用軟件前、后處理
由于軟件升級滯后,一些常用軟件后處理功能很弱或沒有,可以利用LSP程序結合AutoCAD增加或簡化前后處理功能。下面結合平面滲流分析程序STSE軟件對其前、后處理功能的實現進行介紹:
(1)前處理
STSE為平面滲流有限元程序,單元劃分和單元、節點編號工作量最大,可以借助其它通用有限元軟件的前處理功能如Ansis、Algor、SAP84等進行初步處理,生成單元、節點編號和節點坐標,而后按照STSE數據文件的格式要求對數據文件進行編輯。
(2)后處理
后處理成果主要為:單元網格圖,浸潤線和等勢線。單元網格圖中有節點和單元編號,不同滲透系數的單元采用不同的顏色,以便根據網格圖直觀地判斷數據文件中幾何參數和材料特性的正誤;
首先分析STSE的輸出結果文件的格式,搜索并篩選其中主要參數如單元總數、節點總數和材料總數,把節點坐標和單元信息分別存儲,通過對單元循環生成單元網格圖。
(defunc:seepmesh()
(iffn
(setqfn(getfiled"滲流結果文件名"fn""2))
(setqfn(getfiled"滲流結果文件名"""""2)))
(setqf(openfn"r"))
(setqmd(read-linef))
(while(/=(substrmd258)"單元總數")
(setqmd(read-linef))
);定位單元總數
(setqdyzs(atoi(substrmd585)));讀單元總數
(setqmd(read-linef))
(setqjdzs(atoi(substrmd585)));讀節點總數
(setqmd(read-linef))
(setqclh(atoi(substrmd585)));讀材料總數
(setqm0)
(repeatclh
(setqm(+1m))
(setqtcm(strcat"zclh"(itoam)))
(command"layer""m"tcm"c"(itoam)tcm"")
);按材料種類生成圖層名稱
(setqm0n0)
(repeatdyzs;對單元循環,dycfb中存放單元信息
(setqm(+m1))
(setqclh(nth0(nthmdycfb)))
(setqjdh1(nth1(nthmdycfb)))
(setqjdh2(nth2(nthmdycfb)))
(setqjdh3(nth3(nthmdycfb)))
(setqjdh4(nth4(nthmdycfb)))
(command"layer""s"(strcat"zclh"(itoaclh))"")
(command"pline";繪制單元網格
(nthjdh1jdzbb)
(nthjdh2jdzbb)
(nthjdh3jdzbb)
(nthjdh4jdzbb)"c")
(setqbzdzb(mapcar''''+(nthjdh1jdzbb)(nthjdh2jdzbb)
(nthjdh3jdzbb)(nthjdh4jdzbb)))
(setqbzdzb(list(/(carbzdzb)4.0)(/(cadrbzdzb)4.0)))
(command"text""m"bzdzb"0.5""0"(itoam))
;標注單元號
(setqm0)
(repeatjdzs
(setqm(+m1))
(setqbzdzb(nthmjdzbb))
(setqbzdzb(list(+(carbzdzb)0.0)(+(cadrbzdzb)0.0)))
(command"text""m"bzdzb"0.5""0"(itoam))
));標注節點號
(closef)
)
限于篇幅,等勢線和浸潤線生成程序不再贅述。同樣,對工程設計中遇到的其它軟件如:STAB邊坡穩定分析、SAP84的輸出文件均可進行類似后處理工作。
3結語
AutoCAD軟件應用已經在設計單位普及,VisualLisp的出現對于提高Lisp語言的編程效率和AutoCAD應用水平具有重要意義。本文涉及的幾個實例已經在實際工作中發揮很大作用,充分說明在工程設計當中結合本專業要求開發一些簡單實用的Lisp小程序可以有效減輕設計人員的勞動強度,使AutoCAD不僅僅是繪圖工具,而真正成為設計人員得心應手的高效設計平臺。
- 上一篇:公路工程項目風險管理論文
- 下一篇:水利水電工程建設管理論文