李保,代波
(重慶市地質(zhì)災(zāi)害防治工程勘查設(shè)計院,重慶 400700)
我們的巖土工程勘察設(shè)計工作圖件多離不開AutoCAD制圖軟件,但工作中常常需要繪制一些特殊的圖件,這些特征圖件若在AutoCAD中手工繪制,將是一件費時費力的事情,但AutoCAD提供了程序應(yīng)用界面,用戶可以利用許多編程語言編制自己需要的程序在AutoCAD中執(zhí)行,以提高用戶的工作效率。
AutoLISP是為擴展和自定義AutoCAD功能而設(shè)計的一種編程語言,它的程序編制過程十分簡單、而且直接,可以不需要專門的編程界面,以文本文件的形式,在記事本中就可以直接編輯;而其程序的加載也十分簡單,只需把編制好的程序直接用鼠標(biāo)托拽入AutoCAD窗口界面中,也可通過其它方式自動加載進(jìn)AutoCAD中,加載后就可以象使用AutoCAD的內(nèi)部命令一樣,輸入定義的命令名,直接執(zhí)行。
結(jié)構(gòu)面赤平極射投影圖是巖土工程勘察中對巖質(zhì)邊坡穩(wěn)定性進(jìn)行分析的基本圖件,若是采用手工繪制,將是件非常費時費力的事情,本文運用AutoLISP語言編制的自動成圖程序,采用在AutoCAD窗口的命令欄,交互輸入結(jié)構(gòu)面參數(shù)而直接生成結(jié)構(gòu)面赤平極射投影圖,其做圖方法簡單、直接,大大提高工作效率。
赤平極射投影是解析平面和直線的空間關(guān)系的一種圖解方法,在巖體工程研究中,利用赤平極射投影來表示巖體中各結(jié)構(gòu)面和臨空面的方向和角度,以及它們之間的角距,可以在投影圖上簡便地確定它們的夾角和組合關(guān)系,確定巖體的結(jié)構(gòu)特征,完全用圖解的方法代替繁雜的公式演算,既簡便迅速,也比較形象直觀。
在赤平極射投影圖上,外圓為赤道大圓,代表赤道平面(既水平面),其上、下、左、右分別代表北(N)、南(S)、西(W)、東(E)方位,并按360°方位角分度。各結(jié)構(gòu)面投影在赤道大圓上反映為一條圓弧線:弧線與赤道大圓兩側(cè)交點的連線為大圓的一條直徑,代表了結(jié)構(gòu)面的走向;弧線彎曲方向代表結(jié)構(gòu)面的傾向;弧線中點距大圓圓心的距離代表了結(jié)構(gòu)面的傾角,弧線中點距圓心越近、傾角越大(通過圓心,傾角為90°),弧線中點距圓心越遠(yuǎn)、傾角越?。ㄍㄟ^大圓,傾角為0°)。
弧線中點距大圓圓心的距離計算公式為:
ox=r×tan(π/4-Φ/2)
式中:ox——弧線中點至圓心距離;
r——赤道大圓半徑(本程序設(shè)置大圓半徑為25mm);
Φ——結(jié)構(gòu)面傾角。
結(jié)構(gòu)面產(chǎn)狀的表達(dá)式為:傾向∠傾角,
例如:結(jié)構(gòu)面產(chǎn)狀為58°∠32°其赤平極射投影圖見圖1。
圖1 產(chǎn)狀為58°∠32°結(jié)構(gòu)面赤平極射投影圖
其中:NWSE為赤道大圓(本程序設(shè)定半徑為25mm),AXB為結(jié)構(gòu)面的投影圓?。óa(chǎn)狀為58°∠32°),AB為結(jié)構(gòu)面的走向直徑(走向為328°-148°),XO的指向代表結(jié)構(gòu)面的傾向(58°),X點距離圓心O點的距離為13.86mm代表傾角的大小(32°)。
程序在執(zhí)行的過程中采用交互方式,以便在AutoCAD的命令欄中輸入相關(guān)參數(shù)。
首先為編制的程序定義一個命令名稱,以便在AutoCAD的命令欄直接輸入命令名,既可執(zhí)行本程序。
程序執(zhí)行后,第一步,在指定位置處自動畫出大圓,并在大圓相應(yīng)位置標(biāo)注出北(N)、南(S)、西(W)、東(E)及圓心,在大圓下部標(biāo)注圖件名稱。
第二步,在命令欄中輸入結(jié)構(gòu)面的產(chǎn)狀參數(shù),每輸入一條結(jié)構(gòu)面參數(shù),就在大圓中自動畫出一條結(jié)構(gòu)面圓弧,循環(huán)直至全部結(jié)構(gòu)面參數(shù)輸入完成。
第三步,結(jié)束程序,完成赤平極射投影圖。
本程序使用AutoLISP語言編制,可以用文本文件(.txt)直接編輯,編輯完成后直接保存,將文件的后輟.txt直接改成.lsp既可。
在AutoLISP程序中,可以加入中文注釋,用以解釋某段語句的含義,便于其它人或以后修改時明白語句的內(nèi)容,注釋方式為:以半角分號作為注釋的分隔符,分號之后的內(nèi)容即為注釋,注釋可以單獨一行,也可以附在某語句后,而在程序運行時,注釋部分的內(nèi)容不參與程序的運行。
(1)首先為程序定義一個命令名稱[1](定義的名稱不能與AutoCAD內(nèi)部命令重名,以免引起程序執(zhí)行錯誤),在AutoCAD的命令欄直接輸入定義的命令名,既可執(zhí)行本程序,本程序命令名稱定義為:CPTYT。語句如下:
(/oce1 oce2 oce3 oce4 oce5 p1 pz1 R fn1 n1 n2 qxc qxp qx qjp qj pt1 pt2 pt3 a1 str);定義本程序命令名稱為CPTYT,括號中為定義本程序中所用到的所有變量名稱。
(2)定義在AutoCAD中執(zhí)行返回操作時,本程序返回時的起點,語句如下:
(command"undo""be")
(3)保存系統(tǒng)原變量值(以便結(jié)束本程序后恢復(fù)系統(tǒng)變量環(huán)境),并按本程序的運行要求修改為新的系統(tǒng)變量值[2],語句如下:
(setq oce1(getvar"cmdecho");保存命令響應(yīng)原變量值。
oce2(getvar"OSNAPCOORD");保存坐標(biāo)數(shù)據(jù)優(yōu)先級原變量值。
oce3(getvar"OSMODE");保存捕捉原變量值。
oce4(getvar"ANGDIR");保存角度正方向原變量值。
oce5(getvar"ANGBASE"));保存基準(zhǔn)角度原變量值。
(setvar"cmdecho"0);關(guān)閉命令響應(yīng)。
(setvar"OSNAPCOORD"1);坐標(biāo)數(shù)據(jù)優(yōu)先級設(shè)為:鍵盤輸入替代對象捕捉設(shè)置。
(setvar"OSMODE"7095);改變捕捉模式。
(setvar"ANGDIR"0);角度正方向為逆時針。
(setvar"ANGBASE"0);基準(zhǔn)角度東方為0。
(4)定義一個字體樣式、并設(shè)置為當(dāng)前字體樣式,新建一個圖層、并設(shè)置為當(dāng)前圖層(以免與其它內(nèi)容混在一個圖層上),語句如下:
(if(=(Tblsearch"style""BG_ST")nil)
(command"-style""BG_ST""宋體"00.80"n""n"));定義一個文字樣式,樣式名稱為“BG_ST”,采用宋體,寬高比為0.8。
(command"textstyle""BG_ST");設(shè)置當(dāng)前字體樣式為“BG_ST”。
(If(=(Tblsearch"layer""結(jié)構(gòu)面")nil)
(command"-layer""n""結(jié)構(gòu)面""c"7"結(jié)構(gòu)面""s""結(jié)構(gòu)面"""));定義一個新圖層,圖層名稱為“結(jié)構(gòu)面”,顏色用7號(白色)。
(command"-layer""c"7"結(jié)構(gòu)面""s""結(jié)構(gòu)面""");設(shè)置“結(jié)構(gòu)面”為當(dāng)前圖層。
(5)用鼠標(biāo)在AutoCAD中指定赤平極射投影圖的繪制位置[4](大圓圓心的位置),并設(shè)置大圓的半徑,語句如下:
(setq p1(getpoint" 請指定繪圖基點:");等待用鼠標(biāo)在AutoCAD中指定大圓圓心的位置。
pz1(polar p1035);計算結(jié)構(gòu)面的注釋位置。
R 25);設(shè)置大圓半徑為25mm。
(6)繪制大圓[3],標(biāo)注北(N)、南(S)、西(W)、東(E),并標(biāo)注圖名,語句如下:
(command"zoom""w"(polar p1(*pi 0.5)40)(polar p1(*pi 1.5)50));根據(jù)指定的基點縮放窗口至合適位置及大小。
(command"line"(polar p1 pi 2.5)(polar p102.5)"");畫圓心處短橫線。
(command"line"(polar p1(*pi 0.5)2.5)(polar p1(*pi 1.5)2.5)"");畫圓心處短豎線。
(command"line"(polar p1025)(polar p1026.5)"");畫大圓東標(biāo)注短線。
(command"line"(polar p1(*pi 0.5)25)(polar p1(*pi 0.5)26.5)"");畫大圓北標(biāo)注短線。
(command"line"(polar p1 pi 25)(polar p1 pi 26.5)"");畫大圓西標(biāo)注短線。
(command"line"(polar p1(*pi 1.5)25)(polar p1(*pi 1.5)26.5)"");畫大圓南標(biāo)注短線。
(command"circle"p1 R);畫出大圓。
(command"text""ml"(polar p1028)2.50"E");標(biāo)注大圓東。
(command"text""bc"(polar p1(*pi 0.5)28)2.50"N");標(biāo)注大圓北。
(command"text""mr"(polar p1 pi 28)2.50"W");標(biāo)注大圓西。
(command"text""tc"(polar p1(*pi 1.5)28)2.50"S");標(biāo)注大圓南。
(command"text""m"(polar p1(*pi 1.5)38)3.20"結(jié)構(gòu)面赤平極射投影圖");在大圓的下方,標(biāo)注圖名。
(7)在命令欄輸入結(jié)構(gòu)面的產(chǎn)狀參數(shù)(傾向、傾角),控制傾向為0~360°之間、并為整數(shù),控制傾角為0~90°之間、并為整數(shù),輸入一條結(jié)構(gòu)面參數(shù)、畫出一條結(jié)構(gòu)面弧線、并用文字標(biāo)注出序號及其產(chǎn)狀,并循環(huán)至全部結(jié)構(gòu)面輸入完成[1],語句如下:
(setq n11 n2888)(while(=n2888);循環(huán)繪制圓弧及結(jié)構(gòu)面注釋起點。
以下內(nèi)容為等待輸入結(jié)構(gòu)面傾向,并控制傾向范圍為0~360°之間,且為整數(shù)。
(setq qxc 888)(while(=qxc 888)(if(not(setq qxp(getint" 輸入結(jié)構(gòu)面傾向<退出>:")))
(setq qxc 886))(if(=qxc 886)(setq qxc 886)(cond(( (setq qxc 888)(princ"--傾向數(shù)值太小,重新輸入--")) ((>qxp 360)(setq qxc 888)(princ"--傾向數(shù)值太大,重新輸入--")) (t(setq qxc 880))))) (if(=qxc 880)(setq qx(/(*(-90 qxp)PI)180))) 以下內(nèi)容為等待輸入結(jié)構(gòu)面傾角,并控制傾角范圍為0~90度之間,且為整數(shù)。 (if(=qxc 886)(setq qxc 886)(setq qxc 888)) (while(=qxc 888)(if(not(setq qjp(getint"
輸入結(jié)構(gòu)面傾角<退出>:"))) (setq qxc 886))(if(=qxc 886)(setq qxc 886)(cond(( (setq qxc 888)(princ"--傾角數(shù)值太小,重新輸入--")) ((>qjp 90)(setq qxc 888) (princ"--傾角數(shù)值太大,重新輸入--")) (t(setq qxc 880))))) (if(=qxc 880)(setq qj(/(*qjp PI)180))) 以下內(nèi)容為:根據(jù)輸入的結(jié)構(gòu)面產(chǎn)狀參數(shù),計算出圓弧的位置坐標(biāo),并畫出結(jié)構(gòu)面圓弧,在弧線的中心點標(biāo)注結(jié)構(gòu)面序號。 以下內(nèi)容為:將輸入的結(jié)構(gòu)面序號及其產(chǎn)狀內(nèi)容,用文字標(biāo)注在大圓的右側(cè)。 (cond((=qxc 880) (progn (setq str(strcat(itoa n1)".結(jié)構(gòu)面產(chǎn)狀:"(itoa qxp)"°∠" (itoa qjp)"°"))(command"text""tl"pz12.80 str) (setq n1(1+n1)pz1(polar pz1(*pi 1.5)6) n2888)))(t(progn(setq n2886)))));循環(huán)繪制圓弧及結(jié)構(gòu)面注釋終點。 (8)恢復(fù)系統(tǒng)變量值,還原系統(tǒng)環(huán)境,語句如下: (setvar"cmdecho"oce1);恢復(fù)命令響應(yīng)。 (setvar"OSNAPCOORD"oce2);恢復(fù)坐標(biāo)數(shù)據(jù)優(yōu)先級設(shè)置。 (setvar"OSMODE"oce3);恢復(fù)捕捉模式。 (setvar"ANGDIR"oce4);恢復(fù)角度正方向。 (setvar"ANGBASE"oce5);恢復(fù)基準(zhǔn)角度。 (9)定義在AutoCAD中執(zhí)行返回操作時,本程序返回時的終點,語句如下: (command"undo""e") (10)結(jié)束本程序的運行,語句如下: (princ)) 假設(shè)一個巖質(zhì)邊坡有如下幾組結(jié)構(gòu)面(結(jié)構(gòu)面產(chǎn)狀見表1),使用本程序成圖的過程如下。 表1 結(jié)構(gòu)面產(chǎn)狀參數(shù)表 (1)加載程序 最簡單的加載方式:將程序文件直接托拽入AutoCAD窗口中,即可加載。在命令欄最后若顯示“C:CPTYT”,即表明程序加載成功,見圖2。 圖2 程序加載示意圖 (2)運行程序 在命令欄直接輸入定義的命令名“CPTYT”,按回車鍵,即運行本程序,同時在命令欄會提示“請指定繪圖基點”。 此時程序等待用戶輸入繪圖基點位置,用戶用鼠標(biāo)在AutoCAD窗口中點擊某位置后,程序會將此位置作為大圓的圓心,開始自動繪制完成大圓,標(biāo)注圓心十字短線、北南西東方位、圖件名稱等,并以該點作為中心縮放窗口中內(nèi)容至合適大小,同時在命令欄會提示“輸入結(jié)構(gòu)面傾向”,見圖3。 圖3 程序運行示意圖(1) 接著,用戶在命令欄輸入第一條結(jié)構(gòu)面的傾向“127”并回車后,命令欄會繼續(xù)提示“輸入結(jié)構(gòu)面傾角”,用戶在命令欄輸入第一條結(jié)構(gòu)面的傾角“68”并回車后,程序會自動繪制出該結(jié)構(gòu)面的圓弧線,且在圖的右側(cè)會用文字注釋該結(jié)構(gòu)面的序號及產(chǎn)狀,同時命令欄會繼續(xù)提示“輸入結(jié)構(gòu)面傾向”……,見圖4。 圖4 程序運行示意圖(2) 用戶根據(jù)命令欄的提示,依次循環(huán)輸入第二條至第五條的結(jié)構(gòu)面傾向、傾角,待第五條結(jié)構(gòu)面的傾角“23”輸入并回車后,命令欄仍會繼續(xù)提示“輸入結(jié)構(gòu)面傾向”,而此時全部結(jié)構(gòu)面的傾向及傾角參數(shù)都已經(jīng)輸入完成,不再需要輸入,則直接按回車鍵,本程序執(zhí)行結(jié)束并退出,最終完成后的結(jié)構(gòu)面赤平極射投影圖,見圖5。 圖5 完成的結(jié)構(gòu)面赤平極射投影圖 以上述的結(jié)構(gòu)面赤平極射投影圖為例,通過各結(jié)構(gòu)面圓弧的位置關(guān)系(圖6),可以對邊坡的穩(wěn)定性做出分析如下: 圖6 邊坡結(jié)構(gòu)面穩(wěn)定性分析圖 (1)2號巖層面圓弧與1號邊坡面圓弧方向一致,說明邊坡為順向坡,同時2號巖層面圓弧在1號邊坡面圓弧的外側(cè)(圖6中豎向陰影部分),說明層面傾角小于邊坡的坡角,即本邊坡類型為順向坡,且處于外傾臨空狀態(tài),容易沿巖層面發(fā)生整體性下滑,邊坡不穩(wěn)定。 (2)3號及4號兩組裂隙面圓弧與1號邊坡面圓弧大角度相交,說明本兩組裂隙面與邊坡面為切向關(guān)系,邊坡不會沿該兩組裂隙面發(fā)生滑動。 (3)5號裂隙面圓弧與1號邊坡面圓弧方向相反,說明本組裂隙面與邊坡面為反向關(guān)系,邊坡不會沿該組裂隙面發(fā)生滑動。 (4)1號、2號、3號、4號圓弧線組面的梯形區(qū)域(圖6中格子陰影部分)處于1號邊坡圓弧形的外側(cè),說明由這4組結(jié)構(gòu)面組成的契形巖體,傾向與邊坡方向一致,該部分巖體會發(fā)生掉塊,影響邊坡穩(wěn)定。 綜上,本邊坡類型為順向坡,會發(fā)生兩種形式的破壞,一種是會沿層面發(fā)生整體滑動,另一種是會發(fā)生小規(guī)模的掉塊現(xiàn)象,邊坡處于不穩(wěn)定狀態(tài)。 采用AutoLISP語言對AutoCAD進(jìn)行二次開發(fā)編制的應(yīng)用程序,具有簡單、易用的特點,在AutoCAD中運行穩(wěn)定、可靠,且與外部文件可進(jìn)行數(shù)據(jù)交換,同時配合DCL對話框可實現(xiàn)許多CAD復(fù)雜功能,而各行業(yè)都有其特有的制圖方法及所需的繪圖功能,這些功能不可能由AutoCAD直接提供,了解掌握Auto-CAD的二次開發(fā)技術(shù),將會給自己的工作提供極大地幫助。 [1]藍(lán)屹生.Auto LISP學(xué)習(xí)引導(dǎo)[M].北京:中國鐵道出版社,2003:40-42,184-186. [2][美]斯特爾曼,[美]克里希南.精通中文AutoCAD 2000[M]王淇,譯.北京:機械工業(yè)出版社,2000:798-814. [3]Ralph Grabowski.AutoCAD2000命令參考手冊[M].倪偉英,譯.北京:機械工業(yè)出版社,2000:64-65. [4]Sham Tickoo.AutoCAD2000高級用戶指南[M].潘宏,譯,北京:機械工業(yè)出版社,2000:915-918. [5]孫玉科,古迅.赤平極射投影圖在巖體工程地質(zhì)力學(xué)中的應(yīng)用[M].北京:科學(xué)出版社,1980:10-12,62-70.4 程序加載及運行實例
5 邊坡穩(wěn)定性分析實例[5]
6 結(jié)束語