2011-10-19 36 views
3

我必須在畫布上繪製圖形(由scrollviewer綁定)。內存中大約有左右的節點。我需要擔心畫布上的最佳繪圖嗎?

爲了使事情變得簡單,我從可以呈現自身的usercontrol派生出節點。

但我沒有創建節點之間的線。我知道從MSDN那,

在表面上,幾何類和Shape類非常相似。兩者都用於渲染2D圖形,並且都具有相似的具體類,例如,EllipseGeometry和Ellipse。但是,這兩組課程之間有重要的區別。首先,幾何類缺少Shape類的一些功能,例如繪製自身的能力。

因爲可以有很多更多的節點,系統可能會呈現緩慢的事情。因此,爲了提高性能,我覺得最好的選擇是幾何(自定義渲染)。

我的問題:

  1. 我應該去與外形或幾何形狀繪製線?

  2. 我應該僅渲染ScrollViewer中的當前視口區加快顯示(在這種情況下,我將不得不節點從控制轉變爲幾何對象),或者我應該只是遍歷所有的節點並在它們之間畫線?

  3. 我應該在內存中渲染位圖,然後翻轉它嗎?這聽起來更像是一般應用程序編程的遊戲編程! :D

  4. 不是WPF會自動處理呈現內容和更好的性能嗎?

回答

2

的幾點思考...

從你的話題,我得到的是你不想節點重繪自己是可以讓他們更慢的能力。相反,您想要決定何時以及要繪製哪個節點。我對麼?

那麼看起來對我來說還好吧,但是Canvas從來沒有虛擬化。我建議通過codeplex網站並下載WPFToolkit源代碼。在DataVisualization命名空間下,您有幾個圖表控件(即使ScatterredChart與您的節點之間沒有繪製線條相似)和它們的源代碼。觀察他們做了什麼。他們如何提高圖形工具的性能。

我還碰到過這個關於如何實施Scrollable Virtualized Canvas的文章。可能可以幫助您在畫布上快速渲染節點。

個人...

1]幾何形狀很輕便,我喜歡它們。

2] Visual HitTesting可以幫助您瞭解項目是否位於渲染區域下方,即在滾動視圖的範圍內。否則,將其隱藏起來,以免它自己吸引。 「隱藏」而不是「摺疊」,因爲更好的滾動功能可以正常工作。

3]我記得我的同事甚至使用水平方向的虛擬化堆疊面板,以便它呈現節點和單元視圖,即特定於X軸上的一個點的區域,以便這樣的重複區域自動地配合在一起以產生一個單一的圖形。

奇妙的是,imlemntation是!

一切順利,並保持我們在這方面的進展。

+0

感謝您指出虛擬化。讓我試試看,並會在幾天內報告結果。 – Nayan

+0

我嘗試了虛擬化畫布示例和輕量級解決方案的代碼組合。感謝您給予正確的方向! – Nayan

+1

我的榮幸。如果您有任何疑問,請回復。 –

相關問題