1

ILNumerics Math Library を使用して 2D プロットを作成しています。データを表示するには、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;
    }

ありがとう、

ティム

4

1 に答える 1

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もっと便利に感じるかもしれません。

于 2013-11-11T09:22:40.890 に答える