[AI CC2020] Выделение объектов, с более чем тремя CMYK сепарациями

glugoff

Участник
Топикстартер
Сообщения
611
Реакции
93
Люди умные, подскажите пожалуйста! Как с помощью джаваскрипта, выделить все объекты в макете, окрашенные более чем в 3 cmyk компоненты? Т.е. например 50/30/0/20 не выделять, а 50/30/10/20 выделить.
Заранее спасибо!
 

_MBK_

Пикирующий бомбардировщик
12 лет на форуме
Сообщения
29 921
Реакции
9 835
все объекты в макете,
Вопрос не так прост как кажется
К бОльшей части типов объектов и их цвету доступа из яваскриптинга нет вообще от слова совсем
Или вам только однородные шейпы надо независимо от группировки?
 

glugoff

Участник
Топикстартер
Сообщения
611
Реакции
93
Вопрос не так прост как кажется
К бОльшей части типов объектов и их цвету доступа из яваскриптинга нет вообще от слова совсем
Или вам только однородные шейпы надо независимо от группировки?
Спасибо, очень ценное замечание. Я подозревал что подвох будет :)

Да, градиенты можно игнорировать, достаточно однородных заливок. А вот с группировкой сложнее. Хотелось бы и внутри групп и снаружи групп и даже сбоку от групп. Как например вот тут: это группа
1587048008402.png

А это она же, но разгруппированная
1587048068638.png

Внезапно, откуда-то взялся черный овал. Питстоп вот его вынюхал, а я, пока не разобрал все - таки не смог найти. Вот в идеале хотелось бы и такое найти. Но если нет - хочется узнать что найти возможно технически.
 

_MBK_

Пикирующий бомбардировщик
12 лет на форуме
Сообщения
29 921
Реакции
9 835
Как раз это просто - перебирать все дочерние pathItems документа - они будут перебираться и выделяться независимо от принадлежности к группам
 

~RA~

10 лет на форуме
Сообщения
9 430
Реакции
2 697
А ещё есть фифекты всякие, наложения и пр.
 

glugoff

Участник
Топикстартер
Сообщения
611
Реакции
93
А можно попросить пример скрипта, перебирающего простые шейпы? Или какие команды, критерии проверки использовать.. Я в скриптинге не силён (
 

_MBK_

Пикирующий бомбардировщик
12 лет на форуме
Сообщения
29 921
Реакции
9 835
Вот примерно то что вам надо, только наоборот
 
  • Спасибо
Реакции: glugoff

qsedftghk

фея
12 лет на форуме
Сообщения
1 758
Реакции
926

Не по теме:
Я так стал далек от всего этого... Послушайте, фиг с ним, со скриптингом, а если там подключить в мозг SdК, СИ какое-нибудь, есть смыл заморачиваться? Или такое же уныние? Такие же мучения?. off вопрос. /OFF]
 

Skvoznyak

12 лет на форуме
Сообщения
4 955
Реакции
1 958
из SDK доступа явно больше. уже года два к нему подступаюсь, но энергии не хватает освоить
 

_MBK_

Пикирующий бомбардировщик
12 лет на форуме
Сообщения
29 921
Реакции
9 835
из SDK доступа явно больше. уже года два к нему подступаюсь, но энергии не хватает освоить
Доступа то больше, но реализовано просто чудовищно заднепроходно, вдобавок, работает чертовски неустойчиво и поддержка каждой новой версии требует фактически заново переписывать весь код. Именно поэтому я лет пять назад отказался от использования SDK вообще
 

Старкрафт

Участник
Сообщения
175
Реакции
31
Если там прозрачности, то задача практически нерешаема. Проще всё растрировать и проверить скриптом попиксельно с рисованием карты выходов за охват (что-то вроде gamut warning) в программах, которые это позволяют: шоп, корел фотопеинт.
 

Skvoznyak

