如何更改ILNumerics情节标记类型?

时间:2014-11-23 16:52:27

标签: c# ilnumerics

我在3D场景中有一组随机生成的点,在运行时我想将点标记的类型更改为例如三角形,如图所示:

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
        }
    }
};

1 个答案:

答案 0 :(得分:0)

标记(ILMarker)和'点'(ILPoints)是非常不同的野兽。标记更灵活可配置,大多数看起来更好,渲染成本更高。它们通常由边框(线形)和填充区域(三角形)组成,并带有许多预定义的外观。

另一方面,ILPoints旨在快速简便。人们可以在不降低绘图性能的情况下轻松创建数百万个点。不要用标记尝试这个!但这些点就是它们:圆圈。是它。没有边界,没有不同的形状。

但是,如果您想尝试一下 - 即使是问题中的1000分 - 您也可以这样做。只需使用ILLinePlot代替并为其配置标记即可。您可以将线条颜色设置为Color.Empty以使标记单独显示。

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

为了获得单个点标记的单独颜色,您可以将标记(点)分成单独的点集。使用上述方案为每组点创建ILLinePlot。

您处理“动态”问题的部分也很简单:您可以在运行时更改标记的类型以及任何其他属性。下面是一个简单的示例,通过点击场景中的任意位置来搜索红色三角形标记和白色矩形标记之间的标记:

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(); 
    }
};