特定のオブジェクトだけにセット
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';}
if(colorMode == 'RGB'){colorMode = '0';}
if(colorMode == 'HSV'){colorMode = '1';}
if(colorMode == 'HSL'){colorMode = '2';}
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が定義されていることを前提としています。
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