Уровень моего английского чуть хуже чем "let speak from my heart", поэтому переводить описание не рискнул. А остальные термины проще воспринимаются на английском поскольку это наиболее часто используемая локализация адобовских программ, но в дальнейшем описание уберу или спрячу под кнопку.А чего часть на исконно русском, а часть на загранично буржуйском?
можно сделать опцию выбора языка - либо галочкой, либо через переменную в самом скрипте.Уровень моего английского чуть хуже чем "let speak from my heart", поэтому переводить описание не рискнул. А остальные термины проще воспринимаются на английском поскольку это наиболее часто используемая локализация адобовских программ, но в дальнейшем описание уберу или спрячу под кнопку.
Я так понимаю глобальные свотчи используются для упрощения кода? чтобы не писать его для обводок, групп, градиентов и прочего?
Да, и для упрощения и для ускорения... Одно дело перебирать тысячи объектов с одинаковым цветом (может еще изобретать систему кэширования), другое пройтись по готовым свотчам которые можно оптимизировать и создавать с разными настройками. За счет этого не надо отдельно разбирать градиенты, меши, цвета в эффектах.Я так понимаю глобальные свотчи используются для упрощения кода? чтобы не писать его для обводок, групп, градиентов и прочего?
А как Вы свотчам глобальность задаёте? через скрипт? в Recolor не нашёл.Да, и для упрощения и для ускорения... Одно дело перебирать тысячи объектов с одинаковым цветом (может еще изобретать систему кэширования), другое пройтись по готовым свотчам которые можно оптимизировать и создавать с разными настройками. За счет этого не надо отдельно разбирать градиенты, меши, цвета в эффектах.
Мое знание js примерно на уровне плинтуса, желание на нем писать код еще ниже, поэтому объем кода будет самым минимальным.
в CC 22.1 (2018) это штатная фишка при создании группы. А вот начиная с какой версии это появилось предстоит еще выяснить.А как Вы свотчам глобальность задаёте? через скрипт? в Recolor не нашёл.
в СС 17 этого нет, но легко решаемо так - создаём группу свотчей в Recolor, потом вручную или скриптом(надо уточнить можно ли) присвоить свотчам "global", затем всё выделить и снова зайти в Recolor, он сам перекрасит объекты в цвета только что созданной группы. У меня получилось.в CC 22.1 (2018) это штатная фишка при создании группы. А вот начиная с какой версии это появилось предстоит еще выяснить.
var doc = app.activeDocument;
var sel = doc.selection;
var paths = doc.pathItems;
var arr1 = new Array(); // get selected objects
for ( r = 0; r < paths.length; r++ )
{
if (paths[r].selected == true )
{
arr1.push(r);
}
}
var win = new Window("dialog", "", [150, 150, 500, 300]);
this.windowRef = win;
win.pnl = win.add("panel", [10, 10, 340, 140], "Cyan:");
var ys1 = 5;
var ys2 = 30;
Label_neg200 = win.pnl.add("statictext", [20, ys1, 45, ys2], "-200");
Label_0 = win.pnl.add("statictext", [122, ys1, 170, ys2], "0");
Label_200 = win.pnl.add("statictext", [210, ys1, 250, ys2], "200");
var xxx = 20;
var yyy = 10;
var xx2 = 230;
var yy2 = 45;
var dfg = 8;
Label_CC = win.pnl.add("edittext", [xxx+220, 19+dfg, 280, 38+dfg], "100");
var slideCC = win.pnl.add("slider", [xxx, 25, xx2, 50], 0, -200, 200); slideCC.value = 100;
///////////////////////////////////////////////////////////////////////////////////////
function Label(){
Label_CC.text = Math.round(slideCC.value);
}
slideCC.onChanging = Label;
slideCC.onChange = update;
// определяем значения циана каждого объекта перед вызовом функции слайдера
for (i = 0; i < arr1.length; i++) {
var c1 = paths[arr1[i]].fillColor.cyan; } // с1 для расчётов внтури функции слайдера
win.show();
/////////////////////////////////////////////////////////////////////////////////////
function update() {
for (i = 0; i < arr1.length; i++) {
//var c2 = paths[arr1[i]].fillColor.cyan;
//alert ('c1: ' + c1 + ' c2: ' + c2);
var finC = c1 * slideCC.value / 100; // из C2 значение циана брать нельзя -
//оно меняется с каждым вызовом функции.
//Как получить все значения циана из цикла for для c1 ? Функция берёт только одно значение
if (finC > 100) {finC = 100}
if (finC < 0) {finC = 0}
paths[arr1[i]].fillColor.cyan = finC;
}
redraw();
}
Да ничего не надо передавать, используйте глобальную переменную, для небольших скриптов стиль не сильно пострадает.Застрял на одном месте - передача значений из цикла в функцию.
for (i = 0; i < arr1.length; i++) {
var c1 = paths[arr1[i]].fillColor.cyan; }
Код я максимально урезал, чтобы выложить и не отвлекаться на лишнее. Скрипт почти готов и для одного объекта он работает. Попробую массив для CMYK, спасибо.Да ничего не надо передавать, используйте глобальную переменную, для небольших скриптов стиль не сильно пострадает.
Но судя по коду скрипт пока далек от задуманной работы.
Для начала для всех объектов нужно сохранить все CMYK значения в отдельный массив, а только потом можно уже с этим работать.
Цикл
Для этой цели подходит слабо. А учитывая что еще нужно менять обводку, то структура должна быть универсальной.Код:for (i = 0; i < arr1.length; i++) { var c1 = paths[arr1[i]].fillColor.cyan; }
Как можно было бы использовать глобальную переменную в данном случае? У меня же c1 глобальная, разве нет?Да ничего не надо передавать, используйте глобальную переменную, для небольших скриптов стиль не сильно пострадает.
Но судя по коду скрипт пока далек от задуманной работы.
Для начала для всех объектов нужно сохранить все CMYK значения в отдельный массив, а только потом можно уже с этим работать.
Цикл
Для этой цели подходит слабо. А учитывая что еще нужно менять обводку, то структура должна быть универсальной.Код:for (i = 0; i < arr1.length; i++) { var c1 = paths[arr1[i]].fillColor.cyan; }
В идеале это должно выглядетьКак можно было бы использовать глобальную переменную в данном случае? У меня же c1 глобальная, разве нет?
var doc = app.activeDocument;
var sel = doc.selection;
var paths = doc.pathItems;
var c1;
главный алгоритм я выложил, остальное - интерфейс и копипаст элементов.Проще оценить скрипт целиком, при обрезке страдают важные детали, да и по реализации можно идеи подсказать.