午夜亚洲国产日本电影一区二区三区,九九久久99综合一区二区,国产一级毛片视频,草莓视频在线观看精品最新

加急見刊

CAD技術(shù)在水利水電工程中的應(yīng)用

耿振云

摘要:AutoCAD是廣大工程設(shè)計(jì)人員普遍使用的通用繪圖軟件,結(jié)合專業(yè)特點(diǎn),通過對(duì)AutoCAD系統(tǒng)的二次開發(fā)可以開發(fā)出滿足各種用途的專業(yè)軟件,即使對(duì)于普通設(shè)計(jì)人員也可以通過AutoCAD內(nèi)嵌的VisualLisp語言方便地增加CAD命令,擴(kuò)充完善適合本專業(yè)的新功能,從而極大地提高工作效率,本文通過幾個(gè)應(yīng)用實(shí)例對(duì)AutoCAD在水工設(shè)計(jì)上的應(yīng)用進(jìn)行了探討。

關(guān)鍵詞:CAD技術(shù) 應(yīng)用 水利水電工程 AutoCAD VisualLisp語言

美國Autodesk公司開發(fā)的AutoCAD系統(tǒng)自1982年推出以來,以其使用方便、功能強(qiáng)大和系統(tǒng)開放性一直獨(dú)領(lǐng)風(fēng)騷。成為各工程領(lǐng)域首選的CAD系統(tǒng)。

水利水電工程領(lǐng)域利用AutoCAD平臺(tái)進(jìn)行二次開發(fā)也取得了一系列成果,如90年代以來陸續(xù)開發(fā)的水電站地面廠房CAD系統(tǒng)、重力壩CAD系統(tǒng)、隧洞CAD系統(tǒng)、水機(jī)油汽水CAD系統(tǒng)、地質(zhì)柱狀圖CAD等均取得了較好的應(yīng)用效果。但水電工程設(shè)計(jì)的復(fù)雜性決定了任何現(xiàn)成的CAD軟件都有其局限性,設(shè)計(jì)過程中許多問題還只能用原始的方法解決。本文通過幾個(gè)實(shí)例對(duì)AutoCAD二次開發(fā)常用的Lisp語言在水電工程設(shè)計(jì)中的應(yīng)用進(jìn)行了初步探討,希望能夠起到拋磚引玉的作用。

VisualLisp語言是AutoCADR14版本以后提供的全新的開發(fā)環(huán)境,是嵌于AutoCAD內(nèi)部,將Lisp語言與AutoCAD相結(jié)合的產(chǎn)物,是一種智能型語言。利用AutoLisp可以靈活方便地增加AutoCAD新命令,幾乎無限地?cái)U(kuò)展AutoCAD新功能,

2 應(yīng)用實(shí)例

2 .1 坐標(biāo)畫線

利用已知坐標(biāo)點(diǎn)畫線是設(shè)計(jì)工作中經(jīng)常遇到的問題,如河道、堤防等實(shí)測(cè)斷面、水位流量關(guān)系曲線、堰面曲線等數(shù)據(jù)的處理,均可歸結(jié)為坐標(biāo)畫線問題。對(duì)于堰面曲線等有函數(shù)方程的曲線可以利用EXCEL按照期望的步長自動(dòng)生成一系列坐標(biāo)點(diǎn)。對(duì)于測(cè)量常用的起點(diǎn)距-高程形式的數(shù)據(jù),也可以利用EXCEL轉(zhuǎn)化成坐標(biāo)點(diǎn)形式。

(1)利用腳本文件(.SCR)

利用任何文本編輯器如Note、Uedit、Word、Excel等建立純文本文件EX1.SCR,注意文本文件后綴必須為.SCR,坐標(biāo)之間用半角逗號(hào)分開,文件中不允許出現(xiàn)空格,文件最后一行必須為空回車。文件建立時(shí),可以直接把 EXCEL或其他文件中的坐標(biāo)表利用拷貝、粘貼功能加入腳本文件中。

