Вопрос не так прост как кажетсявсе объекты в макете,
Спасибо, очень ценное замечание. Я подозревал что подвох будетВопрос не так прост как кажется
К бОльшей части типов объектов и их цвету доступа из яваскриптинга нет вообще от слова совсем
Или вам только однородные шейпы надо независимо от группировки?
Доступа то больше, но реализовано просто чудовищно заднепроходно, вдобавок, работает чертовски неустойчиво и поддержка каждой новой версии требует фактически заново переписывать весь код. Именно поэтому я лет пять назад отказался от использования SDK вообщеиз SDK доступа явно больше. уже года два к нему подступаюсь, но энергии не хватает освоить
Доступа то больше, но реализовано просто чудовищно заднепроходно, вдобавок, работает чертовски неустойчиво и поддержка каждой новой версии требует фактически заново переписывать весь код. Именно поэтому я лет пять назад отказался от использования SDK вообще
Не по теме:
Скриптографер, похоронили при переходе с cs5 на cs6, потому что адобовцы, вроде, сами заново переписали весь код иллюстратора в новом фреймворке ради выпуска версии под х64.
И там действительно всем пришлось переписывать свои плагины. В том числе долго не было новой версии кад-тулз... По моему так.
#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 //выделяем все объекты найденные с помощью всего скрипта
Спасибо, учту! Я на самом деле засунул первое попавшееся что нагуглил, и в продакшн Пока подожду, накидают ещё файла, на котором скрипт не отработал, там уже и оптимизация может случится.Для добавления в массив элемента есть прекрасный метод push
Во первых, все условия по хорошему надо брать в скобки ибо например в си такой код не скомпилился бы вообще а за яваскрипт я не поручусь что порядок действий правильный будет.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) )