李 鳴,倪智振
(南昌大學環境與化學工程學院,南昌 330031)
機車交路圖反映機務部門機車運用的組織方式,機車牽引的運輸能力及各鐵路局機務部門所擔當的運輸任務與相關管轄范圍[1]。機車交路圖是繪制機車周轉圖的重要依據,鐵道部頒布的《鐵路機車周轉圖編制規則》規定機車交路圖由特定標準圖形符號按照國家統一標準組合而成[2],當前機務應用人員大多數采用一些通用商業繪圖CAD軟件繪制方式,往往因其商業通用性而失去了對機車交路繪制領域的專業針對性,存在學習門檻高,自動化程度不夠,設計針對性不強等問題,極大阻礙了機務部門信息化水平的發展[3]。極個別信息化配套設施不完善的機務組甚至仍采用傳統人工手繪的方式[4]。然而某些復雜的交路單位通常含有多達上百個車站,機務折返點,數十個機務、乘務交路及大量的輔助數據和頻繁的修改操作[5]。機車交路圖繪制工作異常繁重,傳統繪圖方式已不能滿足需要。2002年武漢鐵路局工程師趙友銳、周智勇運用C++BUILDER語言開發了基于Win98操作系統環境下的《機車交路圖輔助設計系統》[6],該系統的普及是機務信息化水平建設的一次重大革新,時隔十多年,計算機軟硬件技術迅速發展,該系統在操作環境,運行效率和功能需求方面漸顯不足。
本系統采用Visual Studio 2010 MFC類庫以面向對象的方式定義各邏輯類,doc/view類多文檔組織形式,系統界面菜單采用Microsoft word 07版的Ribbon控制條形式,繪圖操作調用Win 7 GDI函數完成。
根據當代需求分析和GUI軟件設計思路,參照《鐵路機車周轉圖編制規則》,定義以下設計要求。
(1)站段要求
提供全部機務段及車站類等站段圖形的鼠標一鍵繪制功能。站段圖形可鼠標拖放移動,坐標定點移動和圖形放縮;站段屬性、名稱可修改可刪除可放縮,適合多尺寸多標準的設計要求,并保證與之相聯系的線路、交路、標注等輔助性數據的修改一致性[7]。
(2)線路要求
提供電力、內燃、動車單線復線的繪制功能。線路屬性可修改可刪除,并保證與之相聯系的交路,標注等輔助性數據的修改一致性。
(3)交路要求
提供各種單肩回、半循環、全循環機車交路,中間換乘及機車乘務交路等繪制功能,包括3種外段折返(立折、調休、駐班)形式[7-8]。交路圖形顏色、線寬可變,交路屬性可修改可刪除,交路內的站段可修改可刪除,自動計算交路長度,并保證與之相聯系的標注等輔助性數據修改一致性。
(4)標注要求
提供2種形式標注。引線標注和平行標注。標注屬性和位置可修改可刪除,并保證與之相聯系的各元素的修改一致性。
(5)輔助要求
機車交路圖擁有自動存儲功能,且繪制視圖可放縮,可以矢量圖片格式存儲,可與對應EXCEL表格進行智能數據的相互轉存;有繪圖幫助,操作提示系統,提供多尺寸紙張的打印功能。同時考慮到極個別大型交路圖,應具備網格尺寸線,批量選擇性顯示,修改,刪除等群操作,以及一些對齊平行,圖例一鍵繪制等常用輔助繪制工具。
(1)開發工具的先進性。本系統開發平臺Visual Studio 2010,是繼VC++6.0之后又一里程碑級的進步[9],MFC是微軟公司為方便用戶開發桌面應用程序而以C++類的形式封裝了幾乎所有的win API函數庫,這為用戶進行二次開發提供非常快捷而高效的設計途徑[10]。
(2)用戶界面的友好性。本軟件界面上創新地采用了微軟Ribbon控制條形式菜單,在文檔形式上采用doc/view類多文檔組織形式[11],在視覺上給予了用戶類似Microsoft office 的操作舒適感和親切感,同時,在一些繪圖的操作設計上,在完成功能的前提下盡可能多地借鑒通用CAD繪圖軟件的操作步驟和用戶習慣性的操作思維。
(3)運行平臺的時代性。本軟件支持微軟最新推出的WIN7操作系統,同時兼容WIN XP,支持各類基于該系統的軟硬件,整合了自動化應用程序提交和交叉程序數據的透明性[12],保證了該軟件設計壽命的長久性,根據目前行業發展態勢,初步預計該系統在未來20年之內仍能適應運行環境。
根據設計要求進行如下框架邏輯設計。本軟件功能定義為四大模塊:圖形模塊,工具模塊,交換模塊,設置模塊。限于篇幅,本文僅做扼要描述。

