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

siv05

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

Вложения

  • A6cut.rar
    432.2 КБ · Просм.: 86

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 270
Реакции
10 860

siv05

Топикстартер
15 лет на форуме
Сообщения
15
Реакции
4
Да. Огромное спасибо! Почти то, что нужно. Но есть один нюанс. Цвет линий почему-то окрашивает не в SPOT, а в CMYK. Хотя сам SPOT (CutContour2) добавляет в образцы. Но линии в раскладке CMYK красит.
 
Последнее редактирование:

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 270
Реакции
10 860

densen

15 лет на форуме
Сообщения
760
Реакции
651
В работе понадобился скрипт, который рисует отдельные линии чётко по периметру артборда любого формата.
Как-то так:
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;
 
Последнее редактирование:

siv05

Топикстартер
15 лет на форуме
Сообщения
15
Реакции
4
Нет. в этом рисуется прямоугольник по периметру.
Как-то так:
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;
Оно! Все работает! Спасибо огромное за помощь вам ребята!
 

creold

Сергей Осокин
Сообщения
37
Реакции
55
Если не ошибаюсь, то скрипт второй раз не запустится, пока вручную не удалить созданный 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

siv05

Топикстартер
15 лет на форуме
Сообщения
15
Реакции
4
Действительно, иногда не сразу замечаешь неокругленные значения артборда в макете клиента и приходится откатываться назад для создания линий по периметру. Поэтому ваша корректировка скрипта пришлась очень кстати. Еще раз благодарю всех, кто принял участие в разработке. Спасибо!