[AI CC2023] Скрипт, создающий отдельные линии по периметру артборда.

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

siv05

Топикстартер
15 лет на форуме
Сообщения
36
Реакции
6
Приветствую вас уважаемые форумчане. В очередной раз хочу обратиться к вам за помощью. В работе понадобился скрипт, который рисует отдельные линии чётко по периметру артборда любого формата. Толщина линий должна быть равна 1pt, цвет CutContour2. Обводка должна иметь стандартные параметры см. скриншот в архиве. Линии должны выходить за пределы артборда на 2 мм с каждой стороны. И при этом эти линии должны быть созданы на отдельном слое с названием CutContour2. Прилагаю файлы для примера. Буду очень признателен за помощь.
 

Вложения

Да. Огромное спасибо! Почти то, что нужно. Но есть один нюанс. Цвет линий почему-то окрашивает не в SPOT, а в CMYK. Хотя сам SPOT (CutContour2) добавляет в образцы. Но линии в раскладке CMYK красит.
 
Последнее редактирование:
В работе понадобился скрипт, который рисует отдельные линии чётко по периметру артборда любого формата.
Как-то так:
JavaScript:
var myDoc = app.activeDocument;
var w = myDoc.width, h = myDoc.height;
myDoc.rulerOrigin = [0,0];

try
    {
    var myColor = myDoc.swatches.getByName("CutContour2");
    } catch(e)
        {
    var cmykColor = new CMYKColor();
    cmykColor.cyan = 0;
    cmykColor.magenta = 100;
    cmykColor.yellow = 100;
    cmykColor.black = 0;

    var spot = myDoc.spots.add();
    spot.color = cmykColor;
    spot.colorType = ColorModel.SPOT;
    spot.name = "CutContour2";
    var newSpotColor = new SpotColor();
    newSpotColor.spot = spot;
        }

try
    {
    var myLayer = myDoc.layers.getByName("CutContour2");
    } catch(e)
        {
        var myLayer = myDoc.layers.add();
        myLayer.name = "CutContour2";      
        }

var path1 = myLayer.pathItems.add();
var path2 = myLayer.pathItems.add();
var path3 = myLayer.pathItems.add();
var path4 = myLayer.pathItems.add();

path1.setEntirePath( [ [-5.66, 0], [w+5.66, 0] ] );
path1.strokeColor = newSpotColor;
path2.setEntirePath( [ [0, -5.66], [0, h+5.66] ] );
path2.strokeColor = newSpotColor;
path3.setEntirePath( [ [w, -5.66], [w, h+5.66] ] );
path3.strokeColor = newSpotColor;
path4.setEntirePath( [ [-5.66, h], [w+5.66, h] ] );
path4.strokeColor = newSpotColor;
 
Последнее редактирование:
Нет. в этом рисуется прямоугольник по периметру.
Как-то так:
JavaScript:
var myDoc = app.activeDocument;
var w = myDoc.width, h = myDoc.height;
myDoc.rulerOrigin = [0,0];

try
    {
    var myColor = myDoc.swatches.getByName("CutContour2");
    } catch(e)
        {
    var cmykColor = new CMYKColor();
    cmykColor.cyan = 0;
    cmykColor.magenta = 100;
    cmykColor.yellow = 100;
    cmykColor.black = 0;

    var spot = myDoc.spots.add();
    spot.color = cmykColor;
    spot.colorType = ColorModel.SPOT;
    spot.name = "CutContour2";
    var newSpotColor = new SpotColor();
    newSpotColor.spot = spot;
        }

try
    {
    var myLayer = myDoc.layers.getByName("CutContour2");
    } catch(e)
        {
        var myLayer = myDoc.layers.add();
        myLayer.name = "CutContour2";     
        }

var path1 = myLayer.pathItems.add();
var path2 = myLayer.pathItems.add();
var path3 = myLayer.pathItems.add();
var path4 = myLayer.pathItems.add();

path1.setEntirePath( [ [-5.66, 0], [w+5.66, 0] ] );
path1.strokeColor = newSpotColor;
path2.setEntirePath( [ [0, -5.66], [0, h+5.66] ] );
path2.strokeColor = newSpotColor;
path3.setEntirePath( [ [w, -5.66], [w, h+5.66] ] );
path3.strokeColor = newSpotColor;
path4.setEntirePath( [ [-5.66, h], [w+5.66, h] ] );
path4.strokeColor = newSpotColor;
Оно! Все работает! Спасибо огромное за помощь вам ребята!
 
Если не ошибаюсь, то скрипт второй раз не запустится, пока вручную не удалить созданный Spot или откатить Ctrl+Z историю. Потому что имена переменных спота в try...catch разные. Поправил, чтобы запускалось повторно.

JavaScript:
var myDoc = app.activeDocument;
var w = myDoc.width, h = myDoc.height;
myDoc.rulerOrigin = [0,0];

try {
    var myColor = myDoc.swatches.getByName("CutContour2").color;
} catch(e) {
    var cmykColor = new CMYKColor();
    cmykColor.cyan = 0;
    cmykColor.magenta = 100;
    cmykColor.yellow = 100;
    cmykColor.black = 0;

    var spot = myDoc.spots.add();
    spot.name = "CutContour2";
    spot.colorType = ColorModel.SPOT;
    spot.color = cmykColor;
    var myColor = new SpotColor();
    myColor.spot = spot;
}

try {
    var myLayer = myDoc.layers.getByName("CutContour2");
} catch (e) {
    var myLayer = myDoc.layers.add();
    myLayer.name = "CutContour2";
}

var path1 = myLayer.pathItems.add();
var path2 = myLayer.pathItems.add();
var path3 = myLayer.pathItems.add();
var path4 = myLayer.pathItems.add();

path1.setEntirePath( [ [-5.66, 0], [w+5.66, 0] ] );
path1.strokeColor = myColor;
path2.setEntirePath( [ [0, -5.66], [0, h+5.66] ] );
path2.strokeColor = myColor;
path3.setEntirePath( [ [w, -5.66], [w, h+5.66] ] );
path3.strokeColor = myColor;
path4.setEntirePath( [ [-5.66, h], [w+5.66, h] ] );
path4.strokeColor = myColor;
 
  • Спасибо
Реакции: densen
Действительно, иногда не сразу замечаешь неокругленные значения артборда в макете клиента и приходится откатываться назад для создания линий по периметру. Поэтому ваша корректировка скрипта пришлась очень кстати. Еще раз благодарю всех, кто принял участие в разработке. Спасибо!