摘要:AutoCAD作為當(dāng)前使用最為廣泛的工程繪圖軟件,可以選擇其作為測量數(shù)據(jù)處理的應(yīng)用平臺。但是使用其原有的內(nèi)部命令不能夠一一滿足日常測量工作需要,這就要求工作者在其基礎(chǔ)上進(jìn)行二次開發(fā)。本文主要是以AutoCAD為二次平臺進(jìn)行開發(fā)和設(shè)計(jì)的,該平臺很好地利用了AutoCAD靈活的編輯和強(qiáng)大的制圖功能,根據(jù)實(shí)際需要在此平臺的基礎(chǔ)上進(jìn)行二次開發(fā),編寫自己所需要的程序,形成一個(gè)個(gè)獨(dú)立的功能模塊,方便調(diào)用與修改,為數(shù)字化成圖提供了一種新的開發(fā)手段和開發(fā)思路。
關(guān)鍵詞:AutoCAD LIS市政排水測量二次開發(fā)程序
傳統(tǒng)處理數(shù)據(jù)方式如下:排水井井底標(biāo)注方面,要先按要求做出分?jǐn)?shù)標(biāo)注形式;然后復(fù)制到每個(gè)要標(biāo)注的排水井附近,繪圖者利用井面高程減去實(shí)地量測的井底深度求得井底高程,并通過命令“DDEDIT”來修改井面高程和井底高程,這樣才能完成排水井井底標(biāo)注;沉沙井管底標(biāo)注基本方法基本與排水井井底標(biāo)注相同,繪圖者用井面高程減去實(shí)地量測的管底深度求得管底高程,結(jié)合實(shí)地量測的管徑通過命令“DDEDIT”修改管徑和管底高程;管徑和流向標(biāo)注時(shí)除了要修改管徑數(shù)據(jù)外,還要旋轉(zhuǎn)管徑數(shù)據(jù)使其與管線方向保持一致,流向線段同樣保持與管線方向成一定的夾角。
由于一般市政工程的工期都相當(dāng)緊迫,在有限的時(shí)間里人工處理大量的數(shù)據(jù)難免會出現(xiàn)一些計(jì)算錯(cuò)誤,而且計(jì)算過程本身也會影響繪圖的速度。在標(biāo)注管徑連線和流水方向時(shí)很難做到整齊化一,流向線段的長度和其與相應(yīng)管徑的夾角也很難始終保持相同。因此本文采用新的設(shè)計(jì)思路,通過程序化繪圖來解決實(shí)際問題。程序設(shè)計(jì)思路如下:
1、排水井井底標(biāo)注
讓編圖人員通過鍵盤輸入井面高程和實(shí)地測量的井底深度,利用AutoCAD本身帶有的計(jì)算功能自動(dòng)計(jì)算出井底高程,并結(jié)合AutoCAD內(nèi)部文字標(biāo)注命令“TEXT”,在指定位置按要求自動(dòng)標(biāo)注出井底高程。這樣就會避免編圖人員的計(jì)算錯(cuò)誤,并保持排水井標(biāo)注格式的嚴(yán)格統(tǒng)一。
2、排水管徑邊線及流向標(biāo)注
在標(biāo)注管徑連線時(shí),切換AutoCAD的系統(tǒng)變量,使AutoCAD的捕捉狀態(tài)置于只有捕捉“圓心”狀態(tài)下,因?yàn)槊總€(gè)排水井的符號都有圓心,這樣大大提高了連線速度,并且可以保證每條連線起點(diǎn)都位于排水井的定位點(diǎn)(即圓心)上。通過計(jì)算兩個(gè)排水井之間的長度和連線的中心位置,規(guī)定流向與排水井管徑連線的角度,則可以自動(dòng)標(biāo)注每一段排水管的流向,每個(gè)流向線段的長度及其與之相應(yīng)的排水管線的夾角完全相同。
3、沉沙井管底標(biāo)注
讓編圖人員通過鍵盤輸入沉沙井井面高程、沉沙井管徑大小及實(shí)地測量的管底深度,利用AutoCAD本身帶有的計(jì)算功能計(jì)算出管底高程,并結(jié)合AutoCAD內(nèi)部文字標(biāo)注命令“TEXT”,在指定位置按要求自動(dòng)標(biāo)注出管徑和管底高程。在選擇要求標(biāo)注的管位時(shí),切換AutoCAD的系統(tǒng)變量,使AutoCAD的捕捉狀態(tài)置于只有捕捉“最近點(diǎn)”狀態(tài)下,這樣能準(zhǔn)確在連線到相應(yīng)的管徑連線上,然后在選擇標(biāo)注所放的位置時(shí)把捕捉狀態(tài)關(guān)掉。
4、程序編制
(1).排水井井底標(biāo)注程序主體:
;;;;;;;;;;;;;;設(shè)定變量
(setq pt1 (getpoint\"\標(biāo)注位置:\"))
(setq jmg (getreal\"\井面高程:\"))
(setq js (getreal\"\井深:\"))
;;;;;;;;;計(jì)算井底高程
(setq jds (- jmg js))
;;;;;;;;;根據(jù)井面高程和井底高程字符的長度確定分?jǐn)?shù)線的長度
(setq string_len (max (fix jmg) (fix jds)))
(setq len_factor (strlen (itoa string_len)))
(setq pt2 (polar pt1 0 (* (+ len_factor 2) 0.7)))
(setq pt3 (polar pt1 0 (* (+ len_factor 2) 0.7 0.5)))
(setq pt4 (polar pt3 (* pi 0.5) 0.5))
(setq pt5 (polar pt3 (* pi 1.5) 0.5))
;;;;;;;;自動(dòng)標(biāo)注井面高程和井底高程,并利用wide_change函數(shù)將標(biāo)注字高設(shè)為0.7
(command \"text\" \"j\" \"m\" pt4 \"0.7\" \"0\" (rtos jmg 2 2))
(setq en (entlast))
(wide_change)
(command \"pline\" pt1 pt2 \"\")
(command \"text\" \"j\" \"m\" pt5 \"0.7\" \"0\" (rtos jds 2 2))
(setq en (entlast))
(wide_change)
(2)沉沙井管底標(biāo)注程序主體:
;;;;;;;設(shè)定變量
(setq pt1 (getpoint\"\標(biāo)注管位:\"))
(setq pt2 (getpoint\"\標(biāo)注位置:\"))
(setq gjdx (getint\"\管徑大小:\"))
(setq gjdxf (strcat \"D\" (itoa gjdx)))
(setq jmg (getreal\"\井面高程:\"))
(setq gs (getreal\"\管底深:\"))
;;;;;;;;;計(jì)算管底高程
(setq gds (- jmg gs))
(setq ang_pt1_pt2 (angle pt1 pt2))
…
(setq pt5 (polar pt4 (* pi 0.5) 0.5))
(setq pt6 (polar pt4 (* pi 1.5) 0.5))
(command \"pline\" pt1 pt2 pt3 \"\")
;;;;;;;;自動(dòng)標(biāo)注管徑和管底高程,并利用wide_change函數(shù)將標(biāo)注字高設(shè)為0.7
(command \"text\" \"j\" \"m\" pt5 \"0.7\" \"0\" gjdxf)
(setq en (entlast))
(wide_change)
(command \"text\" \"j\" \"m\" pt6 \"0.7\" \"0\" (rtos gds 2 2))
(setq en (entlast))
(wide_change)
(3)管徑及流向標(biāo)注程序主體:
;;;;;;;;將對象捕捉狀態(tài)置為只捕捉圓心
(setq osdynamic (getvar \"osmode\"))
(if (= osdynamic 4)
()
(setvar \"osmode\" 4)
)
;;;;;;;設(shè)定變量
(setq pt1(getpoint\"\起點(diǎn):\"))
(setq ans \"y\")
(setq gjmr 400);;;;;設(shè)定默認(rèn)管徑
(setq js 1)
;;;;;;;;自動(dòng)標(biāo)注管徑,并利用wide_change函數(shù)將標(biāo)注字高設(shè)為0.7
(command \"text\" \"j\" \"m\" pt4 \"0.7\" (angtos text_rotate_ang) (strcat \"D\" (itoa dia)))
(setq en (entlast))
(wide_change)
;;;;;計(jì)算管徑連線的中點(diǎn),并從中點(diǎn)繪制正確的流向線段
(setq pt5 (polar pt3 (+ ang_pt2_pt1 (* pi 1.13)) 1))
(command \"pline\" pt3 pt5 \"\")
(setq en (entlast))
……
AutoCAD所采用的LISP語言是較為簡單的一門計(jì)算機(jī)語言,容易入門與掌握,不需要掌握太多復(fù)雜的數(shù)據(jù)結(jié)構(gòu)與計(jì)算機(jī)軟硬件知識;而且開發(fā)一些日常測量工作需要的小程序,不需要涉及到軟件內(nèi)核或操作系統(tǒng)層面上的編程,利用AutoCAD LISP編寫足以勝任。另外由于程序化繪圖時(shí),程序所調(diào)用的AutoCAD命令不用外部響應(yīng),節(jié)省了大量時(shí)間,簡化了繪圖過程,大大提高了工作效率,繪圖成果也整齊美觀。