天天看點

釋出一個用于WinCE的矢量圖控件

       釋出一個在wince作業系統下,采用.net compact framework 1.0 ( c#)開發的矢量圖控件,我于2007年3月份集中一個月的經曆完成了它。當然,它的前身是2005年12月我寫的第一個矢量圖控件,在後來我在此基礎上改進了很多地方,針對具體應用做了重新設計并集中精力把它完成,由于屬于再次設計,是以它的架構設計和編碼中凝聚了我此前開發中的經驗和積累,它是我當時最滿意的一個子產品,對它的架構和可維護性以及運作性能都感到令我感到非常滿意,可以說代表了我當時的最高水準。當然從今天來看裡面還有一些缺點和經驗不足之處。

       例子代碼我命名為GisCtl,是因為它原本是希望完成GIS的功能,但是實際上距離GIS還有一定的距離和偏差。該子產品的底層算法和全部編碼全部是我獨自設計,這其中涉及了一系列圖形捕捉算法,圖元幾何變換和逆變換,圖層管理,縮略圖,視圖參數緩存環形隊列,檔案格式定義和IO等等。在編寫該子產品中的一些算法時我積累了很厚的演算草稿紙,用到了很多數學和幾何知識,當然也感謝飄渺水雲間BBS上ZOL版一些熱心網友的支援和對我的解答。在編寫這個子產品時,涉及到一些設計模式,資料結構,算法的應用,比如滑鼠在圖上點選選擇對象時,有一系列判别算法。比如圖元和連結對象采用了是類似flyweight模式以節省記憶體(在我的另一篇随筆《圖元幾何變換與flyweight模式》中有講解),比如視圖緩存采用了環形的資料結構(在《環形視圖堆棧》中有講述),比如導航圖采用了觀察者(訂閱)模式。該子產品的使用方法集中在例子裡,這裡就不再叙述了。文檔說明還暫時不能提供。目前該子產品能讀寫我的自定義格式圖形檔案,以及mif格式檔案。由于需求,該控件沒有包裝例如用滑鼠建立,拖曳,變換對象的操作,但可以用代碼來實作這些功能。      

       這個子產品屬于我實際工作的項目的一部分。我希望它能發揮更大的價值,而不僅僅是沉寂。

       該子產品檔案名是LineViewCtl.dll, 命名控件是LineViewLib;該dll位于壓縮包内,項目中也附帶了兩個從實際系統中導出的圖形檔案。

       在模拟器中運作的效果圖:(由于模拟器不支援中文,是以中文沒能正确顯示)

釋出一個用于WinCE的矢量圖控件

          補充我在技術文檔中畫的一副圖,表達了這個控件的内部組織結構:

釋出一個用于WinCE的矢量圖控件

          範例代碼:

繼續閱讀