繁体   English   中英

如何更改ILNumerics绘图标记类型?

[英]How to change ILNumerics plot marker type?

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

在此处输入图片说明

可能吗? 我该如何实现? 我还需要更改某些点的颜色。

场景初始化代码如下:

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

标记( ILMarker )和“点”( ILPoints )是非常不同的野兽。 标记的可配置性更加灵活,大部分看上去更好,渲染成本也更高。 它们通常由边界(线形)和填充区域(三角形)组成,并带有许多预定义的外观。

另一方面,ILPoints被设计为快速简便。 可以轻松创建数百万个点而不会降低绘图性能。 不要尝试使用标记器! 但是这些要点就是它们:实心圆。 是它。 没有边界,没有不同的形状。

但是,如果您想尝试一下-即使您的问题得到1000分,也可以尝试一下。 只需改用ILLinePlotILLinePlot配置标记。 您可以将线条颜色设置为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(); 
    }
}; 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM