2014-11-23 50 views
2

我已經設置了一個隨機生成的三維場景中的點,並在運行時我想改變點標記的類型,例如,三角形,如圖片:如何更改ILNumerics繪圖標記類型?

enter image description here

這可能嗎?我怎樣才能做到這一點?另外我需要改變一些點的顏色。

場景初始化下面的代碼:

ILArray<float> points = ILMath.tosingle(ILMath.randn(3, 1000)); 
var scene = new ILScene 
{ 
    new ILPlotCube(twoDMode: false) 
    { 
     new ILPoints 
     { 
      Positions = points, 
      Color = null, 
      Size = 2 
     } 
    } 
}; 
+0

OK,我覺得你的問題很清楚了。不幸的是,我沒有在ILNumerics中使用陰謀,所以我無法進一步幫助你。希望別人會 - 祝你好運! – BartoszKP 2014-11-23 17:48:23

回答

0

標記(ILMarker)和 '分'(ILPoints)是非常不同的野獸。標記的配置靈活得多,主要看起來更好,渲染成本也更高。它們通常由邊框(線條形狀)和填充區域(三角形形狀)組成,並帶有許多預定義的外觀。

另一方面,ILPoints被設計爲快速和容易。在不降低繪圖性能的情況下,可以輕鬆創建數百萬個點。不要用標記試試這個!但是,這樣的觀點就是:實心圓圈。是它。沒有邊界,沒有不同的形狀。

但是,如果您想試一試 - 即使對於您的問題中的1000分,也可以這樣做。只需改用ILLinePlot併爲其配置一個標記。您可以將線條顏色設置爲Color.Empty以使標記單獨顯示。

new ILLinePlot(points, lineColor: Color.Empty, markerStyle: MarkerStyle.TriangleDown) 

爲了獲得單個點標記的單獨顏色,您可以將標記(點)分成單獨的一組點。使用上述方案爲每組點創建一個ILLinePlot。

處理'動態'問題的部分也很簡單:您可以在運行時更改標記的類型以及任何其他屬性。這裏是一個通過點擊任何地方現場紅色toogles三角標記和白色矩形標記之間的標記一個簡單的例子:

ilPanel1.Scene.MouseClick += (_s, _a) => { 
    if (_a.DirectionUp) return; 
    var lp = ilPanel1.Scene.First<ILLinePlot>(); 
    if (lp != null) { 
     if (lp.Marker.Style == MarkerStyle.TriangleDown) { 
      lp.Marker.Style = MarkerStyle.Rectangle; 
      lp.Marker.Fill.Color = Color.White; 
     } else { 
      lp.Marker.Style = MarkerStyle.TriangleDown; 
      lp.Marker.Fill.Color = Color.Red; 
     } 
     lp.Configure(); 
     ilPanel1.Refresh(); 
    } 
};