C# 如何更改ILNumerics打印标记类型?

C# 如何更改ILNumerics打印标记类型?,c#,ilnumerics,C#,Ilnumerics,我在3D场景中创建了一组随机生成的点,在运行时,我希望将点标记的类型更改为三角形,如图所示: 可能吗?我怎样才能做到这一点?我还需要改变一些点的颜色 场景初始化代码如下: ILArray<float> points = ILMath.tosingle(ILMath.randn(3, 1000)); var scene = new ILScene { new ILPlotCube(twoDMode: false) { new ILPoints

我在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
        }
    }
};
ILArray points=ILMath.tosingle(ILMath.randn(31000));
var scene=新场景
{
新ILPlotCube(twoDMode:false)
{
新点
{
位置=点,
颜色=空,
尺寸=2
}
}
};
标记(
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(); 
    }
}; 
ilPanel1.Scene.MouseClick+=(\u s,\u a)=>{
如果(_a.DirectionUp)返回;
var lp=ilPanel1.Scene.First();
如果(lp!=null){
if(lp.Marker.Style==MarkerStyle.TriangleDown){
lp.Marker.Style=MarkerStyle.Rectangle;
lp.Marker.Fill.Color=颜色.白色;
}否则{
lp.Marker.Style=MarkerStyle.TriangleDown;
lp.Marker.Fill.Color=Color.Red;
}
lp.Configure();
ilPanel1.Refresh();
}
}; 

好的,我想你的问题现在清楚了。不幸的是,我没有在ILNumerics中使用绘图,因此我无法进一步帮助您。希望其他人会这样做-祝你好运!