Візитки на конвеєрі

  1. У минулому номері ми познайомилися з базовими можливостями механізму скриптів в Adobe Illustrator CS....
  2. групування
  3. Максимум візиток на лист
  4. Розміщення по центру аркуша
  5. створення випусків
  6. Розстановка обрізних міток
  7. Пошук об'єктів певної колірної моделі
  8. збираємо бібліотеку
У минулому номері ми познайомилися з базовими можливостями механізму скриптів в Adobe Illustrator CS. Розширимо наші знання і виберемо завдання складніше, має практичну користь. Мова піде про візитках ...

Спуск візиток на друкований аркуш

C цим завданням рано чи пізно стикається більшість дизайнерів, але її виконання за допомогою стандартних засобів Illustrator занадто утомливо. Спробуємо полегшити роботу за допомогою скриптів. Домовимося, що в документі повинні знаходитися тільки об'єкти, що використовуються в візитці. Порядок операцій по створенню розкладки візиток:

  1. Угруповання всіх об'єктів, щоб в подальшому візитка була єдиним цілим.
  2. Розкладання максимальної кількості візиток на аркуші з урахуванням обрізних міток. Передбачимо їх поворот - страховку від проблем при неточною різанні листа, коли верх і низ візитки помітно відрізняються.
  3. Центрування (якщо візитки двосторонні).
  4. Облік випусків (bleed) для компенсації неточною різання візиток по краях.
  5. Розстановка обрізних міток.

Результат - готовий до висновку спуск, зроблений за все одним кліком мишки.

групування

Оскільки візитка може складатися з векторних і растрових об'єктів, для звернення до них будемо використовувати pageItems - батьківський клас для всіх елементів сторінки. Угруповання робиться так: спочатку оголошується група (спочатку вона порожня), а потім в неї заносяться елементи, з яких необхідно виключити саму групу. Останнє важливо, оскільки угруповання поспіль всіх елементів призведе до спроби занести в групу її ж саму (група входить в клас pageItems), і скрипт видасть помилку. Так як посилання на об'єкти класу page-Items вже визначена в завантажувальному скрипті, перейдемо відразу до справи:

refGroup = gI.add ();

Говорячи казенним мовою, цією строчкою ми оголосили змінну refGroup і зробили її посиланням на новий об'єкт, створений методом add для класу groupItems, - просто, оголосили нову, поки порожню групу. Для занесення в неї об'єктів будемо використовувати метод moveToEnd, при якому кожен новий член групи буде розташовуватися нижче найнижчого елементу (за рівнем залягання) з існуючих в ній. Якщо цього явно не вказати, відбудеться неприпустиме зміна рівнів об'єктів відносно один одного, і вся композиція візитки зміниться (за замовчуванням Illustrator кожен новий об'єкт має зверху над іншими, використовуючи метод moveToBeginning).

