DIY自己的GIS程式(1) 起航

2022-01-21 22:38:41 字數 1756 閱讀 2280

乙個gis系統最重要的功能是繪製圖形和關聯屬性,這裡研究二維點線面的繪製過程:

對於乙個繪圖系統設計,圖形的繪製涉及兩個重要的方面。

a 介面初始化的時候(全部重新整理)

b 窗體大小變化的時候(全部重新整理)

c 編輯圖形的過程中,增加、刪除、修改(移**形和移動節點)。這裡需要思考是整個畫布重新整理還是區域性重新整理。如果畫布沒有發生變化就應該保持畫布上已有的東西,通過快取的方式,區域性重新整理變化的(新繪製、修改)的部分。否則會出現整個畫布閃爍現象。

所謂區域性重新整理就是只對變化的部分重新整理。這裡的一種解決方法是,獲取快取受影響範圍,在此範圍重新繪製圖形。

方法一:dc.drawimage(m_staticimage, r, r, graphicsunit.pixel);

方法二: 

1

int x = math.min((int)m_start_x,(int

)e.x);

2int y = math.min((int)m_start_y,(int

)e.y);

3int w = math.abs((int)(e.x-m_start_x));

4int h = math.abs((int)(e.y-m_start_y));

56 rectangle clip_rect = new rectangle(x-6,y-6,w+12,h+12);7

8switch

(m_draw_mode)921

break;22

23case

drawingmode.rectangle:

2429

break;30

31case

drawingmode.polygon:

3248

graph.drawlines(pen,points); 49}

50}51break

;52 }

view code

這裡可以展示一下arcgis中的,左圖為移動,右圖為編輯節點。可以看出藍色部分為快取的,右圖更加明顯,由藍色部分移動到下方後又往回移動,下方的為快取的顯示。同樣,移動畫筆,放大,縮小都是採用快取來繪製,提公升使用者體驗的效果。

d 選中圖形後。(區域性重新整理)

e 畫布移動的過程中。(整體重新整理,最好能夠介面保持技術,區域性重新整理)

mousedown

mousemove

mouseup  

doubleclick

點            

繪製點。完成單點繪製

線 繪製點

n=1n>1

區域性重新整理,繪製新增的線段

完成繪製

面 繪點

n=1繪點

n=2繪線

n>2繪製面

區域性重新整理

完成繪製

矩形繪製點

n=1區域性重新整理

繪製矩形

繪製矩形

圓弧n=1

n=2n=3 完成繪製

圓中點-半徑

n=1n=2 完成繪製

三點n=1

n=2n=3完成繪製

區域性重新整理

移動畫布

繪製中移動

移**形

c 自己製作類似winrar的打包程式(1)

利用了以下外掛程式 icsharpcode.sharpziplib libzplay using system using system.collections.generic using system.linq using system.text using system.io using sys...

腦洞大開!你來DIY自己的專屬VR裝置

vr並不是遙不可及,通過diy你也能做出自己專屬的vr裝置。說到vr裝置,大家可能會覺得是個很複雜,技術性很強,非技術宅只能圍觀的東西。其實,不是所有的vr裝置都是如此,我們現在也可以像做手工製品一樣自行diy。正如make magazine的高階編輯caleb kraft所說,vr頭顯曾經是乙個非...

Bash玩轉指令碼1之自己的指令碼安裝程式

前言 還是理所當然的前言,我一直想找一套管理指令碼的 框架 能讓自己雜亂的指令碼有點規整,無奈眼界尚淺,未能找到。因此萌生自己寫一點優化指令碼的工具來,新手可學習,高手請指正。今天先寫乙個指令碼的安裝器,目的在於寫完並新指令碼之後能夠在shell的任何位置都能夠便捷使用。config.ini主要用於...