12 лет на форуме
Сообщения
4 955
Реакции
1 958
Доступа то больше, но реализовано просто чудовищно заднепроходно, вдобавок, работает чертовски неустойчиво и поддержка каждой новой версии требует фактически заново переписывать весь код. Именно поэтому я лет пять назад отказался от использования SDK вообще

не знаю, единственный плагин что написал когда-то давно до сих пор работает. без перекомпиляции с новым SDK. а так спорить не буду, выглядит все довольно сложно. может я отупел, правда
 

_MBK_

Пикирующий бомбардировщик
12 лет на форуме
Сообщения
29 921
Реакции
9 835
"Когда то" - это уже во времена CC? Лично я задолбался переделывать уже под CS6
Скриптографер тоже похоронили именно изза этого
 

dumbm1

Участник
Сообщения
409
Реакции
179

Не по теме:
Скриптографер, похоронили при переходе с cs5 на cs6, потому что адобовцы, вроде, сами заново переписали весь код иллюстратора в новом фреймворке ради выпуска версии под х64.
И там действительно всем пришлось переписывать свои плагины. В том числе долго не было новой версии кад-тулз... По моему так.

 

_MBK_

Пикирующий бомбардировщик
12 лет на форуме
Сообщения
29 921
Реакции
9 835
Именно так, там кардинально сменили API, я после адаптации зарекся это делать следующий раз. Насколько я помню, при переходе на CC они снова выкинули подобный финт, а после я и следить перестал. Скриптинг таки устойчивее к смене версий.
 

Skvoznyak

12 лет на форуме
Сообщения
4 955
Реакции
1 958

Не по теме:
Скриптографер, похоронили при переходе с cs5 на cs6, потому что адобовцы, вроде, сами заново переписали весь код иллюстратора в новом фреймворке ради выпуска версии под х64.
И там действительно всем пришлось переписывать свои плагины. В том числе долго не было новой версии кад-тулз... По моему так.


там вопрос в диалогах был, они выкинули ADM. остальное скорее всего не так кардинально изменилось
 

glugoff

Участник
Топикстартер
Сообщения
611
Реакции
93
Отвечу-ка я сам себе, вдруг кому понадобится. Скрипт из топика был написан, хоть и несколько с другим критерием. Рабочая задача - отлавливать штрих-коды в 4 краски (чтобы потом не было мучительно больно перегравировывать валы). По критерию из скрипта работает префлай серверного питстопа, а скрипт нужен, чтобы было понятно, ГДЕ именно собака порылась.

Код:
#target illustrator

var pi = app.activeDocument.pathItems; //все геометрические объекты
var arr2 = []; //массив для объектов


if (pi.length > 0) { //если объектов чуть более чем нифига
    
  for (var i = 0; i < pi.length; i++) { //запускаем цикл
      
       var fill = pi[i].fillColor;  //заодно вводим переменные для заливки
       var stroke = pi[i].strokeColor; //и обводки

// объявляем условие для исключения. объекты с цветом равным критерию ниже - не будут выделены

if (
  (fill.black == 100 &&
  fill.magenta == 50.1 &&
  fill.cyan == 50.1 &&
  fill.yellow == 50.1)
||
  (stroke.black == 100 &&
  stroke.magenta == 50.1 &&
  stroke.cyan == 50.1 &&
  stroke.yellow == 50.1)
)
{
 
  continue;
}
  // основная проверка. тут проверяется диапазон значений цвета. если оно  true - объекты будут выделены   
      if (
            (fill.black >= 70 &&
            fill.black <= 100 &&
            fill.magenta >=1 &&
            fill.magenta <=100 &&
            fill.cyan >=1 &&
            fill.cyan <=100 &&
            fill.yellow >=1 &&
            fill.yellow <=100) ||
            (stroke.black >= 70 &&
            stroke.black <= 100 &&
            stroke.magenta >=1 &&
            stroke.magenta <=100 &&
            stroke.cyan >=1 &&
            stroke.cyan <=100 &&
            stroke.yellow >=1 &&
            stroke.yellow <=100)
            ){
            arr2 [arr2.length] = pi[i]; //всё что соответствует критерию выше - добавляется в массив для последующего выделения
          }
    }
  }