Як параметри для переміщення в скриптовой моделі Illustrator CS можна вказувати пункт призначення (наприклад, в новий документ) і задавати відносне положення дубліката в новому місці (припустимо, move (app. Documents. Add, Element Placement. PLACEATBEGINNING) - це більш універсальний спосіб , ніж просто moveToBeginning, доступне в попередніх версіях. Але в даному випадку конструкція нам не потрібна, скористаємося коротким варіантом.

for (i = 1; i pgI [i] .moveToEnd (refGroup)}

Рахунок розпочато з «1», а не з «0», оскільки потрібно виключити з групування саму групу. Раз вона була створена останньою, її порядковий номер (індекс) - «0», об'єкт з таким індексом ми і пропускаємо.

У нижньому об'єкта бажано прибрати контур - зазвичай на стадії затвердження макета він показує кордону візитки, в кінцевому ж варіанті не потрібен. Щоб звернутися до об'єкта, необхідно визначити його індекс. Він легко обчислюється: самий верхній елемент в документі має індекс «0», отже, найдальший (по глибині залягання) матиме індекс, рівний числу елементів в масиві. Для видалення окантовки у нижнього об'єкта можна записати:

pgI [pgI.length-1] .stroked = false;

Ми вказали порядковий номер length-1 тому, що рахунок елементів в масиві ведеться починаючи з «0», а не з «1», а length (кількість об'єктів) - з «1». Отже, перший етап робіт виконано.

Максимум візиток на лист

Для виконання завдання визначимо, скільки візиток поміщається на обраному аркуші паперу. Для цього необхідно визначитися з довжиною міток різу і їх відступом від країв візиток. Врахуємо один нюанс: у Illustrator в якості основної одиниці виміру за замовчуванням прийняті пункти, а можливість її зміни не передбачена (властивість документа rulerUnits має атрибут Read Only - тільки для читання). Оскільки задавати розміри все ж звичніше в міліметрах, введемо поправочний коефіцієнт. Після цього задаємо довжину міток різу і відстань від них до візиток (10 мм і 3 мм, відповідно).

koef = 2.832;
cropsLenght = 10 * koef;
cropsOffset = 3 * koef;

Дізнаємося кількість візиток по висоті, ширині і округляємо до цілого значення з урахуванням того, що хоча б половина обрізний мітки повинна міститися на аркуші (з обох сторін). Скористаємося floor - вбудованої в JavaScript функцією, округлюються дробове число в меншу сторону, і знайдемо відповідь з нерівності: 2 * (cropsLenght / 2 + cropsOffset) + [кількість візиток по ширині] * refGroup. width <= aD.width (aD вже задана в бібліотечному скрипті) - рис. 1.

Для числа візиток по ширині і висоті отримаємо:

numX = Math.floor ((aD.width - 2 * (cropsLenght / 2 + cropsOffset)) / refGroup.width);
numY = Math.floor ((aD.height - 2 * (cropsLenght / 2 + cropsOffset)) / refGroup.height);

Math - клас об'єктів JavaScript, що дозволяє виробляти розширені математичні операції.

Продовжуємо розкладати візитки. Однак перед переходом до основної мети згадаємо, що хотіли передбачити їх поворот. Оскільки логічно поєднати обидві операції в одному циклі, настав момент визначити, а чи потрібен поворот взагалі (це вирішується індивідуально для кожної візитки, виходячи з її оформлення). Найпростіший метод отримати відповідь - використовувати confirm, вже відому функцію JavaScript.

if confirm ( 'Do you want that ids will be rotated?') {rotation = true}
else {rotation = false}

При натисканні на кнопку ОК (confirm = true) ознака rotation встановлюється, в іншому випадку - скидається (залежно від його стану будуть виконуватися різні дії).

Переходимо безпосередньо до розкладці об'єктів: почнемо з розподілу їх по висоті. Передбачаючи подальше дублювання по ширині листа, подбаємо про те, щоб його можна було легко виконати. Для цього достатньо згрупувати візитки першого ряду і потім копіювати цілі колонки. Тому спочатку створимо групу column, в яку стануть входити всі елементи першого створюваного вертикального ряду (колонки):

column = gI.add ();

Занесемо вихідну візитку в створену групу. Метод перенесення значення не має, оскільки візитки перекриватися не будуть - виберемо, наприклад, moveToBeginning.

refGroup.moveToBeginning (column);

Кількість візиток по висоті нам відомо - numY. Кількість необхідних копій - на одиницю менше, оскільки одна візитка в колонці вже є. Метод Duplicate створює копію об'єкта без зміщення: він, як і move, дозволяє задати додаткові параметри, але поки вони не затребувані:

for (i = 1; irefGroup.duplicate ();

Зауважте: продубльований об'єкт, що входить до групи, автоматично стає її членом.

Тепер дії будуть дещо відрізнятися в залежності від обраного вами в вікні діалогу. Якщо поворот потрібен, будемо його виконувати. Такі операції, як поворот або масштабування, в Illustrator можна задавати двома способами: у вигляді матриці трансформацій і застосуванням відповідного методу трансформування. Виберемо другий спосіб як більш простий. Метод rotate має такі параметри (по порядку): кут повороту, дозвіл на поворот, необхідність зміни заливки шаблону (pattern), градієнтної заливки, параметрів окантовки і положення осі обертання.

Параметри можна опускати, якщо значення за замовчуванням (для положення осі обертання це CENTER) міняти не потрібно. У нас все так і є, тому досить обмежитися рядком:

if (rotation == true) {
refGroup.rotate (180.0)

Кожна наступна візитка буде повернута на 180 ° по відношенню до попередньої - отже, повернена і залишена без змін будуть чергуватися автоматично, що нам і потрібно.

Переходимо до зміщення копії по вертикалі на необхідну величину. Напрямок значення не має (все одно візитки будемо центрировать), тому домовимося зміщувати їх вниз. При визначенні позиції по осі Y врахуємо, що координатами об'єкта служить положення його лівого верхнього кута, а у документів в якості точки відліку за замовчуванням використовується лівий нижній кут - отже, зміщення в цьому напрямку буде проходити зі знаком мінус (див. Рис. 1) .

Для розкладки візиток стик в стик дуже зручний метод translate (зрушення об'єкта щодо поточного його положення по осях Х і Y, відповідно), якому поставимо в якості параметра висоту об'єкта - translate (0, - refGroup.height). Тут потрібно зробити зауваження. Оскільки об'єкт обертається навколо свого центру, він повинен залишатися на місці. Насправді ж Illustrator чомусь його трохи зрушує, тому доведеться вдатися до коригуючих методів, вносячи поправки по обох осях (отримані дослідним шляхом).

refGroup.translate (0.6, - refGroup. height + 0.1)

Якщо поворот не потрібен - все набагато простіше:

} Else {refGroup.translate (0, - refGroup. Height)}}

Настала черга копіювання візиток поперек листа. Черговість дій така ж, як і раніше, відрізнятися буде тільки кількість копій (numX) і зміщення (вправо на ширину візитки). Відлік знову ведемо ні з «0», т. К. Перший вертикальний ряд (колонка) автоматично був створений в процесі дублювання візиток в попередньому кроці. Попередньо колонку занесемо в нову групу (загальну для всіх колонок) - для зручності при подальшому їх центруванні. Потім дублюємо нашу єдину колонку по горизонталі необхідну кількість разів.

all = gI.add ();
column.moveToBeginning (all);
for (j = 1; jcolumn.duplicate ();
column.translate (column.width, 0)}

Зі створенням візиток покінчено.

Розміщення по центру аркуша

Після об'ємного попереднього кроку переходимо до центрування візиток, для чого використовуємо властивості документа width і height. Але спочатку жорстко поставимо в якості центру відліку (rulerOrigin) точку з координатами (0, 0) - це стане в нагоді, якщо перед запуском скрипта були змінені розміри документа. Як відомо, в такому випадку Illustrator положення початкової точки не змінює, а всі розрахунки ведуться від неї, тому може статися накладка (бувають і такі сюрпризи). Метод position нам уже знаком.

aD.rulerOrigin = Array (0,0);
posX = (aD.width - all.width) / 2;
posY = aD.height - (aD.height - all.height) / 2;
all.position = Array (posX, posY);

Візитки розміщені; настала черга кроку? 4 - випуски (bleed) для компенсації неточною різання листа.

створення випусків

Будемо формувати їх, включаючи копії відповідних колонок в обтравочні групи (Clipping Path). Масками для них будуть прямокутники заданої ширини з висотою, що дорівнює висоті колонки, або ж групи all (що одне і те ж). Метод створення прямокутника заснований на тому, що він входить в загальний клас кривих (pathItems), а задаються його параметри (в пунктах) в такому порядку: положення верхньої точки, лівої, ширина і висота. Таким чином, для маски отримаємо:

clipMask = pI.rectangle (all.top, all.left, 10, all.height);

де pI = aD.pathItems - посилання на всі векторні об'єкти, визначена в бібліотечному скрипті. Ширину випуску визначимо в 10 точок (близько 3 мм), чого цілком достатньо. Відсічна група нічим не відрізняється від звичайної за винятком властивості «clipped», яке повинно бути встановлено (true) - причому маскою виступає об'єкт, що знаходиться на самому її верху. Для підтримки порядку в макеті все випуски будемо об'єднувати в групу (clipGroup) з назвою Bleeds.

clipGroup = gI.add ();
clipGroup.name = 'Bleeds';

Почнемо з лівих випусків, для чого треба сдубліровать відповідний ряд візиток. Як дізнатися індекс групи, його утворює? Настала черга детально розібратися з принципом присвоєння індексів новим об'єктам: не зрозумівши його, створювати скрипти буде важко. Підрахуємо, скільки всього груп було створено.

Кожен новостворюваний об'єкт займає верхній рівень серед усіх в документі. Але в механізмі скриптинга так відбувається не завжди: при дублюванні групи, вкладеної в іншу, дублікат поміщається не зверху, а під батьківський об'єкт! Це розходиться з загальним принципом, зате дозволяє гнучко управляти елементами, якщо ієрархія документа складна.

Оскільки Відсічна група clipGroup була створена останньою і не входила до складу жодної групи, вона знаходиться нагорі в документі, і її індекс «0». Точно так же була створена група all (містить всі візитки) - її номер «1», а ще раніше - column - та, що нас цікавить. Її індекс - «2».

Чому ж такий номер не у останньої створеної візитки - адже передувала створенню групи all саме вона? Зверніть увагу на порядок створення об'єктів. Повернемося в самий початок, до моменту копіювання першої візитки. Перед цим вона була поміщена в спеціально створену групу column, і тільки потім на її основі отримані інші візитки колонки. При цьому створення нових візиток не приводило до зміни індексу групи, оскільки вона була для них батьківським об'єктом. Далі відбувалося те ж саме: спочатку була створена група all, і дублювання виконувалося вже всередині неї, а дублікати розміщувалися під групою column.

Продовживши підрахунки, отримаємо, що третій індекс матиме перший об'єкт, поміщений в column; група, що складається з візиток другий колонки - 2 плюс кількість елементів в першій колонці; перша група у другій колонці - 4 плюс кількість елементів у попередній колонці (не 3, оскільки додалася група, утворена візитками цієї колонки - дублікат column) і т. д.

Спробуйте самі визначити індекси об'єктів, необхідних для створення верхнього та нижнього випусків. Майте на увазі: елементи мають індекси, що відрізняються на кількість елементів в колонці плюс 1 (сама колонка теж є групою). Отже, продовжуємо: створюємо копію колонки для занесення її в clipGroup.

gI [2] .duplicate (clipGroup,
ElementPlacement.PLACEATEND);

Тут ми скористалися можливістю Illustrator CS дублювати об'єкти з одночасною зміною їх глибини залягання. Для створення відсічній групи залишилося маску перенести на самий її верх і у властивостях групи встановити параметр clipped.

clipMask.moveToBeginning (clipGroup);
clipGroup.clipped = true;

Відсічна група створена. Відразу ж заносимо її в звичайну групу для зберігання разом з іншими ще не створеними випусками - порядок є порядок!

clipGroup.moveToEnd (bleedGroup);

Щоб вона стала випуском, залишилося її дзеркально відобразити по горизонталі щодо своєї лівої межі. На цей раз скористаємося більш гнучким способом - матрицею масштабування; тільки так можна для деяких операцій задати параметри, що відрізняються від використовуваних за замовчуванням. В якості масштабу по осі Х вкажемо -100.0, а по Y все залишимо без змін (100.0). Ці значення передамо методу transform, якому, за аналогією з методом Rotate, вкажемо всі необхідні параметри (дозвіл на перетворення, центр перетворень - все решта детально описані в довідковому керівництві).

scaleMatrix = getScaleMatrix (-100.0, 100.0);
clipGroup.transform (scaleMatrix, true, false, false, false, 1.0, Transformation.LEFT);

Аналогічно і з крайньою справа колонкою, врахувавши її індекс і відобразивши щодо правої межі (Transformation.RIGHT). Індекс визначимо виходячи з таких міркувань: загальна кількість візиток - numX * numY, до якого додамо кількість нами спеціально створених груп - 3 (all, column, clip- Group), а раз хочемо мати справу з найправішій колонкою, додамо кількість колонок по горизонталі (numX). В результаті отримаємо (numX * numY + numX + 3). Попрактикуйтесь зі створенням верхніх і нижніх випусків самі.

Розстановка обрізних міток

Переходимо до останнього кроку - матюками різу. Спочатку визначимо їх колір. Це можна зробити двома способами - використовуючи зразок (swatch) Registration зі стандартної палітри зразків, заданої в файлі конфігурації Adobe Illustrator Startup CMYK.ai (використовуючи конструкцію aD.swatches [ "Registration"]. Color), або створивши власний колір. Застосуємо універсальний другий варіант і попутно дізнаємося, як створювати призначені для користувача кольори.

Завдання нового кольору відрізняється від звичної процедури створення векторних об'єктів. Різниця в тому, що для цього потрібно створити новий об'єкт (функцією JavaScript new - тому він не стане звичайним об'єктом Illustrator CS), а тип визначить його колірну модель (CMYKColor). Потім визначимо складові кольору як властивості цього об'єкта.

regColor = new CMYKColor ();
regColor.cyan = 100;
regColor.magenta = 100;
regColor.yellow = 100;
regColor.black = 100;

Мітки різу - не що інше, як векторні контури, в моделі Illustrator - об'єкти класу path-Items. Для зручності разнесём їх і самі візитки по різним верствам, для чого створимо додатковий шар. Назвемо його «Crops».

lA = aD.layers.add ();
lA.name = "Crops";

Тепер задамо кількість міток по вертикалі (їх кількість повинна бути більше візиток на одиницю), а потім обчислимо координати початкової і кінцевої точок для лівого ряду міток (рис. 2):

for (i = 0; i <numY + 1; i ++) {
refX1 = posX - cropsLenght - cropsOffset;
refY1 = posY - i * refGroup.height;
refX2 = refX1 + cropsLenght;
refY2 = refY1;

Дуже зручний спосіб створення простих контурів за допомогою методу setEntirePath, в якості параметрів для якого потрібно передати координати обох складових його опорних точок (anchor). Паралельно присвоюємо їм необхідні параметри - товщину (0.2 pt) і колір. Оскільки точно такі ж операції будуть проводитися для вертикальних міток, оптимальніше записати їх у вигляді функції.

Функція (хай вибачать мене професіонали за вільність) - це набір інструкцій, які використовують змінні дані, необхідні для видачі результату. Конкретні ж дані передаються в функції в місці її виклику. Перевага функцій: в них один раз описуються всі дії, а там, де вона викликається, операції повторяться в повному обсязі. Розмір скрипта зменшується, а читабельність підвищується (назва може розкривати сутність функції).

В якості змінних даних у нас будуть виступати координати опорних точок і їх колір.

function makeCrops (X1, Y1, X2, Y2, color) {
pathNew = pI.add ();
pathNew.setEntirePath (Array (Array
(refX1, refY1), Array (refX2, refY2)));
pathNew.strokeWidth = 0.2;
pathNew.strokeColor = regColor; }

Функція описана. Вона створює простий шлях з двох точок (по координатам refX1, refY1 і refX2, refY2) з заданими атрибутами - будемо викликати її для створення кожної обрізний мітки. Для зручності краще розмістити її в кінці скрипта. Ми не вказували приналежності шляхів нового шару (pathNew = activeLayer.pI.add ()), оскільки після створення шар автоматично стає активним і робочим. Викликаємо функцію (в дужках - передані параметри):

makeCrops (refX1, refY1, refX2, refY2, regColor);

Вона створює лівий ряд міток - нам залишається тільки зробити його копію, яку потім потрібно перемістити в правий ряд (див. Рис. 2). Використовуємо метод translate:

pathNew.duplicate ();
pathNew.translate (all.width + cropsLenght + 2 * cropsOffset, 0);

Нагадаю, all - об'єкт, який посилається на групу з усіх створених візиток. Таким чином, на цьому етапі ми створили обидва ряди вертикальних міток різу. Створення верхнього і нижнього рядів нічим не відрізняється - іншими будуть тільки координати утворюють їх точок:

for (i = 0; i <numX + 1; i ++)
{
refX1 = posX + i * refGroup.width;
refY1 = posY + cropsLenght + cropsOffset;
refX2 = refX1;
refY2 = refY1 - cropsLenght;
makeCrops (refX1, refY1, refX2, refY2, regColor);
}

Завершальний штрих - останню групу зміщуємо вниз на необхідну відстань:

pathNew.translate (0, - (all.height + cropsLenght + 2 * cropsOffset))

Скрипт готовий. Дії при його написанні охоплюють безліч часто використовуваних функцій: перетворення над об'єктами за допомогою простих і спеціальних методів (більш гнучких - через матрицю трансформацій); дублювання елементів з одночасним розташуванням їх в потрібному порядку; створення обтравочних груп і призначених для користувача квітів; переміщення об'єктів двома способами - вказуючи абсолютні координати (метод position) і відносні (метод translate); зміна глибини залягання елементів; створення шарів і роботу на них; угруповання об'єктів; використання особливостей класу pageItem. Ми оцінили зручність використання функцій і, головне, розглянули механізм індексування об'єктів Illustrator.

Пошук об'єктів певної колірної моделі

Оскільки в цьому випуску порушено тему створення візиток, спробуємо автоматизувати всі процеси, пов'язані з їх підготовкою до друку. Одна з нагальних завдань для візиток, що друкуються замовними фарбами, - перевірка наявності в макеті об'єктів тільки зі сумішевими квітами, що особливо актуально при переході до такого варіанту від початкового тріадного. На щастя, розробники Illustrator вже давно подбали, щоб в одному макеті не змішувалися об'єкти, що належать різним колірним моделям (одна з постійних головних болів для користувачів CorelDRAW). Але це стосується тільки варіантів CMYK / RGB і екзотичних HLS / HSB / Lab / YIK - інші ж (наприклад, сумішеві кольору) можуть цілком миролюбно сусідити з CMYK.

Для перевірки макета можна скористатися вбудованими можливостями Illustrator (палітра Document Info), але в ній тільки констатується наявність чи відсутність проблемних об'єктів. Локалізувати їх не так-то просто, особливо якщо логотип складається з безлічі дрібних деталей, отриманих трасуванням растрового зображення. Причина написання скрипта - автор сам зіткнувся з подібною проблемою. Пропоноване рішення збереже і вам масу часу.

Отже, визначимо початкові умови. Припустимо, в макеті є об'єкти з фарбами з декількох палітр: нам потрібно визначити ті, в кольорах яких використовуються нетріадних компоненти. Для вибору палітри скористаємося прекрасним методом завдання початкових умов через вікно діалогу.

value = prompt ( "Specify the color model you find (CMYK / Spot)", "CMYK")

Користувачеві пропонується ввести одне з двох значень, за замовчуванням у вікні буде стояти CMYK. За логікою речей пошук міг би обмежитися тільки елементами типу pathItems, але ми вже знаємо, що універсально використання класу pageItems. У будь-якому випадку нам буде достатньо можливостей, закладених в бібліотечний скрипт.

// @ include "~ / predefined.js"

Для контролю будемо вести рахунок конвертованим об'єктів. Спочатку їх 0.

numConverted = 0;

Щоб знати друзів в обличчя, будемо їх відзначати (виділяти); відповідно, подбаємо, щоб всі об'єкти були видимими. Однак візуалізація всіх без розбору невидимих ​​об'єктів невиправдана, т. К. Може порушити загальну композицію (якщо заховані розташовані вище за інших). Тому будемо «виводити на чисту воду» тільки тих, хто оголошений в розшук - будемо встановлювати видимість примусово тільки для тих, чия колірна модель не відповідає необхідній. Так ми забезпечимо себе від вищеописаної ситуації, адже паралельно з вирішенням технологічних питань по кожному об'єкту індивідуально можна зберігати первісний вигляд візитки.

У керівництві по скриптингу процедура отримання колірної моделі у об'єктів не описана, але це нас не зупинить. Якщо гора не йде до Магомета ... Підемо на хитрість і дізнаємося метод зберігання самі - створимо об'єкт в будь-якій кольоровій моделі і, виділивши його, запустимо тестовий скрипт:

alert (activeDocument.selection [0] .fillColor)

Цією рядком ми змушуємо Illustrator CS повідомити цікаву для нас інформацію. Редактор до нашого великого задоволення видає в вікні: [CMYKColor] (або [Spot- Color]) - деталі не настільки важливі. Головне, ми дізналися формат зберігання інформації про модель: стандартну назву, після якого відразу ж йде закінчення Color, і все це укладено в квадратні дужки. Отримавши відповідь, ми вирішили проблему з дефіцитом інформації. Для зручності введемо змінну searched, якої позначимо всю потрібну конструкцію:

searched = "[" + value + "Color]"

Замість value буде підставлятися значення, введене користувачем у вікні діалогу.

Оскільки ймовірність знаходження проблемних квітів в заблокованих об'єктах виключити не можна, для тотальної перевірки відкриваємо повний доступ до всього вмісту сторінки. Після чого в циклі опитуємо стан всіх об'єктів і встановлюємо кожному ознака редагований:

for (i = 0; iif (pI [i] .locked == true) {pI [i] .locked
= False; }

перевірка умови:

if ((pI [i] .fillColor == searched) || (pI [i] .strokeColor == searched)) {
if (pI [i] .hidden == true) {pI [i] .hidden == false; }

Його логіка така: якщо окантовка або заповнення об'єкта мають некоректну колірну модель і до того ж він прихований (відповідно, недоступний для виділення), робимо його видимим, після чого переходимо до основного: виділяємо об'єкт і збільшуємо лічильник кількості небезпечних елементів.

pI [i] .selected = true;
pI [i] .name = "Converted";
numConverted ++; }}

Про всяк випадок ми перейменували кожен проблемний об'єкт в Converted (знадобиться при ручному пошуку в панелі шарів). Паралельно перевіряємо на приналежність добре відомому своєю підступністю класу pluginItem. При позитивному результаті реагуємо:

if (pI [i] .name == "pluginItem") {plgItemExist = alert ( "\ npluginItems Exist !!")}

«\ N» позначає перехід до нового рядка в полі вікна. У фінальній частині скрипта виведемо звіт про виконану роботу: інформацію про загальну кількість переглянутих об'єктів; кількості проблемних; якщо були знайдені «чорні ящики» - pluginItem - виводимо додаткове повідомлення.

alert (i + "objects processed. Found:" + numConverted + "\ n \ nThey were renamed to Converted" + plgItemExist);

Недолік скрипта - неоднозначність дій, які повинен зробити користувач, якщо знайдені кілька проблемних елементів. Адже при зміні наявного кольору на найближчий з необхідної колірної моделі виділення інших об'єктів пропаде. Як варіанти вирішення проблеми можна запропонувати:

  1. зберегти виділені об'єкти через пункт меню Illustrator Select * Save selection (знадобиться ввести назву для набору; для повторного виділення об'єктів досить вибрати його з меню Select);
  2. після внесення змін запускати скрипт повторно - до тих пір, поки проблемні об'єкти не пропадуть.

Якому із способів віддати перевагу? Все залежить від того, скільки об'єктів знайдено. З досвіду скажу: багато їх не буває (один-два, більше - набагато рідше). Значить, другий шлях краще.

Інше обмеження скрипта - пасивність по відношенню до pluginItem. Але і це не проблема: обійти її можна, запустивши скрипт, який шукає об'єкти з товщиною окантовки, менше заданої (див. Publish,? 7 ). Як порогової величини вкажіть свідомо недосяжне значення (наприклад, 10 пунктів) і вручну перевірте знайдені об'єкти. Така ось спадкоємність виходить ...

На цьому ми закінчуємо випуск, присвячений роботі з візитками. Якщо виникнуть питання або з'явиться необхідність в скрипті - пишіть автору, рішення цікавих завдань будуть описані на сторінках журналу.

Наступний випуск буде присвячений створенню календаря на рік (на будь-яку кількість місяців) і створення каталогу векторних зображень. Якщо не використовувати готові «сітки» від препресс-бюро, що займаються фотовивід, розстановка вручну півтисячі об'єктів - не творче заняття. Скрипт же справляється з цим за півхвилини.

А каталог може замінити переглядач, що спеціалізується на форматі AI і PDF: він створює один багатосторінковий pdf-файл зі слайдами всіх документів цих типів, що містяться в заданій папці - досить відкрити його за допомогою Acrobat Reader і роздрукувати.

Про автора: Михайло Борисов, ( [email protected] ), Пише для Publish корисні поради та огляди ПО.

збираємо бібліотеку

У скриптах регулярно використовується доступ до стандартних об'єктів Illustrator, тому є сенс не визначати їх знову і знову (aD = app.activeDocument; sel = aD.selection і т. Д.), А створити окремий скрипт-бібліотеку для подальшого виклику: благо механізм сценаріїв, вдосконалений в Illustrator CS, це дозволяє. Створимо файл predefined.js такого змісту

aD = app.activeDocument;
sel = aD.selection;
pgI = aD.pageItems;
pI = aD.pathItems;
gI = aD.groupItems;

і збережемо його в каталозі C: \ Documents and Settings \ username (username - ім'я користувача). В скрипті для виклику бібліотеки досить написати рядок // @ include "~ / predefined.js". Конструкція «// @» - розширення стандартного JavaScript і керуюча для скриптового модуля Illustrator CS ( «//» визначає коментар в JavaScript), а знак тильда "~" відповідає вищезазначеному шляху розташування файлу. В принципі, для вказівки місцезнаходження бібліотечного файлу допускається використовувати стандартні позначення типу «../» для переходу до інших папок.

Do you want that ids will be rotated?
Як дізнатися індекс групи, його утворює?
Якому із способів віддати перевагу?
Publish,?