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

glugoff

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

_MBK_

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

glugoff

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

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

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

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

_MBK_

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

~RA~

Одарённая.
12 лет на форуме
Сообщения
11 808
Реакции
3 434
А ещё есть фифекты всякие, наложения и пр.
 

glugoff

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

_MBK_

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

qsedftghk

фея
15 лет на форуме
Сообщения
2 028
Реакции
1 197

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

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
из SDK доступа явно больше. уже года два к нему подступаюсь, но энергии не хватает освоить
 

_MBK_

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

Старкрафт

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

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
Доступа то больше, но реализовано просто чудовищно заднепроходно, вдобавок, работает чертовски неустойчиво и поддержка каждой новой версии требует фактически заново переписывать весь код. Именно поэтому я лет пять назад отказался от использования SDK вообще

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

_MBK_

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

dumbm1

10 лет на форуме
Сообщения
421
Реакции
196

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

 

_MBK_

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

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168

Не по теме:
Скриптографер, похоронили при переходе с 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_

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

glugoff

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

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

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 137
Реакции
10 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