李保,代波
(重慶市地質災害防治工程勘查設計院,重慶 400700)
我們的巖土工程勘察設計工作圖件多離不開AutoCAD制圖軟件,但工作中常常需要繪制一些特殊的圖件,這些特征圖件若在AutoCAD中手工繪制,將是一件費時費力的事情,但AutoCAD提供了程序應用界面,用戶可以利用許多編程語言編制自己需要的程序在AutoCAD中執行,以提高用戶的工作效率。
AutoLISP是為擴展和自定義AutoCAD功能而設計的一種編程語言,它的程序編制過程十分簡單、而且直接,可以不需要專門的編程界面,以文本文件的形式,在記事本中就可以直接編輯;而其程序的加載也十分簡單,只需把編制好的程序直接用鼠標托拽入AutoCAD窗口界面中,也可通過其它方式自動加載進AutoCAD中,加載后就可以象使用AutoCAD的內部命令一樣,輸入定義的命令名,直接執行。
結構面赤平極射投影圖是巖土工程勘察中對巖質邊坡穩定性進行分析的基本圖件,若是采用手工繪制,將是件非常費時費力的事情,本文運用AutoLISP語言編制的自動成圖程序,采用在AutoCAD窗口的命令欄,交互輸入結構面參數而直接生成結構面赤平極射投影圖,其做圖方法簡單、直接,大大提高工作效率。
赤平極射投影是解析平面和直線的空間關系的一種圖解方法,在巖體工程研究中,利用赤平極射投影來表示巖體中各結構面和臨空面的方向和角度,以及它們之間的角距,可以在投影圖上簡便地確定它們的夾角和組合關系,確定巖體的結構特征,完全用圖解的方法代替繁雜的公式演算,既簡便迅速,也比較形象直觀。
在赤平極射投影圖上,外圓為赤道大圓,代表赤道平面(既水平面),其上、下、左、右分別代表北(N)、南(S)、西(W)、東(E)方位,并按360°方位角分度。各結構面投影在赤道大圓上反映為一條圓弧線:弧線與赤道大圓兩側交點的連線為大圓的一條直徑,代表了結構面的走向;弧線彎曲方向代表結構面的傾向;弧線中點距大圓圓心的距離代表了結構面的傾角,弧線中點距圓心越近、傾角越大(通過圓心,傾角為90°),弧線中點距圓心越遠、傾角越小(通過大圓,傾角為0°)。
弧線中點距大圓圓心的距離計算公式為:
ox=r×tan(π/4-Φ/2)
式中:ox——弧線中點至圓心距離;
r——赤道大圓半徑(本程序設置大圓半徑為25mm);
Φ——結構面傾角。
結構面產狀的表達式為:傾向∠傾角,
例如:結構面產狀為58°∠32°其赤平極射投影圖見圖1。

圖1 產狀為58°∠32°結構面赤平極射投影圖

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





5 邊坡穩定性分析實例[5]

6 結束語