マウスの動作に対する処理は、2つのフィードバック関数によってサポートされています。Patch Editor.jslサンプルスクリプトでは、これらの関数を使って、点をドラッグ&ドロップする例を示しています。そのスクリプトの一部、マウス動作に対するコールバック関数について、以下に説明します。スクリプトを実行するには、JMPの「Sample Scripts」フォルダの「Scene3D」フォルダにある「PatchEditor.jsl」を開きます。
topClick2d = Function( {x, y, m, k},
dragfunc( x, boxhigh - y, m, 1, 2 );
1;
);
frontClick2d = Function( {x, y, m, k},
dragfunc( x, boxhigh - y, m, 1, 3 );
1;
);
rightClick2d = Function( {x, y, m, k},
dragfunc( x, boxhigh - y, m, 2, 3 );
1;
);
Click3d = Function( {x, y, m, k, hitlist},
If( m == 1,
If( N Items( hitlist ) > 0,
CurrentPoint = hitlist[1][3], /* リスト内の最初の行列が最も近接している。行列の3番目の要素はID */
CurrentPoint = 0
);
makePatch();
);
0; /* 0を戻すと、最初のマウスの押下時だけ処理。ドラッグ中も処理する場合は1を戻すようにする(その場合、マウスを放すと処理が終了。天体球は表示されない)。*/
);
/* 3つのClick2d関数から共通して呼び出される関数 */
dragfunc = function( { x, y, m, ix, iy}, /* ixとiyは、座標を含む行列において、X、Y、およびZの列を示すためのインデックス */
If( CurrentPoint > 0,
points[CurrentPoint, ix] = (x / boxwide) * (orthoright - ortholeft) + ortholeft;
points[CurrentPoint, iy] = (y / boxhigh) * (orthotop - orthobottom) + orthobottom;
makepatch();
)
);
•
|
XとYはマウスの座標です。
|
•
|
Mは、マウスとボタンの状態を示します。M=0は、マウスが放されていることを表します。M=1は、ボタンが押されたことを表します。M=2は、ボタンが押されたままマウスが移動していることを表します。M=3は、ボタンが放されたことを表します。
|
•
|
[znear, zfar, id1, id2, id3, ...]
znearは、オブジェクトの近い頂点までの、カメラからのZ方向の距離、zfarは、オブジェクトの遠い頂点までの、カメラからのZ方向の距離です。行列は、znearとzfarの中間ポイントを基準にして近い方から遠い方へと並べ替えられます。リスト内のidは、表示リストに格納したプッシュ名(pushname)、ロード名(loadname)、およびポップ名(popname)の値です。