うしブログ

うしブログ

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

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

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

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

特定のオブジェクトだけにセット
//特定のオブジェクトに対して、動的な色をセットする
function
setDynamicColor(objName, colorMode, rVal, gVal, bVal, aVal){ //フェイルセーフ var exists = ggbApplet.exists(objName); if(!exists){return 'object '+objName+' does not exist.';} if(colorMode != 'RGB' && colorMode != 'HSV' && colorMode != 'HSL'){return 'invalid colorMode: colorMode must be \'RGB\' or \'HSV\' or \'HSL\'.';} if(!aVal){aVal = '1';} //colorModeを変換 if(colorMode == 'RGB'){colorMode = '0';} if(colorMode == 'HSV'){colorMode = '1';} if(colorMode == 'HSL'){colorMode = '2';} //XMLを編集 var objType = ggbApplet.getObjectType(objName); var xmlText = '<element type=\"'+objType+'\" label=\"'+objName+'\"><objColor r=\"0\" g=\"0\" b=\"0\" alpha=\"1\" dynamicr=\"'+rVal+'\" dynamicg=\"'+gVal+'\" dynamicb=\"'+bVal+'\" dynamica=\"'+aVal+'\" colorSpace=\"'+colorMode+'\"/></element>'; ggbApplet.evalXML(xmlText); }

※上記関数がとる引数の型は、すべてstringです。rVal, gVal, bValは、RGBの場合はr値,g値,b値を表します。HSLの場合はh値,s値,l値を、HSVの場合はh値,s値,v値を表します。aValは、アルファ値(透明度)です。

//オブジェクトAのダイナミックカラーを、RGBで指定

setDynamicColor('A', 'RGB', '153/255', '102/255', '255/255', '1');

//poly1のダイナミックカラーを、HSLで指定

setDynamicColor('poly1', 'HSL', '0', '1', '0.5', '1');

//数値オブジェクトhue, sat, light, alpを用いて指定

setDynamicColor('poly1', 'HSL', 'hue', 'sat', 'light', 'alp');

 

オブジェクトの頭文字およびタイプを指定して一括セット

※上記setDynamicColor、および、こちらの記事のgetExistingObjIndexが定義されていることを前提としています。

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

//名前の頭文字がPolyである全ての多角形オブジェクトに対し、それに続く通し番号αに応じて異なるダイナミックカラーを、HSLで指定

setSequenceDynamicColor('Poly', 'polygon', 'HSL', 'hue', 'satu', 'Max[0.2,Mod[light*(α/len),1]]', '1', 'α');

 なお、上記スクリプトは、下記の作品で使用しているものです。

usidesu.hatenablog.com