劉旭,劉陽,李進強,袁清濤
(1.正元地理信息有限責任公司,北京 101300; 2.日照市城市建設投資集團有限公司,山東 日照 276800)
基于.NET在AutoCAD中實現管點符號的快速繪制
劉旭1*,劉陽2,李進強1,袁清濤1
(1.正元地理信息有限責任公司,北京 101300; 2.日照市城市建設投資集團有限公司,山東 日照 276800)
在地下管線信息化建設中,管線數據的處理以及更新在管線的管理和運營起到重要的作用,目前這項工作通常是在AutoCAD中二次開發相應的數據處理功能來操作,本文作者結合實際經驗,在AutoCAD中采用.NET開發了管線數據處理與更新系統,其中對于管線編輯模塊中的添加管點這一功能的設計、實現做了詳細介紹。
.Net;AutoCAD;二次開發;地下管線;管點
地下管線是保障城市正常運行的重要基礎設施,隨著城市功能的調整和城市建設的迅速發展,地下管線日益錯綜復雜,管線信息更新頻繁,其管理難度也在不斷增大。近年來,國家對城市管線的重視力度逐步加深,2013年9月出臺的《國務院關于加強城市基礎設施建設的意見》[1]強調應“堅持先地下、后地上”、“在普查的基礎上,整合城市管網信息資源,消除市政地下管網安全隱患。建立城市基礎設施電子檔案,實現設市城市數字城管平臺全覆蓋。提升城市管理標準化、信息化、精細化水平,提升數字城管系統,推進城市管理向服務群眾生活轉變,促進城市防災減災綜合能力和節能減排功能提升”。
在這樣的政策環境下,各地市都開展地下管線普查工作,并建立相應的管線信息管理系統來提高地下管線管理水平。在管線信息管理系統中一般包括管線數據處理CAD系統、管線數據管理系統(CS)、管線綜合應用系統(BS)以及管線數據共享交換系統。而綜合管線信息化的基礎問題和核心問題就是管線數據問題,要把綜合管線數據的建庫工作放到重中之重的位置,目前這項工作目前大多數在AutoCAD中開發相應的功能來處理。
作者結合工作實際經驗,采用.NET技術,在AutoCAD 2010版本中開發了管線數據處理與更新系統。其功能包括數據錄入(可將外業采集的管線數據手圖、手簿等直接錄入,并提供與其他格式數據的轉換接口)、管線成圖(通過查看生成的管線圖,檢查管線連接關系、管線點及屬性是否正確)、管線編輯(實現管點、管線的快速添加、修改屬性)、檢查處理(規范性檢查,空間屬性合理性檢查,屬性關系合理性檢查等,檢查結果可在數據庫和圖形上定位顯示并直接修改)、查詢統計(條件統計、圖幅數統計及結果輸出)、成果輸出(可生成各種樣式的綜合管線圖、專業管線圖等圖件,成果表輸出,成果數據庫輸出)等功能。系統功能菜單及主界面如圖1所示。

圖1 系統菜單主界面
2.1 添加管點
在此系統中,管線編輯是一個重要的模塊,用戶可以實現添加管點、添加管線、管線信息修改、刪除管線等相應操作。在管線編輯模塊添加管點功能,用戶可以在CAD中指定位置添加指定類別的管線點,錄入相關信息后保存到mdb數據庫中,實現“可見即可得”的建庫思路。
2.2 設計思路
地下管線一般分為給水、排水、電信、熱力、工業[2]等大類,每個大類還分為小類,如排水管線分為雨水、污水、雨污合流,給水管線分為飲用水和非飲用水小類。在實現添加管點功能時我們按照以下流程,操作流程如圖2所示。

