うしブログ

うしブログ

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

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

(要修復)ToggleButton・RollPolygonWithoutSlipping・貯金時計・直感力トレーニング

「頭文字+通し番号」のオブジェクトに対する一括操作に使えるJavaScript関数まとめ

作成

//str command〔例:'POINTα=(α,0)'〕, str index〔例:'α'〕, int 実行回数
function evalSequenceCommand(command,index,time){
  index = RegExp(index,'g');
  for(var k = 1; k<=time; k++){
    ggbApplet.evalCommand(command.replace(index,k));
  }

現在のオブジェクト作成状況の取得

 //headNameを頭文字にもつ特定のタイプのオブジェクトname1, name3, name4が存在しているならば、配列[1,3,4]を返す。
function getExistingObjIndex(headName,objType){
  var allObjNames = ggbApplet.getAllObjectNames(objType);
  var targets =allObjNames.filter(function(item){
    if(item.indexOf(headName)!=-1) return true;
  });
  targets.map( function(value, index, array){
    array[index] = eval(value.substr(headName.length));
  });
  return targets;
}

削除

 //headNameを頭文字にもつ特定のタイプのオブジェクトを全て削除する。
function deleteExistingObj(headName,objType){
  var targets = getExistingObjIndex(headName,objType);
  for(var k = 0; k < targets.length; k++){
    ggbApplet.deleteObject(headName+targets[k]);
  }
}

スタイル編集

表示非表示

//headNameを頭文字にもつ特定のタイプのオブジェクトのvisibilityを編集する。
function setExistingObjVisible(headName, objType, bool){
  var targets = getExistingObjIndex(headName, objType);
  for(var k = 0; k < targets.length; k++){
    ggbApplet.setVisible(headName+targets[k], bool);
  }
}

固定、選択許可

//headNameを頭文字にもつ特定のタイプのオブジェクトのfixを編集する。
function setExistingObjFixed(headName, objType, fixbool, selectbool){
  var targets = getExistingObjIndex(headName, objType);
  for(var k = 0; k < targets.length; k++){
    ggbApplet.setFixed(headName+targets[k], fixbool, selectbool);
  }
}

レイヤー

//headNameを頭文字にもつ特定のタイプのオブジェクトのint layerを編集する。
function setExistingObjLayer(headName, objType, layer){
  var targets = getExistingObjIndex(headName, objType);
  for(var k = 0; k < targets.length; k++){
    ggbApplet.setLayer(headName+targets[k], layer);
  }
}

動的な色

//indexごとに異なる数式によって、動的な色をセットする
function setSequenceDynamicColor(headName, objType, redScript, greenScript, blueScript, index){
  var targets = getExistingObjIndex(headName,objType);
  index = RegExp(index,'g');
  for(var k = 0; k < targets.length; k++){
    ggbApplet.evalCommand('SetDynamicColor['+headName+''+targets[k]+', '+redScript.replace(index,targets[k])+', '+greenScript.replace(index,targets[k])+', '+blueScript.replace(index,targets[k])+']');
  }
}

こちらも参照

【RGB, HSL, HSV対応】GeoGebraのオブジェクトに動的な色をセットするJavaScript関数 - うしブログ

ラベル

//headNameを頭文字にもつ特定のタイプのオブジェクトのラベルのvisibilityを編集する。
function setExistingLabelVisible(headName, objType, bool){
  var targets = getExistingObjIndex(headName, objType);
  for(var k = 0; k < targets.length; k++){
    ggbApplet.setLabelVisible(headName+targets[k], bool);
  }
}

スクリプト編集

前提として定義すべき関数①

//handlerは、'click'ならonClick、それ以外ならonUpdate
function setGgbScript(objName, handler, script){
  //オブジェクト存在確認
  var isexist = ggbApplet.exists(objName);
  if(isexist){
    var objType = ggbApplet.getObjectType(objName);
    var onwhat = (handler=='click') ? 'val' : 'onUpdate';
    var xmlText = '<element type=\"'+objType+'\" label=\"'+objName+'\"><ggbscript '+onwhat+'=\"'+script+'\"/></element>';
    ggbApplet.evalXML(xmlText);
  }
}

前提として定義すべき関数②

//handlerは、'click'ならonClick、それ以外ならonUpdate
function setJavaScript(objName, handler, script){
  //オブジェクト存在確認
  var isexist = ggbApplet.exists(objName);
  if(isexist){
    var objType = ggbApplet.getObjectType(objName);
    var onwhat = (handler=='click') ? 'val' : 'onUpdate';
    var xmlText = '<element type=\"'+objType+'\" label=\"'+objName+'\"><javascript '+onwhat+'=\"'+script+'\"/></element>';
    ggbApplet.evalXML(xmlText);
  }

ggbスクリプトの編集(一括設定)

//indexごとに異なるスクリプトをセットする
function setSequenceGgbScript(headName, objType, handler, script, index){
  var targets = getExistingObjIndex(headName,objType);
  index = RegExp(index,'g');
  for(var k = 0; k < targets.length; k++){
    setGgbScript(headName+targets[k], handler, script.replace(index,targets[k]));
  }
}

JavaScriptの編集(一括設定)

//indexごとに異なるスクリプトをセットする
function setSequenceJavaScript(headName, objType, handler, script, index){
  var targets = getExistingObjIndex(headName,objType);
  index = RegExp(index,'g');
  for(var k = 0; k < targets.length; k++){
    setJavaScript(headName+targets[k], handler, script.replace(index,targets[k]));
  }
}

※変数script内での各種記号の書き方(xml エンティティ)

 

改行:「&#xa;」

(')シングルクオーテーション:「&apos;」

(")ダブルクオーテーション:「&quot;」

(&)アンパサンド:「&amp;」

(<) 小なり:「&lt;」

(>) 左大なり:「&gt;」