Pline

345.66,238.65

213.45,124.56

128.44,235.66

文件保存后,執(zhí)行AutoCAD中“工具”下的“運(yùn)行腳本”,在顯示的窗口中查找并選中EX1.SCR,屏幕上會(huì)立即顯示所繪線條。

(2)利用LSP程序

建立坐標(biāo)表文件EX2.DAT,后綴任意,可以依次輸入多段曲線,中間用曲線名稱分開,程序自動(dòng)繪制多條曲線并可標(biāo)注坐標(biāo)表。

“曲線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文件如下

(defun C:drline()

(if fn

(setq fn (getfiled "坐標(biāo)點(diǎn)文件名" fn "" 2))

(setq fn (getfiled "坐標(biāo)點(diǎn)文件名" "" "" 2))

)

(setq f (open fn "r"))

(setq p0 (getpoint "\n畫線起點(diǎn):"))

(setq bz 0 mm 1)

(command "pline")

(while (/= bz 1)

(setq md (read-line f))

(if (/= md nil)

(setq zbb (read md))

(setq bz 1)

)

(setq dx (car zbb) dy (cadr zbb))

(setq p1 (list (+ dx (car p0))

(+ dy (cadr p0)))

)

(command p1)

(setq mm (1+ mm))

)

(command "")

(close f)

)

文件存盤后,加載運(yùn)行,相當(dāng)于新增加了坐標(biāo)畫線命令DRLINE,按提示選中存放坐標(biāo)表的文件即可實(shí)現(xiàn)自動(dòng)繪制曲線。

2 .2 地形切剖面

水電工程設(shè)計(jì)中經(jīng)常遇到在地形圖上切剖面的問題,借助Visual Lisp可以實(shí)現(xiàn)快速切剖面。

(1) 初始地形圖處理

把帶z坐標(biāo)的地形平面圖進(jìn)行變換,變換后z坐標(biāo)值成為層名,為加快切剖面運(yùn)行速度,把“LWPOLYLINE”和”SPLINE”均轉(zhuǎn)化為”LINE“線,程序如下

(defun c:pltol()

;LWPOLYLINE轉(zhuǎn)化為LINE

(setq n 0)

(setq e (ssget"X" (list (cons 0 "LWPOLYLINE"))))

(setq sh (sslength e))

(if e

(while (< n sh)

(setq e1 (ssname e n))

(command "pedit" e1 "d" "")

(setq x (entget e1))

(setq ngc (atof (setq la (fld 8 x))))

(command "explode" e1)

(setq n (+ n 1))

) ) )

(defun fld (num lst)

(cdr (assoc num lst))

)

(defun c:spltol ()

;SPLINE轉(zhuǎn)化為LINE

(setq n 0)

(setq e (ssget "X" (list (cons 0 "SPLINE"))))

(setq sh (sslength e))

(if e

(while (< n sh)

(setq x (entget (setq e1 (ssname e n))))

(setq nla (itoa (fix (caddr (fld 10 x)))))

(if (= (fld 0 x) "SPLINE")

(progn

(command "layer" "n" nla "c"

"6" nla "s" nla "")

(command"line")

(setqnm (length x)

dzs (fld 73 x) dzs1 (fld 74 x))

(while (> nm 5)

(if(= (car (nth nm x)) 10)

(progn

(setq b1 (nth nm x))

(setq x1 (cadr b1))

(setq y1 (caddr b1))

(setq z1 (cadddr b1))

(setq glb (list x1 y1))

(command glb)

) )

(setq nm (- nm 1))

)))

(command "")

(setq n (+ n 1))

)))

(2)切剖面

