[AI CC-CC2022] RECOLOR ENGINE v2 by S.H.

А чего часть на исконно русском, а часть на загранично буржуйском?
 
А чего часть на исконно русском, а часть на загранично буржуйском?
Уровень моего английского чуть хуже чем "let speak from my heart", поэтому переводить описание не рискнул. А остальные термины проще воспринимаются на английском поскольку это наиболее часто используемая локализация адобовских программ, но в дальнейшем описание уберу или спрячу под кнопку.
 
Уровень моего английского чуть хуже чем "let speak from my heart", поэтому переводить описание не рискнул. А остальные термины проще воспринимаются на английском поскольку это наиболее часто используемая локализация адобовских программ, но в дальнейшем описание уберу или спрячу под кнопку.
можно сделать опцию выбора языка - либо галочкой, либо через переменную в самом скрипте.
 

Не по теме:
по делу тут только один уважаемый @splxgf :)
 
Я так понимаю глобальные свотчи используются для упрощения кода? чтобы не писать его для обводок, групп, градиентов и прочего?
Да, и для упрощения и для ускорения... Одно дело перебирать тысячи объектов с одинаковым цветом (может еще изобретать систему кэширования), другое пройтись по готовым свотчам которые можно оптимизировать и создавать с разными настройками. За счет этого не надо отдельно разбирать градиенты, меши, цвета в эффектах.
Мое знание js примерно на уровне плинтуса, желание на нем писать код еще ниже, поэтому объем кода будет самым минимальным.
 
Да, и для упрощения и для ускорения... Одно дело перебирать тысячи объектов с одинаковым цветом (может еще изобретать систему кэширования), другое пройтись по готовым свотчам которые можно оптимизировать и создавать с разными настройками. За счет этого не надо отдельно разбирать градиенты, меши, цвета в эффектах.
Мое знание js примерно на уровне плинтуса, желание на нем писать код еще ниже, поэтому объем кода будет самым минимальным.
А как Вы свотчам глобальность задаёте? через скрипт? в Recolor не нашёл.
 
в CC 22.1 (2018) это штатная фишка при создании группы. А вот начиная с какой версии это появилось предстоит еще выяснить.
в СС 17 этого нет, но легко решаемо так - создаём группу свотчей в Recolor, потом вручную или скриптом(надо уточнить можно ли) присвоить свотчам "global", затем всё выделить и снова зайти в Recolor, он сам перекрасит объекты в цвета только что созданной группы. У меня получилось.
 
В некоторые интимные места макета обьектная модель доступа не имеет вообще. Поэтому без свотчей никак их не перекрасить штатно.
 
Channel Mixer.
Всем привет, нужна помощь зала. Застрял на одном месте - передача значений из цикла в функцию.

Идея такая: циклом for определяем значения циана для всех выделенных объектов (массив) и передаём их в функцию слайдера, которая рассчитывает новый процент циана и перекрашивает объекты. У меня функция берёт только одно значение циана - последнее.

Код:
    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();
                            }
 
Последнее редактирование:
Застрял на одном месте - передача значений из цикла в функцию.
Да ничего не надо передавать, используйте глобальную переменную, для небольших скриптов стиль не сильно пострадает.
Но судя по коду скрипт пока далек от задуманной работы.
Для начала для всех объектов нужно сохранить все CMYK значения в отдельный массив, а только потом можно уже с этим работать.
Цикл
Код:
for (i = 0; i < arr1.length; i++) {
            var c1  =  paths[arr1[i]].fillColor.cyan;  }
Для этой цели подходит слабо. А учитывая что еще нужно менять обводку, то структура должна быть универсальной.
 
Да ничего не надо передавать, используйте глобальную переменную, для небольших скриптов стиль не сильно пострадает.
Но судя по коду скрипт пока далек от задуманной работы.
Для начала для всех объектов нужно сохранить все CMYK значения в отдельный массив, а только потом можно уже с этим работать.
Цикл
Код:
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 глобальная, разве нет?
 
Проще оценить скрипт целиком, при обрезке страдают важные детали, да и по реализации можно идеи подсказать.
 
Как можно было бы использовать глобальную переменную в данном случае? У меня же c1 глобальная, разве нет?
В идеале это должно выглядеть
Код:
    var doc = app.activeDocument;
    var sel = doc.selection;
    var paths = doc.pathItems;
    var c1;
А в дальнейшем по коду везде использовать без var чтобы не перекрыть локальной переменной.
Тут проблема в том, что переменная одна, а значений циана много.
 
Последнее редактирование:
Проще оценить скрипт целиком, при обрезке страдают важные детали, да и по реализации можно идеи подсказать.
главный алгоритм я выложил, остальное - интерфейс и копипаст элементов.
Как экномично для кода создать 16 слайдеров? Была идея
for (i=1, i<16; i++) {
создать слайдер 1
}
проблема в том, что не знаю как потом к ним обращаться ( по индексу? slider[0] ? вроде, пробовал, не работает ), переменных ведь не назначено, а там ещё надо размеры и координаты каждому прописывать. В итоге я создавал всё поштучно, от чего код раздулся.
 
Последнее редактирование: