うしブログ

うしブログ

趣味で運営する、GeoGebraの専門ブログ。

(作業メモ)StartPoint要検証(2行の場合;テキスト変更時未定義問題)

すべてのオブジェクトにOn Click スクリプトを一括適用する方法

例1

On Click スクリプトの一括設定 - GeoGebra

左上の赤い長方形をクリックしてから、点や三角形をクリックすると、クリックしたオブジェクトが赤くなります。

左上の青い長方形をクリックしてから、点や三角形をクリックすると、クリックしたオブジェクトが青くなります。

すべての点A,B,C,D,E,F,G,HおよびPolygon[F,G,H]について、それぞれのOn Click ハンドラに、SetColor[<オブジェクト>, "Red"]または SetColor[<オブジェクト>, "Blue"]を記述しても良いのですが、 入力作業が煩雑です。

 

例2 

On Click スクリプトの一括設定2 - GeoGebra

点A,B,C,...Gをクリックすると、クリックした点に、緑色の十字が移動します。

点G,H,Iは例外で、クリックしても何も起こりません。

緑色の十字の定義は、{x=a,y=b}です。

点AのOn Click ハンドラに、

SetValue[a,x(A)]

SetValue[b,y(A)]

を記述し、

点BのOn Click ハンドラに、

SetValue[a,x(B)]

SetValue[b,y(B)] 

を記述し、...というように、それぞれの点のハンドラに、逐一スクリプトを記述しても実現できますが、煩雑です。

 

このように、すべてのオブジェクトに、一括してOn Click ハンドラを設定したい場合には、下記のような方法が有効です。

※以下では、具体例として、例2のアプレットの場合の設定方法を紹介します。

On Click ハンドラの一括設定

前提として、以下のオブジェクトを作成しておきます。

 

clickedobjname = "usidesu"

クリックされたオブジェクトの名前を格納するためのテキストオブジェクトです。さしあたり、値は任意です。

 

scriptlist = <テキストのリスト>

実行したいOn Click スクリプトを記述したテキストのリストです。スクリプト内に、クリックしたオブジェクトの名前が出てくる場合は、

"テキスト文字列"+ clickedobjname +"テキスト文字列"

というように記述します。

例2では、以下のように定義します。

scriptlist = {"SetValue[a,x(" + clickedobjname + ")]", "SetValue[b,y(" + clickedobjname + ")]"}

 

exclist = { Name[<オブジェクト名>], Name[<オブジェクト名>], ... }

例外的に、On Click スクリプトを実行したくないオブジェクトがある場合は、ここに記述します。ない場合は、空のリスト{}として作成してください。

例2では、以下のように定義します。

exclist = {Name[H], Name[I], Name[J]}

 

そして、「グローバルJavaスクリプト」に、以下のスクリプトを記述します(ここの記述は、scriptlistやexclistの内容にかかわらず、共通です)。

function ggbOnInit() {
ggbApplet.registerClickListener("runClickScript");
}

function runClickScript(name){
ggbApplet.setTextValue("clickedobjname",name);
ggbApplet.evalCommand("If[¬(clickedobjname∈exclist),Execute[scriptlist]]");
}

f:id:usiblog:20180407003159p:plain

設定は以上です。設定が有効となるのは、アプレットを再起動した後です。

 

関連記事

usidesu.hatenablog.com

 

Version: 6.0.451.0-w (28 March 2018)