陳清平,堯志青,胡 菡,陳方清
(1.湖北省測繪工程院,湖北 武漢 430074)
AutoCAD中一種自動(dòng)處理懸掛的方法及其實(shí)現(xiàn)
陳清平1,堯志青1,胡 菡1,陳方清1
(1.湖北省測繪工程院,湖北 武漢 430074)
介紹了數(shù)字線劃圖生產(chǎn)過程中利用CAD二次開發(fā)(VB.NET+ObjectARX)自動(dòng)檢查并處理懸掛線的技術(shù),并對該技術(shù)存在的不足進(jìn)行了分析。
懸掛點(diǎn);懸掛線;懸掛容差;CAD二次開發(fā)
在矢量圖形的自動(dòng)生產(chǎn)過程中,可能會(huì)遺漏、重復(fù)或錯(cuò)誤定位某些點(diǎn),從而產(chǎn)生懸掛線。例如,航測數(shù)據(jù)采集因受生產(chǎn)軟件和手輪角盤等硬件條件的制約,采集者為了貼附地物進(jìn)行精確采集,將會(huì)放棄三維捕捉和二維捕捉,從而產(chǎn)生懸掛線。在線劃圖的編輯處理過程中,會(huì)遇到一些咬合精度達(dá)不到要求的懸掛線。僅與一條線段相連的節(jié)點(diǎn)稱為懸掛節(jié)點(diǎn),與懸掛節(jié)點(diǎn)相連的線段稱為懸掛線。
利用AutoCAD 2007進(jìn)行線劃圖的生產(chǎn)過程中,遇到的懸掛線可分為2種情況:懸掛線與參照線之間有縫隙(見圖1)、懸掛線超過了參照線(見圖2)。
這2種懸掛在生產(chǎn)的過程中會(huì)大量出現(xiàn),需人工進(jìn)行編輯處理以達(dá)到生產(chǎn)要求。本文分析和研究了一種自動(dòng)處理懸掛線的方法,利用VB.NET和ObjectARX對AutoCAD進(jìn)行二次開發(fā),用程序?qū)崿F(xiàn)懸掛線的自動(dòng)處理。
圖1 懸掛類型之一
圖2 懸掛類型之二
在處理懸掛線前,首先要確定懸掛線、懸掛點(diǎn)的位置和坐標(biāo),即全圖查找懸掛點(diǎn)并定位每一個(gè)懸掛點(diǎn)。
定義一個(gè)容差范圍圓,超過容差圓半徑的懸掛可認(rèn)作正常懸掛,保留懸掛查詢點(diǎn),供人工判斷。在容差范圍內(nèi)的懸掛可用程序改動(dòng)。1∶1萬的數(shù)字線劃圖容差半徑設(shè)置為5 m時(shí)(圖面距離為0.5 mm),程序自動(dòng)處理結(jié)果達(dá)到預(yù)計(jì)效果的99.9%。大比例尺數(shù)字線劃圖可根據(jù)精度情況減小容差半徑。
1)結(jié)合查詢出來的懸掛標(biāo)示,遍歷DWG圖中的LWpolyline(輕量多段線)和Line(直線),通過對照懸掛標(biāo)示的X、Y值與線段的首尾節(jié)點(diǎn)X、Y值,獲得懸掛標(biāo)示Id與懸掛線Id相關(guān)聯(lián)的二維集合(此處不需考慮節(jié)點(diǎn)Z值),搜索需改動(dòng)的懸掛對象和位置(如圖3所示)。
圖3 確認(rèn)懸掛對象
2)根據(jù)比例尺大小和實(shí)際情況設(shè)置容差圓的半徑大小,該半徑即為自動(dòng)處理懸掛改動(dòng)距離的最大范圍。如果程序判斷改動(dòng)范圍超過了該半徑,則放棄自動(dòng)處理懸掛,保留懸掛標(biāo)示,供人工判讀。
3)遍歷懸掛點(diǎn)列表,搜索出以懸掛點(diǎn)為中心的特定范圍內(nèi)的多段線,判斷搜索出的多段線條數(shù)n。當(dāng)n<2時(shí)表示該懸掛點(diǎn)已經(jīng)超出改動(dòng)范圍,不做處理;當(dāng)n≥2時(shí),計(jì)算求出懸掛線與各條參照線的交點(diǎn)或延長線的交點(diǎn),從而求出懸掛處需延長或裁剪的距離集合。遍歷該集合得出最短距離值,如果該值沒超過容差圓半徑則執(zhí)行懸掛點(diǎn)改動(dòng),延長或縮短到最近交點(diǎn)上,即給懸掛點(diǎn)賦交點(diǎn)的X、Y值和自身Z值以達(dá)到消除懸掛的效果。
在搜索以懸掛點(diǎn)為中心的特定范圍內(nèi)的參照線時(shí),程序可進(jìn)行優(yōu)化處理。如果把全圖線段作為參照線的集合,程序?qū)?huì)遍歷該集合進(jìn)行解算求改動(dòng)最小距離,使得計(jì)算量成平方級增長,非常費(fèi)時(shí);可將程序改進(jìn)為利用懸掛點(diǎn)為中心,框選特定范圍內(nèi)的(利用窗交工具)線段作為參照線集合解算結(jié)果,使得計(jì)算量大為減少,效果比較理想。對于不同標(biāo)高的線段求交點(diǎn)消除懸掛,可通過正射投影到一個(gè)任意水平面上,獲得交點(diǎn)。提取交點(diǎn)的X、Y值,提供給懸掛點(diǎn)進(jìn)行移動(dòng),從而消除懸掛。
4)分別標(biāo)示出改動(dòng)過和未改動(dòng)的懸掛點(diǎn)位,供人工檢查和修改。圖4中綠色圓為改動(dòng)處,紅色圓處因改動(dòng)范圍超過容差所以未處理,交由人工判斷。具體實(shí)現(xiàn)流程如圖5所示。
1)查找懸掛點(diǎn)、懸掛線。
2)通過設(shè)定的容差批量延伸、裁剪多段線消除懸掛。
利用該算法編譯的程序經(jīng)過測試和生產(chǎn),遇到了以下問題:
1)由于原線劃圖中存在錯(cuò)誤,導(dǎo)致程序依照算法判斷出的結(jié)果也出現(xiàn)錯(cuò)誤。例如,一條地類界本應(yīng)??吭陔p線路的虛線上,但由于原圖將其錯(cuò)誤地穿過雙線路的虛線邊而??吭趯?shí)線附近,程序運(yùn)行后,會(huì)依照算法將地類界咬合雙線路的實(shí)線邊而穿越了雙線路,使得最終結(jié)果錯(cuò)誤。
2)判斷等高線的合理懸掛問題。由于等高線在坎線下方的懸掛是合理存在,所以使用該方法處理等高線懸掛時(shí)會(huì)出現(xiàn)錯(cuò)誤。在其自動(dòng)處理懸掛時(shí),應(yīng)先凍結(jié)等高線層,避免等高線的參與。如何有效地處理等高線懸掛問題還有待程序的更加完善。
3)AutoCAD 2007的數(shù)學(xué)精度問題。在2007版的CAD中其默認(rèn)顯示精度為0.000 1個(gè)單位,而運(yùn)算精度可以達(dá)到0.000 000 01個(gè)單位,所以在程序運(yùn)算時(shí)應(yīng)注意計(jì)算結(jié)果的四舍五入,以保證數(shù)據(jù)精度的統(tǒng)一。
[1] Watson K, Nagel C. Beginning Visual C#2005[M].北京:清華大學(xué)出版社,2006
[2] 楊德麟.大比例尺數(shù)字測圖的原理方法與應(yīng)用[M].北京:清華大學(xué)出版社,1998
[3] 陳國良.并行算法的設(shè)計(jì)與分析[M].北京:高等教育出版社,2003
[4] 武漢大學(xué)測繪學(xué)院測量平差組.誤差理論與測量平差基礎(chǔ)[M].武漢:武漢大學(xué)出版社,2003
[5] (美)Coombs F. Visual Basic編程實(shí)用大全[M].北京:中國水利水電出版社,2005
[6] 李士雨.工程數(shù)學(xué)基礎(chǔ)——數(shù)據(jù)處理與數(shù)值計(jì)算[M].北京:化學(xué)工業(yè)出版社,2005
[7] 高春燕,李俊民,劉彬彬.Visual Basic程序開發(fā)范例寶典[M].北京:人民郵電出版社,2006
Research and Realization of Processing Suspension Automatically Technology in AutoCAD
byCHEN Qingping
This article introduced the technology of searching and processing suspension line automatically in the production process of DLG by the secondary development of CAD (via VB.NET& ObjectARX),and analyzed the weakness at the same time.
suspension point,suspension line,tolerance,secondary development of CAD
P208
B
1672-4623(2014)02-0067-03
10.11709/j.issn.1672-4623.2014.02.024
2012-11-19。
陳清平,高級工程師,研究方向?yàn)楹娇諗z影測量。