Если сценарий изменяет монтажные области в документе Adobe Illustrator, как пользователь может выбрать определенные монтажные области? Отображать названия артбордов? Но это не поможет в случаях «Артборд 1 копия». JS обнаружит артборд через activeDocuments.artboards[index]
, но когда порядок на холсте хаотичен, индексы на панели артбордов неинформативны.
Мне пришла в голову идея: при запуске скрипта отображать индекс на каждом артборде в виде текста, а нумерацию в конце удалить. Я использовал аналогичную идею в скрипте MoveArtboards, где пользователь вводит диапазон номеров артбордов для перемещения.
function showAbIndex(name) { var doc = activeDocument; var tmpLayer; try { tmpLayer = doc.layers.getByName(name); } catch (e) { tmpLayer = doc.layers.add(); tmpLayer.name = name; } for (var i = 0; i < doc.artboards.length; i++) { var currAb = doc.artboards[i]; var abWidth = currAb.artboardRect[2] - currAb.artboardRect[0]; var abHeight = currAb.artboardRect[1] - currAb.artboardRect[3]; var label = tmpLayer.textFrames.add(); var labelSize = (abWidth >= abHeight) ? abHeight : abWidth; label.contents = i + 1; label.textRange.characterAttributes.size = labelSize / 2; label.position = [currAb.artboardRect[0], currAb.artboardRect[1]]; } }
Цифры будут размещены на новом слое в верхнем левом углу соответствующего артборда. Для этого используйте try...catch
, чтобы проверить, существует ли слой с таким именем. Если нет, мы создадим его в блоке catch
. Из особенностей текстовой метки:
- В коде индексация начинается с 0, но в жизни мы считаем с 1, поэтому i + 1;
- Сравните высоту и ширину монтажной области. Затем вычисляем размер шрифта относительно большей стороны.
Не забудьте удалить временный слой, когда скрипт выполнит свою основную функцию.
var layerName = 'ARTBOARD_NUMBERS'; showAbIndex(layerName); // do something.. removeAbIndex(layerName); function showAbIndex(name) { var doc = activeDocument; var tmpLayer; try { tmpLayer = doc.layers.getByName(name); } catch (e) { tmpLayer = doc.layers.add(); tmpLayer.name = name; } for (var i = 0; i < doc.artboards.length; i++) { var currAb = doc.artboards[i]; var abWidth = currAb.artboardRect[2] - currAb.artboardRect[0]; var abHeight = currAb.artboardRect[1] - currAb.artboardRect[3]; var label = tmpLayer.textFrames.add(); var labelSize = (abWidth >= abHeight) ? abHeight : abWidth; label.contents = i + 1; label.textRange.characterAttributes.size = labelSize / 2; label.position = [currAb.artboardRect[0], currAb.artboardRect[1]]; } } function removeAbIndex(name) { try { var layerToRm = activeDocument.layers.getByName(name); layerToRm.remove(); } catch (e) {} }
Сообщите мне, было ли это полезно для вас. Меня можно найти: Facebook / Github / Telegram