我正在使用ILNumerics Math Library创建一些2D Plots。要显示数据,我使用ILPlotCube类。我想关闭MouseDoubleClick事件的EventHandler的默认行为,因为我想实现自己的。这可能吗?
以下是更多背景信息:
用于MouseDoubleClick事件的ILPlotCube的默认事件处理程序会将视图重置为默认值。通常这很有效,但是x值和y值非常小似乎存在问题。当我添加具有非常小的y值的linePlot时,图的限制自动设置为YMax = 0.525和YMin = -0.525。不幸的是,那不是我想要的。所以,我在添加linePlot之后自己设置了值,并且该图看起来完全是我想要的。太棒了...但是:如果我双击场景,它会再次使用默认值(0.525)。面团!这就是为什么我想关闭或覆盖这种行为。
有什么想法吗?
private void ilPanel1_Load(object sender, EventArgs e)
{
var scene = new ILScene();
//data with very small "y-values"
ILArray<float> line1 = new float[,] {
{0.0f, 1.0f, 2.0f },
{2.042166e-08f, 2.070141e-08f , 2.042166e-08f} };
var linePlot1 = new ILLinePlot(line1.T,
lineColor: Color.Blue,
lineWidth: 3,
markerStyle: MarkerStyle.Dot);
//Create Plot Cube
var plotCube = new ILPlotCube();
plotCube.Add(linePlot1);
//plotCube.Plots.Limits.YMax is now 0.525
//plotCube.Plots.Limits.YMin is now -0.525
//manually set the value
float maxY = 0.0f;
using (ILScope.Enter())
{
var aPos = linePlot1.Line.Positions.Storage["1;:"];
maxY = ILMath.max(aPos).FirstOrDefault();
}
plotCube.Plots.Limits.YMax = maxY;
plotCube.Plots.Limits.YMin = 0.0f;
var plot = scene.Add(plotCube);
ilPanel1.Scene = scene;
}
谢谢,
添
答案 0 :(得分:1)
ILNumerics中的所有节点都提供对常用鼠标处理程序的访问,您可以使用它们来提供自己的逻辑 - 或者只是禁用现有的单个处理程序。在您的情况下,您可以覆盖绘图多维数据集的双击处理程序:
// ....
plotCube.MouseDoubleClick += (_e, _a) => {
_a.Cancel = true;
};
// you may want disable zoom and pan as well?
plot.AllowZoom = false;
plot.AllowPan = false;
// continue with your code here...
ilPanel1.Scene = scene;
ILNumerics中的鼠标处理程序实际上非常灵活和强大。请参阅此处的文档:http://ilnumerics.net/mouse-events.html
@Edit:对于您的情况,ILPlotCube.AutoScaleOnAdd属性也可能是您感兴趣的。它确定一旦将新绘图添加到绘图立方体中,是否要重新计算绘图立方体限制。您可能会发现false
更方便。