?

WinForm 控件的二次開發在管線規劃報批中的應用

2023-02-05 13:57時煜姝
經緯天地 2023年6期
關鍵詞:電子報樹形插件

朱 律,時煜姝,徐 晗

(1.上海市測繪院,上海 200063;2.自然資源部超大城市自然資源時空大數據分析應用重點實驗室,上海 200063)

0 引言

上海市近年來將電子報件納入現行管線工程規劃建設和管理機制,并制定了《上海市管線規劃成果數據標準》、《上海市管線工程建設項目規劃資源數據標準》等管線工程電子報件數據標準。通過對機制流程進行完善、修訂、意見征詢和發布,對電子報件進行標準化和規范化,實現了管線數據從CAD 系統轉換到GIS 系統,并在基于GIS 系統的管線信息化平臺上,實現了對市政管線的統一規劃和管理[1]。

從AutoCAD 2006 開始,AutoCAD 增加了.NET API,相較于Lisp、VBA,更加底層、更加靈活;相較于ObjectARX,開發效率更加提高[2]。上海市測繪院按照上海市管線電子報批數據標準規定的圖層分層、屬性信息、制圖格式等要求,在Visual Studio 平臺上采用C#.NET 語言開發了基于AutoCAD 系統的管線電子報件插件,支持CAD 的運行版本為AutoCAD 2010。

本文介紹了在工程全覆蓋系統管線電子報批插件開發過程中,綜合運用樹形控件、正則表達式、XRecord 擴展屬性等技術實現自定義控件,滿足上海市工程全覆蓋系統對所有市政管線電子報批的相關要求。

1 適應多種管線圖層加載的樹形擴展控件

樹形控件(TreeView)能很好地在WinForm 窗體中顯示信息的分級視圖。插件在樹形控件基礎上進行二次開發,分級加載各類管線不同的CAD 圖層資源并顯示在控件中,從而形象地展示電子報件數據標準對于各類管線圖層的申報要求。當點擊樹形控件中的不同節點時,通過自動判斷節點的類型,可顯示相應的節點中不同圖層的詳細信息。

為方便用戶操作,插件創建了一個派生于樹形控件(TreeView)的樹形控件擴展類(TreeViewEx),在傳統的樹形控件的基礎上擴展了相應功能:

1)在每一個樹形控件元素上都設計一個狀態圖標CheckBox,該狀態圖標與用戶是否選中了該樹形控件元素的結果相匹配;

2)若鼠標點擊的位置位于樹形控件元素的標簽位置,則默認將選中元素下所有的子元素顯示,再次點擊標簽則將所有的子元素隱藏;

3)如果某元素有相關子元素,用戶點擊該元素的CheckBox,則該元素和其子元素均處于Check 狀態;同樣,如果取消該元素的Check 狀態,則其子元素也均轉為unCheck 狀態。

該控件能很好地在Winform 窗體中顯示具體管線圖層信息的分級視圖,樹形擴展控件的實現界面如圖1 所示。

圖1 包含所有市政管線分類的自定義樹形擴展控件

2 基于XReocrd技術的屬性錄入自定義控件

管線電子報件數據標準中按照管線的不同性質、用途、建設形態等,規定了給水管、排水管、雨水調蓄管道、電力管線、燃氣管、通信管線、特種管線、合桿管道、綜合管廊和其他管道等10 大類管線。其中電力管線又細分為電力排管、電力隧道、電力電纜、電力架空線4 類;通信管線細分為通信架空線、通信管道、通信直埋光電纜或直埋管3 小類。每類管線和管線附屬設施的擴展屬性都各不相同。每類管線的屬性數量也很多,如綜合管廊包含入廊種類等四十余個屬性。插件在AutoCAD 的XRecord技術的基礎上,通過對WinForm 控件的二次開發,實現了屬性錄入界面自適應加載各類管線的不同屬性。

XRecord 是AutoCAD 提供的擴展紀錄對象,它與AutoCAD 早期提供的擴展數據(XData)類似,可為用戶提供一種記錄和管理一個圖形單元的附加數據的途徑。與早期的XData 對象相比,XRecord不再有尺寸和秩序的嚴格要求,而且支持了CAD 全部的群代碼。這一改變使利用XRecord 存儲元件的參數和元件之間的關系變得可行。相對于使用XData 對象,使用XRecord 對象的優點是它們不僅可以附加到任何特定實體或表對象,也可以附加到文檔本身,前者被稱為對象擴展詞典,后者被稱為命名對象詞典。此外,XData 對可以存儲在實體或表中的數據的大小有一定的限制,而XRecord 對象對數據存儲沒有任何大小限制。綜上所述,插件使用XRecord 對象擴展辭典和命名對象辭典來實現管線屬性的錄入和批量更新。

2.1 基于XRecord命名對象詞典的公共屬性錄入控件

根據標準,所有管線都包含了項目名稱、項目建設單位、工程階段等公共屬性,插件設計了這些屬性的錄入界面,方便用戶將這些信息以XRecord命名對象詞典方式存儲在CAD 文件根目錄中。

管線電子報件插件實現了只要打開CAD,便能自動加載這些公有屬性,輔助用戶避免對公有屬性的重復錄入,降低人力和時間成本。首先添加屬性信息圖形對象的命名對象詞典,再將自定義好的屬性信息通過ResultBuffer 添加到擴展詞典的擴展記錄中,最后通過擴展詞典的SetAt 方法即可完成對公共屬性的擴展存儲。項目名稱、項目建設單位等公共屬性錄入界面如圖2 所示。

