一、概述
交互式繪圖,我的理解就是用鼠標去進行圖形繪制。
在GIS軟件開發與設計中,經常會用到交互式繪圖,例如ARCGIS等軟件都有非常復雜的人機交互功能。交互式繪圖在GIS可以說占據比較重要的位置。
相關閱讀:GIS中要素的捕捉以及C++實現 http://www.linuxidc.com/Linux/2013-01/77537.htm
二、圖元的面向對象建模
交互式繪圖中,其實都可以將繪圖的元素看做基本圖元,如文字、點、線段、折線、多邊形、橢圓、圓以及弧段等。為了對這些圖元進行表達表達,可以用面向對象的思想來進行建模。首先,可以用一個抽象基類代表所有的圖元類,抽象基類中有Draw方法,而上述的具體圖元類都繼承自這個抽象基類,並且必須要實現Draw方法以完成自身的繪制。其詳細的類圖如下:
三、交互式繪圖工具構造
假如系統開發采用MFC單文檔視圖結構,地圖一般都是顯示在視圖中,對地圖操作就轉變為對視圖中的操作。如果,針對每一種地圖操作在視圖類中都寫一個消息響應函數,那麼隨著應用程序的不斷膨脹,視圖類的代碼頁會不斷膨脹,最終造成代碼臃腫,不好管理,增大開發與維護人員的負擔。針對存在的這種情況,可以將地圖操作抽象為一個工具,在這裡,我將其稱為MapTool,該類可以捕獲到視圖類的消息響應,而要實現某一個具體操作,就只要繼承這個類,實現響應的消息響應函數就可以實現對地圖的操作,這樣界面和邏輯之間的耦合性就會大大降低,也降低了維護的成本。比如說,在地圖浏覽中,我們常常用到拉框放大,平移等功能;在標繪功能中,有繪制矩形、折線、多邊形、圓等圖形。將這些一個個的操作封裝在一個單獨的類中,降低模塊之間的耦合性。這部分的設計可以采用橋接模式或者命令模式來實現。
四、交互式繪圖舉例
講到了繪圖工具的構造以及圖元的建模,為什麼還沒有講如何繪制的,別急,下面就開始講。
1、矩形和圓形
為什麼將這兩個圖像放在一塊講,主要是因為這兩者的繪圖方法都是一樣的,首先,左鍵按下,然後是移動鼠標產生動態圖形,最後是鼠標彈起完成圖形的繪制。關於動態矩形繪制可以見我的另一篇博文 http://www.linuxidc.com/Linux/2013-08/88842.htm 。
下圖是繪制的具體實例。
下面是放大的圖。
上述這兩幅圖是在遙感影像上面繪制的,並且隨著拉框放大之後,圖形還顯示在屏幕上,這時因為我在繪制完矩形之後將其加入到臨時繪制層中,所以隨著地圖的操作還停留在視圖中。當然,你還可以進行圖元選取等操作。
2、多邊形
關於多邊形的動態繪制就是鼠標左鍵確定第一個點,然後鼠標在移動過程中繪制動態多邊形,當再次按下鼠標左鍵後確定第二個點,然後以此類推。最後完成多邊形的繪制。
五、後記
今天就寫這麼多,關於交互式繪圖的內容還有很多,本文也只是起到拋磚引玉的作用,歡迎大家一起來討論GIS軟件設計中的各個方面。