輸入剖面編號(hào),在平面地形圖上指定兩點(diǎn)確定剖面剖切線位置,指定剖面圖起點(diǎn),利用AutoCAD的inters函數(shù)搜索剖切線與地形圖的全部交點(diǎn),自動(dòng)計(jì)算交點(diǎn)坐標(biāo),計(jì)算交點(diǎn)與剖面位置起點(diǎn)的距離,按各交點(diǎn)高程和與起點(diǎn)的距離形成剖面圖各點(diǎn)坐標(biāo),即可用本文實(shí)例1坐標(biāo)畫線生成地形圖的剖面。

(defun dxtent1 ()

(setq n 0 xdzb nil)

(setq xds 0)

(setq sh (sslength e1))

(while (< n sh)

(setq x (entget (ssname e1 n)))

(if (= (fld 0 x) "LINE")

(progn

(setq dxtgcgc (fld 8 x))

(setq dxtgcgc (atoi dxtgcgc))

(if (> dxtgcgc 10)

(progn

(setq pst (fld 10 x))

(setq pet (fld 11 x))

(setq zb (list gc

(list (car pst) (cadr pst))

(list (car pet) (cadr pet))

))

(setq xdzb (cons zb xdzb))

(setq xds (+ xds 1))

))))

(setq n (+ n 1))

))

(defun c:dxtsec ()

(setq pmh (+ pmh 1))

(setq pmh (getstring "\n 剖面號(hào)" ))

(setq pt1 (getpoint "\n 剖切位置起點(diǎn):"))

(setq pt2 (getpoint pt1 "\n 剖切位置終點(diǎn):"))

(setq pt3 (getpoint "\n 剖面圖布置:"))

(setq p01 pt3)

(setq e1 (ssget "F" (list pt1 pt2)));利用AutoCAD的目標(biāo)選擇“F”方式選取與剖切線相交的地形線。

(dxtent);獲取與剖切線相交地形線的坐標(biāo)

(setq mxgc -100)

(setq mngc 10000)

(setq m 0 pmp nil)

(setq n xds i 0)

(while (< i n)

(setq crosp

(inters pt1 pt2 (nth 1 (nth i xdzb)) (nth 2 (nth i xdzb)) 1)

);求剖切線與地形線的交點(diǎn)

(if (/= crosp nil)

(progn

(setq dxtgcgc (nth 0 (nth i xdzb)))

(setq mxgc (max mxgc dxtgcgc))

(setq mngc (min mngc dxtgcgc))

(setq dst (distance pt1 crosp));剖切線起點(diǎn)與交點(diǎn)的距離

(setq dst (* (/ blcz dxthtbl) dst))

(setq pmp (cons (list m dst dxtgcgc) pmp))

(setq m (+ m 1))

))

(setq i (+ i 1))

))

2 .3 沿曲線標(biāo)注

在設(shè)計(jì)中會(huì)遇到沿給定曲線進(jìn)行標(biāo)注問題,如平面布置圖中的開挖線符號(hào)沿開挖輪廓的標(biāo)注,剖面圖中巖石符號(hào)沿輪廓線標(biāo)注、點(diǎn)筋標(biāo)注、沿任意曲線進(jìn)行漢字標(biāo)注等。此類問題主要應(yīng)用AutoCAD的Measure或pide命令來解決。兩個(gè)命令的主要差別是前者按指定的長度在曲線上標(biāo)注,后者按給定的分段數(shù)等分曲線并在等分點(diǎn)處進(jìn)行標(biāo)注。要標(biāo)注的輪廓曲線最好用pline線,要標(biāo)注的符號(hào)預(yù)先做成圖塊,圖塊采用單位塊,執(zhí)行measure或pide命令,選取要標(biāo)注的曲線,指定標(biāo)注符號(hào),分段長度或分段數(shù)即可完成標(biāo)注,當(dāng)發(fā)現(xiàn)標(biāo)注的符號(hào)太密或太疏時(shí),可以執(zhí)行erase命令選擇P進(jìn)行刪除,比例不合適或符號(hào)方向不正確,可以利用特性編輯器,選中所有標(biāo)注符號(hào),對(duì)標(biāo)注符號(hào)的比例和旋轉(zhuǎn)角度進(jìn)行調(diào)整,直到滿意為止。對(duì)于更高級(jí)的應(yīng)用,可以編制LSP程序,實(shí)現(xiàn)符號(hào)和文字沿任意曲線標(biāo)注。

