ネズミ捕りと2変量フレームボックス<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />二変量プロットを吐き出す分析があります。 ネズミ捕りで追加機能を追加したとき、ポイントを選択できず、その理由がわかりません。 これを防ぐ方法、あるいは少なくともこの機能を追加する方法はありますか?
どうすればこれを修正できますか?
dt = Open( "$ SAMPLE_DATA / Big Class.jmp");
nw =新しいウィンドウ( "MouseTrap Test"、Vlb = vlistbox());
vlb << Append(biv = dt << 2変量(Y(:身長)、X(:体重));
rbiv = biv << report;
rbiv [frame box(1)] <<グラフィックススクリプトを追加する(Mousetrap(print( "test")、print( "test test")));
biv2 = dt << 2変量(Y(:身長)、X(:体重));)
再:ネズミ捕りと二変量フレームボックスありがとう、ありがとう、ありがとう。 これは私を夢中にさせています。
そして、私はあなたが "\!n"を意味すると確信しています。 あなたのC#/ C ++が表示しています。
再:ネズミ捕りと二変量フレームボックスそれで、#4。 このスクリプトは、上のグラフに添付されているグラフィックスクリプトの中で "MouseTrap"という名前の関数を使用しています。 上のグラフでマウスを使ってドラッグすると、MouseTrap関数はマウスの動きをキャプチャし、「輪ゴムの長方形」内の点の通常の選択を妨げます。 選択動作をエミュレートするために、MouseTrapは状態変数 "scripton"と "startx ... othery"を管理します。 msharp 四角形に追加されたすべての追加ポイントで実行に時間がかかりすぎるスクリプトを実行するかどうかを知るためのscriptonを作成しました。 MouseTrapはscriptonを使用して、ボタンが押されたばかりかどうかを追跡します。 もしそうなら、X、Yはstartx、startyで、そうでなければotherx、otheryでキャプチャされます。 また、初めてではない場合、MouseTrapはwhere文でstartx ... otheryを使用して、テーブル内の行を実際に選択します。 SelectWhereコマンドのMinおよびMax関数は、選択長方形を上から下、下から上、そして左と右の両方に描画するためのものです。
MakeRowStateHandlerもおそらくMouseTrapと同じ評価を実行するはずです。ここでは変更された行を表示するだけです。 このコードには、他にもいくつかprintステートメントがあります。何が起こっているのかを知るためにログを見てください。
//Startdt = Open( "$SAMPLE_DATA/Big Class.jmp" );script = "\[New Window("Test", Text Box("Hello"));]\";scripton = 1; // this is a better way to deal with row state changes (and not needed for the rest of the example) rs = dt<startx = .;starty = .;otherx = .;othery = .;nw = New Window( "MouseTrap Test", Vlb = V List Box() );vlb << Append( biv = dt << Bivariate( Y( :height ), X( :weight ) ); rbiv = biv << report; rbiv[frame box( 1 )] << Add Graphics Script( If( !Is Missing( startx ), Line( {startx, starty}, {otherx, starty}, {otherx, othery}, {startx, othery}, {startx, starty} ) ); Mousetrap( If( scripton, write("down\n"); startx = x; starty = y; , write("move\n"); otherx = x; othery = y; dt << selectwhere( Min( starty, othery ) < :height < Max( starty, othery ) & Min( startx, otherx ) < :weight < Max( startx, otherx ) ); ); scripton = 0; , write("up\n"); scripton = 1; startx = .; // toggle off Eval( Parse( script ) ); ); ); biv2 = dt << Bivariate( Y( :height ), X( :weight ) ););再:ネズミ捕りと二変量フレームボックスこれらはすべてORステートメントです。 ANDステートメントが必要です。 ポイントを選択してスクリプトを実行する方法あなたがリストアップしたものすべてがポイントを選択するか、またはスクリプトを実行します。
もう少し情報がありますが、ポイントが選択されるたびに実行されるスクリプトがあります。 複数のポイントをドラッグして選択したときに、ユーザーが遅いと、スクリプトは複数回実行されます。 ユーザーがマウスを離すまでスクリプトが実行されないようにします。 下記の例をご覧ください。
//開始
dt = Open( "$ SAMPLE_DATA / Big Class.jmp");
script = "\ [新しいウィンドウ("テスト "、テキストボックス("こんにちは));] \ ";
scripton = 1;
//選択したスクリプト
dt << New Column( "選択したスクリプト"、
数値、
式(
(選択(行状態())&scripton == 1の場合、
評価(解析(スクリプト))
)
)
;
列(dt、"選択したスクリプト")<<非表示。
// FIX?!?!?
nw =新しいウィンドウ( "MouseTrap Test"、Vlb = vlistbox());
vlb << Append(biv = dt << 2変量(Y(:身長)、X(:体重));
rbiv = biv << report;
rbiv [frame box(1)] <<グラフィックススクリプトの追加(Mousetrap(scripton = 0、scripton = 1));
biv2 = dt << 2変量(Y(:身長)、X(:体重));
)
再:ネズミ捕りと二変量フレームボックス3つの方法
1)現在のスクリプトでブラシツール(Bキーを押す)を使用します(ブラシサイズを変更するには、ブラシをかけながらaltキーを押します)。 ブラシツールがアクティブなときは、ネズミ捕りは機能しません。
2)描画リストの前の方にグラフィックスクリプトを配置するようにスクリプトを修正します。
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );nw = new Window("MouseTrap Test", Vlb = vlistbox());vlb << Append(biv = dt << Bivariate( Y( :height ), X( :weight ) );rbiv = biv << report;rbiv[frame box(1)] << Add Graphics Script( 1, Mousetrap(print("test"), print("test test")));biv2 = dt << Bivariate( Y( :height ), X( :weight ) );)論理は次のとおりです。最初に描画するスクリプトは、後続のグラフィックススクリプトによって塗りつぶされます。 そのため、マウスヒットテストは逆の順序で実行されます。最後に描画された場合は、見やすくなり、マウスでヒットしやすくなります。 さて、あなたがポイントをクリックするならば、マーカーsegはマウスを取ります(そして、あなたは選択長方形を引き出すことができます)。 ポイントをクリックすると、ネズミ捕りスクリプトがクリックを受けます。 ポイントをクリックすると、長方形を選択することはできません。 rightClick-> Customizeを使って試したり、スクリプトを上下に動かしたりすることができます。

(私はスクリプトを保存して、上記の「1」の実行方法を覗いてみました。)
3)ネズミ捕りの代わりにハンドルを使う。 マウスの動きをすべて捉えるのに本当にネズミ捕りが必要でない限り。 ハンドルは四角形のハンドルのクリックのみをキャプチャします。
4)本当に必要であれば、ネズミ捕りで選択ロジックを再実装することができると思います。 1〜3の方がずっと良いようです。