李 磊,王 勝,薛俊杰
(淮安水利勘測設(shè)計(jì)研究院有限公司,江蘇 淮安 223001)
劃界工作既是依法保護(hù)水利工程的重要措施,亦是加強(qiáng)水利工程管理的基礎(chǔ)性工作,有利于推進(jìn)建立歸屬清晰、責(zé)權(quán)明確、監(jiān)管有效的河湖資源管理體系,有利于實(shí)現(xiàn)工程管理的制度化和規(guī)范化,有利于實(shí)現(xiàn)國土空間集約、高效、可持續(xù)利用,有利于建立統(tǒng)一銜接、功能互補(bǔ)、相互協(xié)調(diào)、多規(guī)合一的空間規(guī)劃體系。
僅以淮安市城市水利工程管理處河道和水利工程管理范圍劃定項(xiàng)目為例,需要完成蘇北灌溉總渠(4.5公里)、淮河入海水道(11.45公里)、里運(yùn)河(17.35公里)、大運(yùn)河(15.3公里)、廢黃河(10.1公里)的劃界工作。管理范圍線以界樁(牌)形式在實(shí)地落實(shí),間距在200 m左右,最大不超過250 m。
完成實(shí)地埋設(shè)以及數(shù)據(jù)采集,必須對(duì)其進(jìn)行整理以便達(dá)到上傳格式要求,具體要求參照《通知》(蘇水管〔2015〕40號(hào)),即文字與范圍線垂直;字頭指向河流(湖泊)外側(cè)等。如果依賴手工進(jìn)行逐條添加,那么工作量將很龐大,而且極易出錯(cuò),這就亟需一種自動(dòng)、高效的作業(yè)方法。
2006版本起,Autodesk公司已為AutoCAD留有.net等應(yīng)用程序應(yīng)用接口API(Application Programming Interface,API)。開發(fā)接口是完全面向?qū)ο蟮?,方便易用[1-2]。微軟公司為.net量身訂做的C#語言有程序易讀等優(yōu)勢(shì)[3-4],是較為理想的CAD開發(fā)工具[5],故而提出一種基于C#與CAD二次開發(fā)的自動(dòng)生成方法。
軟件自動(dòng)化的實(shí)質(zhì)是將傳統(tǒng)的繁瑣操作流程進(jìn)行數(shù)學(xué)邏輯拆解,然后將其進(jìn)行表達(dá)式(軟件代碼)表達(dá),再輔以邏輯銜接,這樣就可以實(shí)現(xiàn)流程的程序化替代。
相關(guān)規(guī)定中要求,上傳數(shù)據(jù)庫的CAD成果的樁位編號(hào)樣式如圖1所示。
圖1 樁位編號(hào)要求樣式
即:a樁位編號(hào)文字垂直于管理范圍線;b樁位編號(hào)字頭指向河流外側(cè);
CAD二次開發(fā)時(shí),添加的文字默認(rèn)是水平的,那么只要確定出其旋轉(zhuǎn)角即可。假設(shè)當(dāng)前樁位點(diǎn)是O,管理范圍線上在其前后有相鄰的節(jié)點(diǎn)O1和O2,則有矢量OO1、OO2與真北方向所夾角度(方位角[6])α1、α2,如圖 2 所示。
圖2 旋轉(zhuǎn)角計(jì)算示意圖
圖中,虛線位置就是最終的樁位編號(hào)位置。
最后取α1、α2兩者的平均值就可以得到樁位編號(hào)自身的方位角α,那么問題就轉(zhuǎn)換為如何求取矢量的方位角值,其計(jì)算公式如下:
其中,β是矢量與水平線所夾的銳角。以方位角α為基礎(chǔ)即可滿足要求a;滿足要求b必須輔以外部手段。
以上是河流在左側(cè)的處理方式,如果其在右側(cè),那么兩方位角差值為180°。但是因?yàn)閮蓜t都有管理范圍線,故而河流位置無法從圖形(管理范圍線,無指向?qū)傩裕┲兄苯荧@取,需要借助外部手段。
相關(guān)規(guī)定中要求,對(duì)上傳數(shù)據(jù)庫的CAD成果的樁間距樣式有以下2個(gè)要求:
a樁間距文字位于相鄰樁位點(diǎn)中間;
b樁間距文字沿著管理范圍線放置;
相鄰樁位點(diǎn)構(gòu)成矢量,那么可利用與β、α相關(guān)的公式計(jì)算旋轉(zhuǎn)角,即可滿足要求a;要使文字位于樁位點(diǎn)中間(要求b),必須考慮文字高度、單個(gè)(不同高度)字符占據(jù)寬度,再輔以平移手段才能保證文字近似在中間。最終要求樣式如圖3所示。
圖3 樁間距要去樣式
軟件設(shè)計(jì)就是在數(shù)學(xué)邏輯的基礎(chǔ)上將其實(shí)現(xiàn),數(shù)學(xué)邏輯部分是其中的核心部分,然后再輔以其它邏輯運(yùn)行,才能確保軟件可以真正運(yùn)行。
按照線性布局的方式進(jìn)行軟件整體設(shè)計(jì),最終設(shè)計(jì)流程如圖4所示。
圖4 軟件設(shè)計(jì)流程
由圖可以看出,已經(jīng)有效的降低了人工參與度,真正參與的只有“外部手段”。
CAD二次開發(fā)[7]的實(shí)質(zhì)就是利用預(yù)留的API實(shí)現(xiàn)與CAD的互操作?;贑#的開發(fā)方式通常是添加以下2個(gè)引用:
其中,2006與16.0是不同CAD版本的區(qū)別。
(1)線識(shí)別
CAD文件包含很多圖元對(duì)象,軟件要的是多段線,AcadDocument.Utility.GetEntity()方法能夠獲取多段線實(shí)體,即:
AcadDoc.Utility.GetEntity(out object,out point,“拾取目標(biāo)多段線”);
其中,返回值ResultObj是拾取的對(duì)象。
CAD中多段線的相關(guān)屬性值都可以從object中獲取得到,而用到的只是節(jié)點(diǎn)坐標(biāo),即:
這樣即可進(jìn)行方位角以及點(diǎn)間距計(jì)算。
(2)文字添加
CAD中添加圖元功能同樣可以利用接口程序完成繪制,樁編號(hào)以及間距信息都是“文字”圖元,主要通過AcadModelSpace接口來實(shí)現(xiàn)。
通過ModelSpace 的AddText()方法可以實(shí)現(xiàn)文字添加功能,即:
其中,str是文字內(nèi)容,point是文字插入點(diǎn),height是文字高度。
另外,直接添加的文字是水平的,故而需要對(duì)其進(jìn)行旋轉(zhuǎn)操作,即:
textObj.Rotate(rotateBase,rotateAngle);
其中,textObj是添加的文本對(duì)象;rotateBase是旋轉(zhuǎn)指定基點(diǎn);rotateAngle是旋轉(zhuǎn)指定角度。
線識(shí)別和文字添加是本軟件的基礎(chǔ),劃界工作中資料自動(dòng)化整理的需求功能和這兩者大同小異,故而本軟件設(shè)計(jì)對(duì)其它相關(guān)的自動(dòng)化數(shù)據(jù)處理具有重要的參考意義。
因?yàn)橛?jì)算機(jī)無法從圖上直接判讀出河道(湖泊)位于范圍線(無指向?qū)傩裕┑淖髠?cè)還是右側(cè),所以必須依賴人工判讀。
軟件運(yùn)行后會(huì)彈出選擇對(duì)話框,具體如圖5所示;返回文件后依照指向選擇是或否,具體如圖6(a)(b)所示。這是整個(gè)流程中唯一一處需要人工參與的部分,但是圖上判讀較為直觀,并不會(huì)給軟件的可靠性帶來負(fù)面影響。
圖5 人工判讀方式
圖6 人工判斷依據(jù)
軟件的目標(biāo)是簡化實(shí)際工作流程,那么設(shè)計(jì)UI[8-9]的目標(biāo)是(線性)清晰明了,如圖7所示。
圖7 UI設(shè)計(jì)圖
完成“讀取樁坐標(biāo)”和“識(shí)別樁邊線”操作后,“繪制樁編號(hào)”和“繪制樁間距”將會(huì)解除被鎖定狀態(tài)。
簡單說明項(xiàng)目情況,同時(shí)利用質(zhì)量統(tǒng)計(jì)數(shù)據(jù)對(duì)軟件的性能進(jìn)行評(píng)價(jià)。
淮安市河道和水利工程管理范圍劃定項(xiàng)目中,廢黃河(10.1 km)采用1:10000地形圖作為工作底圖,修測河道管理范圍線附近的地物,重點(diǎn)修測地形圖中外堤腳線。入庫的右側(cè)管理范圍線如圖8所示,共計(jì)埋設(shè)125根界樁。
圖8 案例管理范圍線
按技術(shù)設(shè)計(jì)書要求,1:1000圖上管理界線圖上用紅色實(shí)線繪制河道管理范圍線,線寬為0.6 mm;管理范圍界線樁點(diǎn)用紅色圓圈表示,直徑1.5 mm。而且點(diǎn)位坐標(biāo)文件已按CASS數(shù)據(jù)文件格式編輯完成。
界樁編號(hào)的最終要求[10]格式如下:垂直管理范圍線標(biāo)注,不要壓蓋河床,顏色為紅色,等線體字高2.0 mm。
打開本文開發(fā)的軟件界面,讀取準(zhǔn)備好的文件和識(shí)別樁邊線,設(shè)置好樁號(hào)命名規(guī)則、號(hào)中數(shù)字位數(shù)、樁號(hào)名稱字高后即可點(diǎn)擊相應(yīng)命令按鈕實(shí)現(xiàn)樁編號(hào)和間距添加。自動(dòng)添加的質(zhì)量統(tǒng)計(jì)結(jié)果如表1所示。
列出4處不合格且具有明顯特征的圖形截圖,如圖9所示。由圖可知,針對(duì)樁編號(hào),不合格現(xiàn)象(互相壓蓋)通常出現(xiàn)在管理范圍線不平滑、不規(guī)則變化的樁位點(diǎn)上;針對(duì)樁間距,線的不平滑、不規(guī)則變化會(huì)導(dǎo)致不合格現(xiàn)象(與管理范圍線有壓蓋),樁位間距離較近也會(huì)導(dǎo)致不合格現(xiàn)象(互相壓蓋)。這種不合格的樁編號(hào)或者間距注記就需要內(nèi)業(yè)人員手動(dòng)二次修改。
表1 質(zhì)量統(tǒng)計(jì)表
但是,由表1所知,雖然存在這一定的不合格現(xiàn)象,但是兩者的合格率都在90%以上,樁間距的標(biāo)注合格率甚至達(dá)到了95%,高合格率確保了軟件的可靠性。
圖9 不合格處截圖
另外,標(biāo)注河道右側(cè)的125個(gè)樁編號(hào)以及123個(gè)樁間距的用時(shí)累計(jì)不超過6 s。相比人工添加,作業(yè)效率得到極大的提升,進(jìn)而體現(xiàn)出軟件的自動(dòng)化生成方法的優(yōu)勢(shì)。
河湖劃界入庫資料的整理在整體上是屬于重復(fù)性工作,從提高工作效率角度出發(fā),提出基于C#和CAD二次開發(fā)的文字標(biāo)注自動(dòng)添加方法,并且以此進(jìn)行軟件設(shè)計(jì),最后在淮安廢黃河劃界工作中進(jìn)行應(yīng)用。
(1)軟件的可靠性較高,體現(xiàn)在標(biāo)注的高合格率上(樁編號(hào)為91.2%、樁間距為95.1%)。
(2)軟件的自動(dòng)化及高效性,體現(xiàn)在標(biāo)注的用時(shí)上(樁編號(hào)與樁間距的用時(shí)皆小于3 s)。
質(zhì)量統(tǒng)計(jì)表中的“合格率”和“用時(shí)”指標(biāo)驗(yàn)證了樁編號(hào)與樁間距的自動(dòng)化添加方法的可行性,而且為河湖劃界資料入庫提供整理了一種新的解決思路,具有較高的參考價(jià)值。
參考文獻(xiàn):
[1]秦洪現(xiàn),崔惠嵐,孫劍等.Autodesk 系列產(chǎn)品開發(fā)培訓(xùn)教程[M].北京:化學(xué)工業(yè)出版社,2007.
[2]付崇江,余代俊,王麗麗.基于.NET平臺(tái)的CAD地形圖注記的自動(dòng)調(diào)整[J].工程勘察,2010,38(03):84-90.
[3]王永輝,胡青泥,李紅彩.AutoCAD二次開發(fā)方法的研究[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2007(03):94-96+100.
[4]黃箐,馬德山,項(xiàng)鏈.基于.NET實(shí)現(xiàn)多語言互操作性[J].西北民族大學(xué)學(xué)報(bào)(自然科學(xué)版),2007(02):38-44.
[5]趙寧,黃地龍,徐莉.基于C#的區(qū)域自動(dòng)填充CAD二次開發(fā) [J].工程勘察,2008(01):58-61.
[6]陳德標(biāo).坐標(biāo)方位角計(jì)算實(shí)用通式[J].測繪通報(bào),2006(02):30-31+69.
[7]李冠億.深入淺出AutoCAD.NET 二次開發(fā)[M].北京:中國建筑工業(yè)出版社,2012.
[8]宗長榮.淺談地下水資料整編軟件的設(shè)計(jì)與應(yīng)用[J].江蘇水利,2009(08):38-39.
[9]朱永軍.EXCEL軟件在流量定線中的運(yùn)用[J].江蘇水利,2007(05):29-30.
[10]樓鋒.江蘇全面啟動(dòng)河湖和水利工程管理范圍劃定工作 [J].江蘇水利,2015(10):6.