2 .4 表格生成

AutoCAD本身沒有表格處理功能,設(shè)計(jì)圖紙中工程量表、鋼筋表等涉及到表格生成的問題可以采用以下方法處理:

(1)直接把Word或Excel文件中的表格直接粘貼到CAD圖形中,修改時(shí)只要雙擊圖中的表格即可進(jìn)入Word或Excel中進(jìn)行編輯修改,修改完成后退出即可返回到AutoCAD中繼續(xù)進(jìn)行設(shè)計(jì),該法優(yōu)點(diǎn)是方便,快捷,易于掌握,可以充分利用Excel的強(qiáng)大計(jì)算功能。缺點(diǎn)是表格在AutoCAD中并不是一個(gè)普通圖元,無法利用CAD功能對(duì)表格的字高、顏色和線寬進(jìn)行編輯。

(2)編制LSP程序,依次輸入表格標(biāo)題、表格行數(shù)、表格列數(shù)、表格行高和列寬以及表格插入點(diǎn)等參數(shù),可以自動(dòng)生成表格,表格中已經(jīng)按仿Excel形式填入了文字,可以用字處理軟件對(duì)表格中文字進(jìn)行編輯修改。

(defun C:mtab()

(setq tb1 nil tb2 nil tb3 nil)

(setq rows (getint "表格行數(shù)"))

(setq cols (getint "表格列數(shù)"))

(setq rowh (getreal "行高"))

(setq colw (getreal "列寬"))

(setq p1 (getpoint "\n表格左上角點(diǎn)位置:"))

(command "pline" p1 "w" "0.5" "0.5"

(setq p2 (list (+ (car p1) (* cols colw)) (cadr p1)))

(setq p4 (list (car p2) (- (cadr p2) (* rows rowh))))

(setq p3 (list (car p1) (- (cadr p2) (* rows rowh))))

"C" )

(setq n 1)

(while (< n rows);繪水平線表格

(command "pline" (list (car p1) (- (cadr p1) (* n rowh))) "w" "0" "0"

(list (car p2) (- (cadr p2) (* rowh n))) "")

(setq n (+ n 1))

)

(setq n 1)

(while (< n cols) ;繪垂直表格線

(command "pline" (list (+ (car p1) (* n colw)) (cadr p1)) "w" "0" "0" (list (+ (car p1) (* n colw)) (cadr p3))

"")

(setq n (+ n 1))

)

(command "text" "m" (list (+ (car p1) (* 0.5 cols colw))

(+ (cadr p1) 5)) "3" "0" "TITLE" )

(setq n 0)

(while (< n rows)

(setq m 0)

(while (< m cols)

(cond

((< m 26) (setq bzstr (chr (+ 65 m))))

((>= m 26) (setq bzstr (strcat (chr (+ 64 (/ m 26))) (chr (+ 65 (- m (* 26 (/ m 26))))))))

)

(command "text" "m" (list (+ (car p1) (* 0.5 colw) (* m colw));表格內(nèi)容標(biāo)注

(- (cadr p1) (* 0.5 rowh) (* n rowh)))

(getvar"TEXTSIZE") "0" (strcat bzstr (itoa (+ n 1))))

(setq m (+ m 1))

)

(setq n (+ n 1))

))

(3)生成鋼筋表

鋼筋表和材料表生成是施工圖設(shè)計(jì)中比較繁瑣的一項(xiàng)工作,很容易出錯(cuò),此處介紹利用程序進(jìn)行鋼筋表和材料表自動(dòng)生成的方法。利用造字程序增加I、II級(jí)鋼筋的直徑標(biāo)注符號(hào)和,以后在其它電腦上只要把EUDC.TTE和E

