Как отключить обработчики событий мыши по умолчанию в ILNumerics PlotCube?

Я использую математическую библиотеку ILNumerics для создания двухмерных графиков. Для отображения данных я использую класс ILPlotCube. Я хотел бы отключить поведение EventHandler по умолчанию для событий MouseDoubleClick, потому что я хотел бы реализовать свое собственное. Это возможно?

Вот еще контекст:

Обработчик событий ILPlotCube по умолчанию для событий MouseDoubleClick сбрасывает представление до значений по умолчанию. Обычно это работает довольно хорошо, но, похоже, возникает проблема с очень маленькими значениями x и y. Когда я добавляю линейный график с очень маленькими значениями y, пределы графиков автоматически устанавливаются на 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;
    }

Спасибо,

Тим


person Tim    schedule 10.11.2013    source источник


Ответы (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.

person user492238    schedule 11.11.2013
comment
Именно то, что я искал! Большое спасибо! - person Tim; 11.11.2013