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