圖1 圖形模塊關系
主模塊為圖形模塊,實現交路圖的繪制和修改功能,繪圖函數的設計充分利用了win7系統內部的圖形繪制GDI函數,繪制和修改操作的本質均為添加和修改底層存儲的相應數據,最后圖形重繪函數則依據底層數據庫提供的各交路數據依次繪出所有圖形。

圖2 工具模塊
該模塊提供一些方便用戶集群操作的優化工具,直線化工具包括垂直對齊,水平對齊和斜線對齊,其算法思路為運行至該段程序時,計算起始選中站段和終端選中站段的斜率,根據該斜率計算執行后中間選中站段的各坐標值,存儲并覆蓋原坐標值,最后執行圖形重繪;批量操作根據客戶繪圖需要提供線路,交路,標注全刪除功能,其算法思路為順序遍歷目標數據庫并判斷是否符合用戶目的成員,若符合則刪除。并自動進行數據一致性連鎖操作;區域操作本質為鼠標的框選操作,區域移動,區域復制,區域刪除,其設計思路為遍歷站段數據庫,記錄站段坐標處于鼠標框選范圍內的站段。然后根據對應操作進行站段坐標覆蓋存儲,并自動進行數據一致性連鎖操作。

圖3 交換模塊關系
磁盤交換和圖片導出可借助VS2010 MFC設計的GUI內部自帶的程序進行直接的調用。Excel的導出其設計思路可認為是MFC軟件運行時內存中存在的站段,線路,交路,標注等數據類通過MFC與Excel的接口程序而一一對應地表達在excel中,反之。用戶只需直接修改excel里的數據,通過該excel導入功能便可直接修改龐大的機車交路圖數據,這樣極大地簡化了用戶在面對錯綜復雜的大型機車交路圖時查找難,修改難的操作問題。
該模塊提供交路圖整體框架的一些設置及一些顯示屬性,為滿足機車交路圖多尺寸多標準選擇的需求,提供了一些數據庫的接口,并直接映射到GUI界面上,用戶可直接通過界面諸如輸入名稱大小,視圖選擇性顯示等操作間接修改底層數據庫。
標準建模語言UML的目標是以面向對象圖的方式來描述軟件系統的模型,分析類圖產生于分析階段,由系統分析師繪制,主要用來描述靜態結構系統中各模塊中類之間的關系,包括類或者類與接口的繼承關系,類之間的依賴、聚合等關系。它還描述每一個類的詳細信息,包括變量和方法。為簡潔描述,本文只簡單列出幾個與核心類的定義。
圖4所列為五大圖形元素邏輯類的定義:站段類(Station)滿足站段要求,提供站段繪制,存儲和構造函數;線路類(Line)滿足線路要求,提供線路繪制,存儲和構造函數;交路類(Crossroad)滿足交路要求,提供交路繪制,存儲和構造函數;標注類(Label)滿足標注要求,提供標志繪制,存儲和構造函數。框架類(Frame)定義了邊框,網格,圖例等繪圖函數,他們的基類均為MFC中的CObject類。