圖2 繪制管點流程
(1)在添加管點時可以快速選擇對應大類下小類指定的管線點,可以通過管線大類、管線小類選擇對應的管線點添加。
(2)選擇對應類別的管線后可以顯示相應CAD的圖塊符號,能夠直觀地顯示給用戶。
(3)選定管點符號后,需要在CAD窗口中指定位置放置,采用JIG(即時繪圖)技術來實現插入圖塊的交互操作。
(4)插入管點圖塊符號后,自動填寫管點類別、坐標等信息,彈窗屬性窗體面板錄入相關屬性。
(5)錄入屬性后添加一條管點信息到mdb數據庫相應的管點表中,同時將管點物探編號等信息寫入管點XDATA擴展數據信息中,實現管點符號與數據庫中記錄的關聯。
2.3 具體實現
(1)符號面板
在管點符號繪制中,為了方便使用,我們采用CAD提供的面板形式,首先讀取系統配置表信息獲取管線所有的大類分類,將大類下所有小類的管點符號放在同一面板中,最后將所有的管類添加到一個面板組中。對于每一大類分類通過讀取配置獲取對應的小類信息,以下拉列表的形式顯示所有小類,選定管線大類、小類后通過讀取配置符號信息,加載對應的圖塊縮略圖顯示。這樣用戶可以快速的選擇管線大類、小類來添加指定的管點符號。
//顯示繪制管點面板
PaletteSet psAddPoint=new Autodesk.AutoCAD.Windows.PaletteSet("管點繪制");
//讀取配置管類信息,每一管類定義一個面板容器
for (int i=0;i < pipeClassInfoList.Count;i++)
{
UcAddPoint myuc=new UcAddPoint(symbolInfoList,pipeInfoList,pipeClassInfoList[i].PIPECLASS);
psAddPoint.Add(pipeClassInfoList[i].CLASSNAME,myuc);
}
//顯示面板屬性
psAddPoint.Size=new System.Drawing.Size(200,600);
psAddPoint.Dock=Autodesk.AutoCAD.Windows.DockSides.Left;
psAddPoint.Visible=true;
加載面板后顯示效果如圖3所示,點擊面板右側選項卡實現管線大類的切換,選擇管線小類的下拉列表,可以實現管點小類的符號切換。

圖3 管點添加面板
(2)添加管點
在CAD中我們采用圖塊符號來表示管點,為了實現快速插入管點,我們將所有的圖塊定義存放在一個CAD模板文件中(dwt文件),在系統啟動時自動加載dwt模板文件,這樣我們所有的塊定義在CAD中都已經存在,無需再插入外部文件來定義塊,可顯著提高效率。
當用戶選擇指定的管點符號后,點擊面板相應圖標,根據配置獲取對應的管點塊符號名稱。在CAD中插入管點符號時,為了提高用戶體驗,采用JIG(Just in Time Graphic即時繪制)技術,用戶在鼠標移動的過程中,即可實現管點圖塊的動態預覽,方便用戶現在指定的位置放置,增強用戶交互操作。
//鎖定CAD文檔
using (docCur.LockDocument())
{
//打開事務
using (Transaction ta=db.TransactionManager.StartTransaction())
{
BlockTable bt=(BlockTable)ta.GetObject(db.BlockTableId,OpenMode.ForRead);
blkref=new BlockReference(ptInser,bt[blkName]);
//采用JIG即時顯示技術實現插入圖塊
PromptResult ptres=ed.Drag(this);
if (ptres.Status != PromptStatus.OK)
{
return;
}
}
}
//JIG 更新
protected override bool WorldDraw(Autodesk.AutoCAD.GraphicsInterface.WorldDraw draw)
{
draw.Geometry.Draw(blkref);
return true;
}
//JIG 重采樣
protected override SamplerStatus Sampler(JigPrompts prompts)
{
JigPromptPointOptions ptops=new JigPromptPointOptions(" 請指定塊符號位置");
PromptPointResult ptres=prompts.AcquirePoint(ptops);
Point3d ptTemp=ptres.Value;
if (ptTemp != ptInser)
{
ptInser=ptTemp;
blkref.Position=ptInser;
return SamplerStatus.OK;
}
else
{
return SamplerStatus.NoChange;
}
}
(3)錄入屬性
在CAD窗口指定管點圖塊位置后,彈窗屬性錄入窗體如圖4所示,可自動填寫管線大類、小類、坐標X,坐標Y等信息,用戶錄入其他相關信息保存后插入到mdb數據庫中,為了實現CAD圖形中管點符號與數據庫中記錄的關聯,將管點物探點號寫入圖塊XDATA擴展數據中。
using (Transaction ta=db.TransactionManager.StartTransaction())
{
RegAppTable rat=(RegAppTable)ta.GetObject(db.RegAppTableId,OpenMode.ForRead);
if (rat.Has(regAppName) == false)
{
rat.UpgradeOpen();
RegAppTableRecord ratr=new RegAppTableRecord();
ratr.Name=regAppName;
rat.Add(ratr);
ta.AddNewlyCreatedDBObject(ratr,true);
ta.Commit();
}
}