圖2 基于XRecord 命名對象詞典的公共屬性錄入界面

2.2 基于XRecord對象擴展詞典的實體屬性錄入控件

針對數據龐雜、內容豐富的管線屬性,插件將各屬性字段編碼,以指定順序用連接符“$”連接,存入一個DXF 組碼值,不需要占用多個DXF 組碼,再將自定義好的屬性值添加到圖形對象實體屬性信息的ResultBuffer 數據對中,最后將其賦值到選中圖形對象的XRecord 擴展記錄中[3]。通過定義屬性管理文檔,從左往右依次設置屬性代碼、屬性項、圖層類別編碼、控件類別編碼、選項集合,可以管理分門別類的各個管線屬性。然后通過讀取并配置屬性管理文檔,便可以實現在WinForm 控件中自動加載各類管線的不同屬性,便于后續CAD 圖元與GIS屬性數據的相互連接與管理[4]。

以綜合管廊為例,屬性錄入界面如圖3 所示。其中項目名稱、項目建設單位、項目編制單位、批文號、工程階段等公共屬性已經實現了利用XRecord 命名對象詞典提前錄入,打開屬性界面便能自動加載。

圖3 基于XRecord 對象擴展詞典的綜合管廊屬性錄入界面

3 控件內容編輯二次開發

3.1 基于正則表達式的屬性編輯控制

除了規定各類管線屬性的類型、寬度之外,管線電子報件插件對很多屬性內容的錄入格式也做出了相關要求,如管徑必須是“字母+數字”格式,電力電纜根數、通信光纜根數、孔數、回路數、直埋根數等必須為數字,管位距離必須保留一位小數等。為了使用戶在屬性界面錄入的信息符合標準的格式要求,必須對錄入信息進行分析和檢測。

正則表達式可以通過屬性界面的輸入內容與一系列的特殊字符構建的匹配模式進行比較,來判別對象是否符合標準中對錄入信息的格式要求。利用正則表達式能解決一般情況下需寫一個驗證函數才能解決的問題,并且能節省大量的時間,包括編寫代碼的時間和CPU 運算時間。插件利用正則表達式,來匹配符合該模式的所有屬性輸入項,達到了檢測錄入信息有效性的目的[5]。與部分屬性格式要求等效的正則表達式如表1 所示。

表1 部分屬性的格式要求以及匹配的正則表式

插件對部分屬性錄入不符合正則表達式要求的提示界面如圖4 所示。

圖4 基于正則表達式的管線錄入屬性規范性檢查

綜上所述,在C#.NET 的屬性界面中設置與屬性格式要求匹配的正則表達式就能很簡潔地實現用戶的輸入驗證,而傳統的方法往往更加困難和低效。所以在屬性錄入界面中如遇到有關用戶輸入信息驗證的應用時,都應該首先考慮用正則表達式,代替編寫驗證信息的代碼。插件利用正則表達式,大大地提升了開發效率。

3.2 下拉列表控件框(ComboBox)實現多選功能擴展

在管線屬性的錄入過程中,經常會遇到有些屬性項可以多選的情況,如綜合管廊的入廊種類屬性。由于綜合管廊里的入廊管類一般不止一種,所以根據實際情況,很多時候都會在電力管線、給水管線、通信管線等選項中進行多重選擇。因此,下拉列表控件(ComboBox)自帶的單選功能就不能滿足多種屬性錄入的要求,如果使用CheckBox 或者CheckListBox 組件會破壞WinForm 組件程序化加載設計美感和降低效率。

針對上述情況,插件在下拉列表控件(ComboBox)基礎上實現了組件擴展(ComboBoxEx):

1)首先設置DrawMode 屬性為OwnerDrawFixed,這樣才可能讓重寫的方法起作用;

2)重寫OnDropDown 方法,實現下拉框選項的自適應加載,并且將下拉框內容用BringToFront 方法始終顯示在界面最前端;

3)重寫MouseUp 方法,實現按Ctrl 鍵即可完成選項多選的功能;

4)重寫OnKeyUp 和KeyDown 方法,實現多選完成后按回車鍵完成選擇,并將已選內容全部顯示在TextBox 內。下拉列表控件實現多選功能擴展的實現效果如圖5 所示。

圖5 下拉列表控件實現多選功能擴展

4 結語

本文著重介紹了上海市管線電子報件CAD 插件在開發過程中,為實現管線不同圖層加載的可視化分級展示、屬性錄入內容強控、下拉列表控件支持多選等功能,綜合利用正則表達式、XRecord 擴展屬性等技術,在AutoCAD 系統平臺基于WinForm 原生控件自定義二次開發,開發界面豐富、屬性齊全,滿足了管線電子報批數據標準對管線電子報件申報DWG 文件的格式要求。

猜你喜歡
電子報樹形插件
花光卉影
蘋果高光效樹形改造綜合配套技術
自編插件完善App Inventor與樂高機器人通信
獼猴桃樹形培養和修剪技術
休眠季榆葉梅自然開心樹形的整形修剪
基于jQUerY的自定義插件開發
電子報的評價與利用
MapWindowGIS插件機制及應用
基于Revit MEP的插件制作探討
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合