[英]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分,也可以尝试一下。 只需改用ILLinePlot
并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();
}
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.