![script_screenshot.png]()
Hello,
Again as a newbie scripting learner I'm trying to figure out creating color transition between selected objects in document.
Actually if object number is high it's resulting as image above. But I would like to make transitions sharper so if there is only 5 objects first color and second color should be on first and last object. Now it only starts transition.
I'd kindly like to ask your support to check or fix my script; (I guess it would be also handy script for designers...)
#target illustrator
// Color Transition between Selected Objects
// M.Sensoy
// Currently Not Working Properly...
// Bugs : Preview button not working
// Color transition step should be related with total selected object number.
// May be step factor would be added into dialogue.
var doc = app.activeDocument;
var i = 0;
var msgType = "";
var reversebutton = false;
// check if a document is open in Illustrator.
if( app.documents.length > 0) {
mySelection = app.activeDocument.selection;
var totalcount = mySelection.length;
var found = new Array (mySelection.length);
var defaultColor = 0xff0000; //var color = $.colorPicker(defaultColor);
var color = defaultColor;
// ____________________________________________________________________
// SCRIPT USER INTERFACE PART
var win = new Window("dialog", "Blend Colors");
var pnlScale = win.add("panel");
pnlScale.orientation = "column";
var stepvaluesgroup = win.add("group");
stepvaluesgroup.alignChildren = "top";
var buttongroup = stepvaluesgroup.add("group");
buttongroup.orientation = "row";
var choosecolor1 = buttongroup.add("button", undefined, "Choose First Color"); // CHOOSE COLOR BUTTON 1
var choosecolor2 = buttongroup.add("button", undefined, "Choose Second Color"); // CHOOSE COLOR BUTTON 2
var reversebutton = buttongroup.add("checkbox", undefined, "Reverse Layer Order?"); // REVERSE BUTTON
var previewbutton = buttongroup.add("checkbox", undefined, "Preview"); // PREVIEW BUTTON
previewbutton.addEventListener ("click", function () { previewbutton.value = true; colorchoose(); apply();} )
reversebutton.addEventListener ("click", function () { reversebutton.value = true; Main(doc, mySelection, totalcount);} )
var btnCancel = buttongroup.add("button", undefined, "Cancel"); // CANCEL BUTTON
var btnOk = buttongroup.add("button", undefined, "Ok"); // OK BUTTON
// ____________________________________________________________________
// Choose Color
choosecolor1.onClick = function () { colorchoose1(); }
choosecolor2.onClick = function () { colorchoose2(); }
previewbutton.onClick = function () { apply(); }
reversebutton.onClick = function () { Main(doc, mySelection, totalcount); apply(); }
function colorchoose1() {
color_decimal = $.colorPicker(defaultColor); $.writeln(color_decimal);
hexToRGB = function(hex) { r = hex >> 16; g = hex >> 8 & 0xFF; b = hex & 0xFF; return [r, g, b];};
color_hexadecimal = color_decimal.toString(16); $.writeln(color_hexadecimal);
color1 = hexToRGB(parseInt(color_hexadecimal, 16));$.writeln(color1); return [color1];
}
function colorchoose2() {
color_decimal = $.colorPicker(defaultColor); $.writeln(color_decimal);
hexToRGB = function(hex) { r = hex >> 16; g = hex >> 8 & 0xFF; b = hex & 0xFF; return [r, g, b];};
color_hexadecimal = color_decimal.toString(16); $.writeln(color_hexadecimal);
color2 = hexToRGB(parseInt(color_hexadecimal, 16));$.writeln(color2); return [color2];
}
function apply() {
for ( var i = 0 ; i < mySelection.length ; i++ ) { // Find Difference
newcolor = new RGBColor();
//var red_dif = ( ( color2 [0] - color1 [0] ) / mySelection.length ) / 255; // I tried like this...did not work...
//var green_dif = ( ( color2 [1] - color1 [1] ) / mySelection.length ) /255;
//var blue_dif = ( ( color2 [2] - color1 [2] ) / mySelection.length ) / 255;
//redstep = (red_dif / totalcount) /255;
//greenstep = (green_dif / totalcount) /255 ;
//bluestep = (blue_dif / totalcount) /255;
newcolor.red = color1[0] + (( (i*0.5)*(color2[0]-color1[0]) )/255);
newcolor.green = color1[1]+ (((i*0.5)*(color2[1]-color1[1]) )/255);
newcolor.blue = color1[2]+ (((i*0.5)*(color2[2]-color1[2]) )/255);
mySelection[i].filled = true;
mySelection[i].fillColor = newcolor;
mySelection[i].stroked = false;
}
}
// Reverse Layer Order Function
function Main(curDoc, sel, amountofselectedobjects){ if (amountofselectedobjects){ if(curDoc.activeLayer.locked || !curDoc.activeLayer.visible){ alert("Please select objects on an unlocked and visible layer,\nthen run this script again."); }else{ for (i = amountofselectedobjects-1 ; i >= 0; i--) { sel[i].move(sel[amountofselectedobjects-1], ElementPlacement.PLACEBEFORE); } return; //AND EXIT }}}}
// APPLY // OK BUTTON
previewbutton.onClick = function() { previewbutton.value == true;} // Preview Button
btnOk.onClick = function() { apply(); win.close();} // OK BUTTOn
btnCancel.onClick = function() { win.close(); } // CANCEL BUTTON
if (previewbutton.value == true) {
apply();}win.center(); win.show();