圖4 交路圖圖形元素類定義
圖5中應用程序類(CJLTApp)為本系統優先級最高類,配合交路圖初始信息類(Myopts)完成系統的初始化任務,屏幕logo,防盜版設計等優先級較高的子功能。視窗類(CJLTView)和文檔類(CJLTDoc)是整個核心系統中的核心,前者提供了GUI視圖界面所有的控件輸入輸出接口和圖形的顯示。后者承擔了所有圖形數據的計算,搜索和存儲及保證數據的一致性要求。

圖5 MFC生成類定義
圖6為系統定義了子窗口接口類,為用戶提供了繪圖數據輸入窗口界面,他們由MFC基類CPropsheet派生。

圖6 窗口接口類定義

圖7 核心類類圖
圖7反映了幾個大類之間的依賴,關聯關系。圖形元素和EXCEL實際為多個類,因其性質相同如圖用一個類示意。EXCEL類實現系統數據導入導出功能,本系統繪圖的本質為不斷調用CJLTView類中的圖形重繪函數(Redraw),從CJLTDoc類中提取圖形內容數據,輸入到對應五大圖形元素類中實現圖形的具體繪制。因此,本系統編程實現的實質為CJLTView類和CJLTDoc類成員函數對五大圖形元素類和一些輔助類的統籌調用。

圖8 A4尺寸XPS格式機車交路圖全景示意
圖8為本系統繪制的武漢鐵路局機車交路圖范例,圖形精確,滿足機務繪圖需要。該軟件調用win API GDI函數繪制圖形,所繪交路圖為微軟XPS格式矢量圖,通過多個對象組合生成,對其中的每一個對象的紀錄方式,以數學函數來實現,如圖9所示對畫面進行大倍數縮放后,其顯示效果仍然相同,縮放不失真。圖10為該系統ribbon控制條形式的GUI界面,類似微軟word07版本界面,友好簡潔,符合通用操作習慣。

圖9 交路圖放大5倍

圖10 系統GUI
機車交路圖輔助設計系統結構復雜,編程量大,設計歷時半年。得益于當前先進的開發工具(vs2010 MFC)和運行環境(win7),采用面向對象語言C++編制系統程序,使得該系統具有體積小,功能全,操作簡便,運行速度快等優點,交路圖的繪制過程充分考慮了繪圖標準及繪制人的操作習慣,該軟件系統能夠出色的繪制,修改并打印出各種尺寸不失真的機車交路圖,滿足機務部門繪圖需要。我們有理由相信,該系統的成功普及將會把鐵道機務信息化建設水平提高到一個新的水平。
[1] 中華人民共和國鐵道部.GB50090—2006 鐵路線路設計規范[S].北京:中國計劃出版社,2006.
[2] 周南華.《鐵路機務設備設計規范》(TB10004—98)簡介[J].鐵道標準設計,2000(10):27-29.
[3] 葉利華.機車交路系統的設計與實現[D].西安:西安交通大學,2005.
[4] 秦建成.從神朔鐵路機務設備工藝設計談影響機務段總平面布置的主要因素[J].鐵道標準設計,2009(12):130-134.
[5] 馬國忠,張展杰,吳海濤.長交路下鐵路機車乘務模式研究[J].交通運輸工程與信息學報,2007(4):1-4.
[6] 周智勇.機車交路圖輔助設計系統的研究[J].鐵路計算機應用,2003(S1):123-126.
[7] 賈凡.長交路條件下車流組織方法探討[J].科技廣場,2010(4):253-256.
[8] 薄海青.貨運機車超長交路的嘗試[J].鐵道標準設計,2005(3):93-95.
[9] 王暉.精通Visual C++6.0[M].北京:電子工業出版社.1999: 15-38.
[10] 劉玲,曹建秋,周建麗,王家偉.基于編程切入點的MFC教學方法研究[J]. 西南師范大學學報:自然科學版,2010,35(2):116-119.
[11] 范志先,孫殿柱,李延瑞,孫肖霞.采用MFC開發用戶交互界面的新方法[J].工程圖學學報,2008(4):160-163.
[12] 王井陽,張曉明,阮冬茹,白云飛.在Visual C++中利用MFC類庫訪問數據庫中的長二進制類型數據[J].計算機應用研究,2003(10):119-122.