見下表,增加3個(gè)命令:生成鋼筋表、鋼筋表添加和自動(dòng)生成材料表。

生成鋼筋表時(shí)按指定表格位置生成鋼筋表表頭,根據(jù)提示輸入鋼筋編號(hào)(可以不連續(xù))、鋼筋等級(jí)和直徑如20、16,交互繪制鋼筋簡(jiǎn)圖和標(biāo)注長度(標(biāo)注長度可以輸入多種形式如50~200表示長度等差變化;30,40,50表示一個(gè)編號(hào)多個(gè)鋼筋長度,),鋼筋根數(shù),構(gòu)件組數(shù),程序自動(dòng)完成表格其余各項(xiàng)(總長度、重量,對(duì)于I級(jí)鋼筋長度中自動(dòng)計(jì)入彎鉤長度)的填寫,備注欄中自動(dòng)填入等差變化鋼筋的等差值。

采集鋼筋表中直徑、等級(jí)和總長信息,經(jīng)過自動(dòng)分類匯總,生成鋼筋表的材料表。

2 .6 高程小數(shù)位數(shù)處理

尺寸標(biāo)注小數(shù)位數(shù)很容易調(diào)整,但諸如高程、表格中數(shù)字要調(diào)整則很困難,借助LSP程序的調(diào)整很方便,只要選取需要調(diào)整的數(shù)字,根據(jù)提示輸入需要保留的小數(shù)位數(shù),則程序自動(dòng)對(duì)所有選種數(shù)字進(jìn)行修改。

(defun entsgc()

(setq n 0)

(setq sh (sslength e1))

(while (< n sh) (setq x (entget (ssname e1 n)))

(if (= (fld 0 x) "TEXT")

(progn

(setq agc (fld 1 x))

(setq c (substr agc 1 1))

(if (or (= c "+") (= c "-") (and (>= c "0") (<= c "9")))

(progn

(if (or (= c "+") (= c "-"))

(setq bgc (substr agc 2))

(setq bgc agc)

)

(setq cgc (atof bgc))

(setq zh (rtos cgc 2 gcws))

(if (or (= c "+") (= c "-"))

(setq zh (strcat c zh)))

(setq x (subst (cons 1 zh) (assoc 1 x) x))

(entmod x)

)

))

))

(setq n (+ n 1)))

)

(defun c:yxws()

(setq e1 (ssget))

(setvar "dimzin" 0)

(setq gcws (getint "保留小數(shù)位數(shù):"))

(if e1 (entsgc) (print "\n not found"))

(setq x nil)

)

2 .7 應(yīng)用軟件前、后處理

由于軟件升級(jí)滯后,一些常用軟件后處理功能很弱或沒有,可以利用LSP程序結(jié)合AutoCAD增加或簡(jiǎn)化前后處理功能。下面結(jié)合平面滲流分析程序STSE軟件對(duì)其前、后處理功能的實(shí)現(xiàn)進(jìn)行介紹:

(1)前處理

STSE為平面滲流有限元程序,單元?jiǎng)澐趾蛦卧⒐?jié)點(diǎn)編號(hào)工作量最大,可以借助其它通用有限元軟件的前處理功能如Ansis、Algor、SAP84等進(jìn)行初步處理,生成單元、節(jié)點(diǎn)編號(hào)和節(jié)點(diǎn)坐標(biāo),而后按照STSE數(shù)據(jù)文件的格式要求對(duì)數(shù)據(jù)文件進(jìn)行編輯。

(2)后處理

后處理成果主要為:?jiǎn)卧W(wǎng)格圖,浸潤線和等勢(shì)線。單元網(wǎng)格圖中有節(jié)點(diǎn)和單元編號(hào),不同滲透系數(shù)的單元采用不同的顏色,以便根據(jù)網(wǎng)格圖直觀地判斷數(shù)據(jù)文件中幾何參數(shù)和材料特性的正誤;