// этот блок является аналогом верхнего блока, но вместо pathItems работает с textFrames. его расписывать мне лень, тут все тоже самое.

var doc = app.activeDocument;
var tfs = doc.textFrames;
var arr = []

for (var i=0; i < tfs.length; i++) {

var tfill = tfs[i].textRange.fillColor;
var tstroke = tfs[i].textRange.strokeColor;

if (
  (tfill.black == 100 &&
  tfill.magenta == 50.1 &&
  tfill.cyan == 50.1 &&
  tfill.yellow == 50.1)
||
  (tstroke.black == 100 &&
  tstroke.magenta == 50.1 &&
  tstroke.cyan == 50.1 &&
  tstroke.yellow == 50.1)
)
{
  
  continue;
}

 if (
            (tfill.black >= 70 &&
            tfill.black <= 100 &&
            tfill.magenta >=1 &&
            tfill.magenta <=100 &&
            tfill.cyan >=1 &&
            tfill.cyan <=100 &&
            tfill.yellow >=1 &&
            tfill.yellow <=100) ||
            (tstroke.black >= 70 &&
            tstroke.black <= 100 &&
            tstroke.magenta >=1 &&
            tstroke.magenta <=100 &&
            tstroke.cyan >=1 &&
            tstroke.cyan <=100 &&
            tstroke.yellow >=1 &&
            tstroke.yellow <=100)
            ){

arr [arr.length] = tfs[i];


}
}

var arrsum = [].concat(arr,arr2) //объединяем массивы из проверки геометрии и проверки текста

activeDocument.selection = arrsum  //выделяем все объекты найденные с помощью всего скрипта

Код скорее всего являет собой эталонный быдлокод, и является фактически первым опытом в программировании. Но он работает. Если вдруг кто конструктивно посоветует как сделать его менее быдлокодом - буду рад.

P.S. Делалось в ESTK, впечатления о котором остались такие себе.
 

_MBK_

Пикирующий бомбардировщик
12 лет на форуме
Сообщения
29 921
Реакции
9 835
Для добавления в массив элемента есть прекрасный метод push
 
  • Спасибо
Реакции: glugoff

glugoff

Участник
Топикстартер
Сообщения
611
Реакции
93
Для добавления в массив элемента есть прекрасный метод push
Спасибо, учту! Я на самом деле засунул первое попавшееся что нагуглил, и в продакшн :) Пока подожду, накидают ещё файла, на котором скрипт не отработал, там уже и оптимизация может случится.

P.S. Меня на самом деле чуть более интересовало, как технически реализовать критерии для обоих блоков скрипта в одном месте. А то они дублируются, и как-то по моему не очень красиво это.
 

_MBK_

Пикирующий бомбардировщик
12 лет на форуме
Сообщения
29 921
Реакции
9 835
if ( (fill.black == 100 && fill.magenta == 50.1 && fill.cyan == 50.1 && fill.yellow == 50.1) || (stroke.black == 100 && stroke.magenta == 50.1 && stroke.cyan == 50.1 && stroke.yellow == 50.1) )
Во первых, все условия по хорошему надо брать в скобки ибо например в си такой код не скомпилился бы вообще а за яваскрипт я не поручусь что порядок действий правильный будет.
Во вторых, строгое сравнение myvar==90.1 может вовсе не отработать если будет, скажем 90.1001 а учитывая характер предстваления чисел с плавающей точкой в иллюстраторе и яваскрипте в частности вы рискуете вообще никогда не добиться строгого равенства даже если в лоб присвоите переменной 90.1
Параметры с плавающей точкой надо всегда сравнивать с заданной степенью точности
 
  • Спасибо
Реакции: glugoff