2013-11-10 2 views
1

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

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

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

Спасибо,

Tim

ответ

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 более удобным.

+0

Именно то, что я искал! Большое спасибо! – Tim

Смежные вопросы