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

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 183
Реакции
10 843
А чего часть на исконно русском, а часть на загранично буржуйском?
 

splxgf

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

Станислав Хоффман

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

andrejK

R.I.P.
Сообщения
10 300
Реакции
5 218

Не по теме:
по делу тут только один уважаемый @splxgf :)
 

Станислав Хоффман

Участник
Топикстартер
Сообщения
277
Реакции
23

splxgf

12 лет на форуме
Сообщения
7 742
Реакции
3 424
Я так понимаю глобальные свотчи используются для упрощения кода? чтобы не писать его для обводок, групп, градиентов и прочего?
Да, и для упрощения и для ускорения... Одно дело перебирать тысячи объектов с одинаковым цветом (может еще изобретать систему кэширования), другое пройтись по готовым свотчам которые можно оптимизировать и создавать с разными настройками. За счет этого не надо отдельно разбирать градиенты, меши, цвета в эффектах.
Мое знание js примерно на уровне плинтуса, желание на нем писать код еще ниже, поэтому объем кода будет самым минимальным.
 

Станислав Хоффман

Участник
Топикстартер
Сообщения
277
Реакции
23
Да, и для упрощения и для ускорения... Одно дело перебирать тысячи объектов с одинаковым цветом (может еще изобретать систему кэширования), другое пройтись по готовым свотчам которые можно оптимизировать и создавать с разными настройками. За счет этого не надо отдельно разбирать градиенты, меши, цвета в эффектах.
Мое знание js примерно на уровне плинтуса, желание на нем писать код еще ниже, поэтому объем кода будет самым минимальным.
А как Вы свотчам глобальность задаёте? через скрипт? в Recolor не нашёл.
 

splxgf

12 лет на форуме
Сообщения
7 742
Реакции
3 424

Станислав Хоффман

Участник
Топикстартер
Сообщения
277
Реакции
23
в CC 22.1 (2018) это штатная фишка при создании группы. А вот начиная с какой версии это появилось предстоит еще выяснить.
в СС 17 этого нет, но легко решаемо так - создаём группу свотчей в Recolor, потом вручную или скриптом(надо уточнить можно ли) присвоить свотчам "global", затем всё выделить и снова зайти в Recolor, он сам перекрасит объекты в цвета только что созданной группы. У меня получилось.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 183
Реакции
10 843
В некоторые интимные места макета обьектная модель доступа не имеет вообще. Поэтому без свотчей никак их не перекрасить штатно.
 

Станислав Хоффман

Участник
Топикстартер
Сообщения
277
Реакции
23
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();
                            }
 
Последнее редактирование:

splxgf

12 лет на форуме
Сообщения
7 742
Реакции
3 424
Застрял на одном месте - передача значений из цикла в функцию.
Да ничего не надо передавать, используйте глобальную переменную, для небольших скриптов стиль не сильно пострадает.
Но судя по коду скрипт пока далек от задуманной работы.
Для начала для всех объектов нужно сохранить все CMYK значения в отдельный массив, а только потом можно уже с этим работать.
Цикл
Код:
for (i = 0; i < arr1.length; i++) {
            var c1  =  paths[arr1[i]].fillColor.cyan;  }
Для этой цели подходит слабо. А учитывая что еще нужно менять обводку, то структура должна быть универсальной.
 

Станислав Хоффман

Участник
Топикстартер
Сообщения
277
Реакции
23
Да ничего не надо передавать, используйте глобальную переменную, для небольших скриптов стиль не сильно пострадает.
Но судя по коду скрипт пока далек от задуманной работы.
Для начала для всех объектов нужно сохранить все CMYK значения в отдельный массив, а только потом можно уже с этим работать.
Цикл
Код:
for (i = 0; i < arr1.length; i++) {
            var c1  =  paths[arr1[i]].fillColor.cyan;  }
Для этой цели подходит слабо. А учитывая что еще нужно менять обводку, то структура должна быть универсальной.
Код я максимально урезал, чтобы выложить и не отвлекаться на лишнее. Скрипт почти готов и для одного объекта он работает. Попробую массив для CMYK, спасибо.
 

Станислав Хоффман

Участник
Топикстартер
Сообщения
277
Реакции
23
Да ничего не надо передавать, используйте глобальную переменную, для небольших скриптов стиль не сильно пострадает.
Но судя по коду скрипт пока далек от задуманной работы.
Для начала для всех объектов нужно сохранить все CMYK значения в отдельный массив, а только потом можно уже с этим работать.
Цикл
Код:
for (i = 0; i < arr1.length; i++) {
            var c1  =  paths[arr1[i]].fillColor.cyan;  }
Для этой цели подходит слабо. А учитывая что еще нужно менять обводку, то структура должна быть универсальной.
Как можно было бы использовать глобальную переменную в данном случае? У меня же c1 глобальная, разве нет?
 

splxgf

12 лет на форуме
Сообщения
7 742
Реакции
3 424
Проще оценить скрипт целиком, при обрезке страдают важные детали, да и по реализации можно идеи подсказать.
 

splxgf

12 лет на форуме
Сообщения
7 742
Реакции
3 424
Как можно было бы использовать глобальную переменную в данном случае? У меня же c1 глобальная, разве нет?
В идеале это должно выглядеть
Код:
    var doc = app.activeDocument;
    var sel = doc.selection;
    var paths = doc.pathItems;
    var c1;
А в дальнейшем по коду везде использовать без var чтобы не перекрыть локальной переменной.
Тут проблема в том, что переменная одна, а значений циана много.
 
Последнее редактирование:

Станислав Хоффман

Участник
Топикстартер
Сообщения
277
Реакции
23
Проще оценить скрипт целиком, при обрезке страдают важные детали, да и по реализации можно идеи подсказать.
главный алгоритм я выложил, остальное - интерфейс и копипаст элементов.
Как экномично для кода создать 16 слайдеров? Была идея
for (i=1, i<16; i++) {
создать слайдер 1
}
проблема в том, что не знаю как потом к ним обращаться ( по индексу? slider[0] ? вроде, пробовал, не работает ), переменных ведь не назначено, а там ещё надо размеры и координаты каждому прописывать. В итоге я создавал всё поштучно, от чего код раздулся.
 
Последнее редактирование: