0

マウス イベントに問題があります。

イベント MouseEnter および MouseLeave に登録しました。マウス カーソルの例がパネルのちょうど中央にある場合、MouseEnter および MouseLeave イベントがトリガーされます。なぜですか?

私の目標は、マウスカーソルが3D PlotCube上にあるときとそうでないときから始めて、感知することです。

コード:

scene.MouseEnter += ILSurface_MouseEnter;
scene.MouseLeave += ILSurface_MouseLeave;
4

1 に答える 1

0

プロット キューブは、その ScreenRect 四角形の領域全体のイベントをキャッチします。標準設定では、この四角形は (0,0,1,1) に設定され、パネル全体を埋めます。したがって、パネルに複数のプロット キューブ/カメラがない限り、マウスは基本的に常にプロット キューブ上にあります。

それにもかかわらず、MouseEnter および MouseLeave イベントの機能を示すために、代わりにプロット キューブ内のプロットに作用する例を投稿します。マウスがプロットに入ると、フォームのタイトル バーに「On Plot」と表示されます。「Off Plot」は、マウスがプロットから離れるとすぐに書き込まれます。

新しいパネルから始めて、ここに示すように ILNumerics をセットアップします: http://ilnumerics.net/visualization-api-quick-start-guide.html

ILPanel を form1 にドラッグし、それをダブルクリックして、自動生成された ilPanel1_Load イベント ハンドラーのコードに切り替えます。ハンドラーを次のコードに置き換えます。

private void ilPanel1_Load(object sender, EventArgs e) {

    var surfPlot = new ILSurface(ILMath.tosingle(ILSpecialData.sincf(50, 40))) {
        Colormap = Colormaps.Prism
    }; 

    var pc = ilPanel1.Scene.Add(new ILPlotCube(twoDMode: false) {
        surfPlot
    });

    surfPlot.MouseEnter += (_s, _a) => {
        if (!_a.DirectionUp)
            Text = "On Plot - Target: " + _a.Target.ToString();
    };
    surfPlot.MouseLeave += (_s, _a) => {
        if (!_a.DirectionUp)
            Text = "Off Plot - Target: " + _a.Target.ToString();
    };
}

これにより、次の図のような結果が生成されます。 ILNumerics でのマウスの入力とマウスの離脱のハドリング

マウスがプロット上にあるかどうかにかかわらず、フォームのタイトルが反映されるようになりました。これは、プロットの回転/形状に関係なく機能することに注意してください。ILNumerics でのマウス イベント処理の完全なドキュメントは、 http ://ilnumerics.net/mouse-events.html にあります。

于 2013-10-21T14:59:48.493 に答える