首先分析STSE的輸出結(jié)果文件的格式,搜索并篩選其中主要參數(shù)如單元總數(shù)、節(jié)點(diǎn)總數(shù)和材料總數(shù),把節(jié)點(diǎn)坐標(biāo)和單元信息分別存儲(chǔ),通過對(duì)單元循環(huán)生成單元網(wǎng)格圖。

(defun c:seepmesh()

(if fn

(setq fn (getfiled "滲流結(jié)果文件名" fn "" 2))

(setq fn (getfiled "滲流結(jié)果文件名" "" "" 2)))

(setq f (open fn "r"))

(setq md (read-line f))

(while (/= (substr md 25 8) "單元總數(shù)")

(setq md (read-line f))

);定位單元總數(shù)

(setq dyzs (atoi (substr md 58 5)));讀單元總數(shù)

(setq md (read-line f))

(setq jdzs (atoi (substr md 58 5)));讀節(jié)點(diǎn)總數(shù)

(setq md (read-line f))

(setq clh (atoi (substr md 58 5)));讀材料總數(shù)

(setq m 0)

(repeat clh

(setq m (+ 1 m))

(setq tcm (strcat "zclh" (itoa m)))

(command "layer" "m" tcm "c" (itoa m) tcm "")

);按材料種類生成圖層名稱

(setq m 0 n 0)

(repeat dyzs;對(duì)單元循環(huán),dycfb中存放單元信息

(setq m (+ m 1))

(setq clh (nth 0 (nth m dycfb)))

(setq jdh1 (nth 1 (nth m dycfb)))

(setq jdh2 (nth 2 (nth m dycfb)))

(setq jdh3 (nth 3 (nth m dycfb)))

(setq jdh4 (nth 4 (nth m dycfb)))

(command "layer" "s" (strcat "zclh" (itoa clh)) "")

(command "pline";繪制單元網(wǎng)格

(nth jdh1 jdzbb)

(nth jdh2 jdzbb)

(nth jdh3 jdzbb)

(nth jdh4 jdzbb) "c")

(setq bzdzb (mapcar '+ (nth jdh1 jdzbb) (nth jdh2 jdzbb)

(nth jdh3 jdzbb) (nth jdh4 jdzbb)))

(setq bzdzb (list (/ (car bzdzb) 4.0) (/ (cadr bzdzb) 4.0)))

(command "text" "m" bzdzb "0.5" "0" (itoa m))

;標(biāo)注單元號(hào)

(setq m 0)

(repeat jdzs

(setq m (+ m 1))

(setq bzdzb (nth m jdzbb))

(setq bzdzb (list (+ (car bzdzb) 0.0) (+ (cadr bzdzb) 0.0)))

(command "text" "m" bzdzb "0.5" "0" (itoa m))

));標(biāo)注節(jié)點(diǎn)號(hào)

(close f)

)

限于篇幅,等勢(shì)線和浸潤線生成程序不再贅述。同樣,對(duì)工程設(shè)計(jì)中遇到的其它軟件如:STAB邊坡穩(wěn)定分析、SAP84的輸出文件均可進(jìn)行類似后處理工作。

3 結(jié)語

AutoCAD軟件應(yīng)用已經(jīng)在設(shè)計(jì)單位普及,VisualLisp的出現(xiàn)對(duì)于提高Lisp語言的編程效率和AutoCAD應(yīng)用水平具有重要意義。本文涉及的幾個(gè)實(shí)例已經(jīng)在實(shí)際工作中發(fā)揮很大作用,充分說明在工程設(shè)計(jì)當(dāng)中結(jié)合本專業(yè)要求開發(fā)一些簡(jiǎn)單實(shí)用的Lisp小程序可以有效減輕設(shè)計(jì)人員的勞動(dòng)強(qiáng)度,使AutoCAD不僅僅是繪圖工具,而真正成為設(shè)計(jì)人員得心應(yīng)手的高效設(shè)計(jì)平臺(tái)。

下載