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

  • Автор темы Автор темы glugoff
  • Дата начала Дата начала

glugoff

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

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

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

Внезапно, откуда-то взялся черный овал. Питстоп вот его вынюхал, а я, пока не разобрал все - таки не смог найти. Вот в идеале хотелось бы и такое найти. Но если нет - хочется узнать что найти возможно технически.
 
Как раз это просто - перебирать все дочерние pathItems документа - они будут перебираться и выделяться независимо от принадлежности к группам
 
А ещё есть фифекты всякие, наложения и пр.
 
А можно попросить пример скрипта, перебирающего простые шейпы? Или какие команды, критерии проверки использовать.. Я в скриптинге не силён (
 
Вот примерно то что вам надо, только наоборот
 
  • Спасибо
Реакции: glugoff

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

не знаю, единственный плагин что написал когда-то давно до сих пор работает. без перекомпиляции с новым SDK. а так спорить не буду, выглядит все довольно сложно. может я отупел, правда
 
"Когда то" - это уже во времена CC? Лично я задолбался переделывать уже под CS6
Скриптографер тоже похоронили именно изза этого
 

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

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

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


там вопрос в диалогах был, они выкинули ADM. остальное скорее всего не так кардинально изменилось
 
Отвечу-ка я сам себе, вдруг кому понадобится. Скрипт из топика был написан, хоть и несколько с другим критерием. Рабочая задача - отлавливать штрих-коды в 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, впечатления о котором остались такие себе.
 
Для добавления в массив элемента есть прекрасный метод push
 
  • Спасибо
Реакции: glugoff
Для добавления в массив элемента есть прекрасный метод push
Спасибо, учту! Я на самом деле засунул первое попавшееся что нагуглил, и в продакшн :) Пока подожду, накидают ещё файла, на котором скрипт не отработал, там уже и оптимизация может случится.

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