function getSliderInfo(name) {
var xmlStr = ggbApplet.getXML(name);
var parser = new DOMParser();
var dom = parser.parseFromString(xmlStr, "text/xml");
var sld = dom.getElementsByTagName('slider');
if (sld.length == 0) {
return undefined;
}
var output = new Object();
for (var k = 0; k < sld[0].attributes.length; k++) {
var nameText = sld[0].attributes[k].name;
var val = sld[0].attributes[k].value;
output[nameText] = eval(val);
}
var startX = output.x;
var startY = output.y;
if (output.absoluteScreenLocation) {
startX = ggbApplet.getValue('x(Corner[1])+(x(Corner[3])-x(Corner[1]))*((' + startX + '+1)/(x(Corner[5])+2))');
startY = ggbApplet.getValue('y(Corner[3])-(y(Corner[3])-y(Corner[1]))*((' + startY + '+1)/(y(Corner[5])+2))');
}
var endX = output.x + (output.horizontal ? output.width : 0);
var endY = output.y + (output.horizontal ? 0 : output.width);
if (output.absoluteScreenLocation) {
endX = ggbApplet.getValue(startX + '+(x(Corner[3])-x(Corner[1]))*((' + (output.horizontal ? output.width : 0) + ')/(x(Corner[5])+2))');
endY = ggbApplet.getValue(startY + '+(y(Corner[3])-y(Corner[1]))*((' + (output.horizontal ? 0 : output.width) + ')/(y(Corner[5])+2))');
}
output['startX'] = startX;
output['startY'] = startY;
output['endX'] = endX;
output['endY'] = endY;
return output;
}
※ローカル版GeoGebraでは機能しません。
戻り値のプロパティ名は、以下のとおりである。startX, startY, endX, endY以外は、スライダーのxml情報中、sliderタグの属性から取得している。
↑スライダーを画面固定した場合。
↑スライダーを画面固定しない場合。absoluteScreenLocationプロパティが定義されていない点が、画面固定した場合との違いである。
使用例
スライダーa、自由な点オブジェクトStart, Goal, 自由な数値オブジェクト(最小値・最大値の限定無し)min_a, max_aを作成する。
また、点Pを、以下の定義で作成する。
P = Dilate(Goal, (a - min_a) / (max_a - min_a), Start)
グローバル欄に、上記関数を記述する。
aのOn Update ハンドラに、以下を記述する。
var info = getSliderInfo('a');
ggbApplet.evalCommand('SetValue[Start,(' + info.startX + ',' + info.startY + ')]');
ggbApplet.evalCommand('SetValue[Goal,(' + info.endX + ',' + info.endY + ')]');
ggbApplet.evalCommand('SetValue[min_a,' + info.min + ']');
ggbApplet.evalCommand('SetValue[max_a,' + info.max + ']');
すると、aを更新すると、Start, Goalがaのスライダーの端点に移動し、min_a, max_aには、それぞれaのスライダーの最小値・最大値が記録される。
点Pは、aのスライダーの点(ドラッグできる部分)に揃う。
サンプル
スライダー情報を取得 – GeoGebra