圖4 屬性錄入窗體
2.4 管線繪制
在地下管線數據成圖顯示中,分為管點和管線兩類要素,在AutoCAD中一般管點采用圖塊要素進行顯示,管線采用直線要素進行顯示。對于不同管類的管線,在管線繪制時需要采用不同的圖層、顏色、線型、線寬。對于CAD中管線的成圖,可以預先定制線型文件,AutoCAD啟動時預先加載到模板文件中,讀取管線符號的配置信息可以快速設置不同的圖層、顏色、線型以及線寬。
AutoCAD二次開發的方式很多,采用.NET開發方式已成為一種趨勢。本文著重研究了在AutoCAD中采用.NET實現管點添加功能,作者采用面板技術,圖形化窗體顯示相應的管點樣式,可快速、方便、靈活的供用戶使用,在各管線CAD相關系統中有推廣價值。
[1] 國務院. 關于加強城市基礎設施建設的意見[R]. 北京:2013.
[2] CH/T 1037-2015. 管線信息系統建設技術規范[S].
[3] 余承飛,方勇. AutoCAD 2000二次開發技術 [M]. 北京:人民郵電出版社,1999.
[4] 梁雪春,宋德明. AutoCAD 2002二次開發技術指南[M]. 北京:清華大學出版社,2001.
[5] 李冠憶. 深入淺出AutoCAD.NET二次開發[M]. 北京:中國建筑工業出版社,2012.
[6] 劉旭,陶為翔. AutoCAD.NET的Jig技術在管線扯旗標注中的應用[J]. 測繪與空間地理信息,2015(7):196~198.
[7] 楊小兵. 利用ObjectARX開發小型地下管線信息管理系統[J]. 城市勘測,2010(4):74-76.
[8] 侯金波,潘喜峰,李奕潔等. 管線探測內業圖庫一體化成圖的應用研究[J]. 城市勘測,2015(2):74~77.
Fast Drawing of Pipe Point Based on .NET in AutoCAD
Liu Xu1,Liu Yang2,Li Jinqiang1,Yuan Qingtao1
(1.Zhengyuan Geomatics Co.,Ltd,Beijing 101300,China; 2.Rizhao City Construction Investment Group Co.,Ltd,Rizhao 276800,China)
In the informatization construction of underground pipeline,pipeline data handling,and update the management and operation play an important role in pipeline,the work is now in general secondary development in AutoCAD to operate the corresponding data processing function,this paper combined with practical experience,the author used in AutoCAD .NET development pipeline data processing and update the system,including to add tube point in the line edit module the function design,implementation,made a detailed introduction.
.Net;AutoCAD;secondary development;underground pipeline;pipepoint
1672-8262(2017)01-115-04
P209
B
2016—08—15 作者簡介:劉旭(1985—),男,助理工程師,主要從事智慧管網方向的研發工作。