[AI CC-CC2021] Прошу помощи с написанием (исправлением) части скрипта

VAN1985

Участник
Топикстартер
Сообщения
20
Реакции
0
Доброго времени суток.
Существует скрипт в стадии изготовления...
Вашему вниманию предлагается его часть:

//выключение ненужных слоев включение (CUT)
for (i=0; i<app.activeDocument.layers.length; i++){
app.activeDocument.layers.visible = false;
}
activeDocument.activeLayer = activeDocument.layers["Cut"];
activeDocument.activeLayer.visible = true

//создать спот (CUT)
var doc = app.activeDocument;
var newSpot = doc.spots.add();
var newColor = new CMYKColor();
newColor.cyan = 15;
newColor.magenta = 100;
newColor.yellow = 100;
newColor.black = 0;
newSpot.name = "CUT";
newSpot.colorType = ColorModel.SPOT;
newSpot.color = newColor;
var newSpotColor = new SpotColor();
newSpotColor.spot = newSpot;
newSpotColor.tint = 100;

// покрасить выделенное в спот (CUT)
if (app.activeDocument.selection.length > 0){
for (i=0; i<app.activeDocument.selection.length; i++){
app.activeDocument.selection.strokeColor = doc.swatches["CUT"].color;
}
}
activeDocument.activeLayer.hasSelectedArtwork = false

Ситуация: в случае отсутствия слоя "Cut" в документе скрипт выдает ошибку "result Error 1302: No such element" Line 5" смысл ее мне понятен. Вопрос: Как сделать так чтобы скрипт не останавливался на ошибке, а переходил к следующим действиям скрипта (то есть в случае отсутствия слоя "Cut" не создавался цвет и ничего не красилось, а переходило к сл действию)?
Заранее спасибо!
Программист из меня совсем никакой по этому прошу помощи...
Всех с наступающим!
 

qsedftghk

фея
15 лет на форуме
Сообщения
2 028
Реакции
1 197
Ну, дак, убрать этот кусок кода из кода... А лучше вывесите весь код, так понятнее будет
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Для начала постить код на форум в специальных тэгах
 

Gad

Сообщения
2 971
Реакции
1 405
Код:
for (i=0; i<app.activeDocument.layers.length; i++){
    Lname = app.activeDocument.layers[i];
    if (Lname == "[Layer Cut]") {
    app.activeDocument.layers[i].visible = true;
    }
    else {
    app.activeDocument.layers[i].visible = false
    };
};

Это нужно было?
 

VAN1985

Участник
Топикстартер
Сообщения
20
Реакции
0
Для начала постить код на форум в специальных тэгах
сорри...

у, дак, убрать этот кусок кода из кода... А лучше вывесите весь код, так понятнее будет

)))) вариант мне нравится, но к сожалению так не получится...
вот что есть на данный момент:

JavaScript:
//выключение ненужных слоев включение (CUT)
for (i=0; i<app.activeDocument.layers.length; i++){
app.activeDocument.layers[i].visible = false;
                        }
activeDocument.activeLayer = activeDocument.layers["Cut"];
activeDocument.activeLayer.visible = true
activeDocument.activeLayer = activeDocument.layers["CUT"];
activeDocument.activeLayer.visible = true
activeDocument.activeLayer = activeDocument.layers["cut"];
activeDocument.activeLayer.visible = true
activeDocument.activeLayer.hasSelectedArtwork = true

    //создать спот (CUT)
    var doc = app.activeDocument;
    var newSpot = doc.spots.add();
    var newColor = new CMYKColor();
    newColor.cyan = 15;
    newColor.magenta = 100;
    newColor.yellow = 100;
    newColor.black = 0;
    newSpot.name = "CUT";
    newSpot.colorType = ColorModel.SPOT;
    newSpot.color = newColor;
    var newSpotColor = new SpotColor();
    newSpotColor.spot = newSpot;
    newSpotColor.tint = 100;

        // покрасить выделенное в спот (CUT)
        if (app.activeDocument.selection.length > 0){
        for (i=0; i<app.activeDocument.selection.length; i++){
        app.activeDocument.selection[i].strokeColor = doc.swatches["CUT"].color;
        }
            }
        activeDocument.activeLayer.hasSelectedArtwork = false

                    //включение всех слоев
                    for (i=0; i<app.activeDocument.layers.length; i++){
                    app.activeDocument.layers[i].visible = true;
                        }
   
//выключение ненужных слоев включение (Crease)
for (i=0; i<app.activeDocument.layers.length; i++){
app.activeDocument.layers[i].visible = false;
                        }
activeDocument.activeLayer = activeDocument.layers["Crease"];
activeDocument.activeLayer.visible = true
activeDocument.activeLayer = activeDocument.layers["CREASE"];
activeDocument.activeLayer.visible = true
activeDocument.activeLayer = activeDocument.layers["crease"];
activeDocument.activeLayer.visible = true
activeDocument.activeLayer.hasSelectedArtwork = true

    //создать спот (CREASE)
    var doc = app.activeDocument;
    var newSpot1 = doc.spots.add();
    var newColor1 = new CMYKColor();
    newColor1.cyan = 100;
    newColor1.magenta = 0;
    newColor1.yellow = 100;
    newColor1.black = 0;
    newSpot1.name = "CREASE";
    newSpot1.colorType = ColorModel.SPOT;
    newSpot1.color = newColor1;
    var newSpot1Color = new SpotColor();
    newSpotColor.spot = newSpot;
    newSpotColor.tint = 100;

        // покрасить выделенное в спот (CREASE)
        if (app.activeDocument.selection.length > 0){
        for (i=0; i<app.activeDocument.selection.length; i++){
        app.activeDocument.selection[i].strokeColor = doc.swatches["CREASE"].color;
        }
            }
        activeDocument.activeLayer.hasSelectedArtwork = false

            //включение всех слоев
            for (i=0; i<app.activeDocument.layers.length; i++){
            app.activeDocument.layers[i].visible = true;
            }

//выключение ненужных слоев включение (Rits)
for (i=0; i<app.activeDocument.layers.length; i++){
app.activeDocument.layers[i].visible = false;
                        }
activeDocument.activeLayer = activeDocument.layers["Rits"];
activeDocument.activeLayer.visible = true
activeDocument.activeLayer = activeDocument.layers["RITS"];
activeDocument.activeLayer.visible = true
activeDocument.activeLayer = activeDocument.layers["rits"];
activeDocument.activeLayer.visible = true
activeDocument.activeLayer.hasSelectedArtwork = true

    //создать спот (RITZ)
    var doc = app.activeDocument;
    var newSpot2 = doc.spots.add();
    var newColor2 = new CMYKColor();
    newColor2.cyan = 0;
    newColor2.magenta = 0;
    newColor2.yellow = 0;
    newColor2.black = 100;
    newSpot2.name = "RITZ";
    newSpot2.colorType = ColorModel.SPOT;
    newSpot2.color = newColor2;
    var newSpot2Color = new SpotColor();
    newSpotColor.spot = newSpot;
    newSpotColor.tint = 100;

        // покрасить выделенное в спот (RITZ)
        if (app.activeDocument.selection.length > 0){
        for (i=0; i<app.activeDocument.selection.length; i++){
        app.activeDocument.selection[i].strokeColor = doc.swatches["RITZ"].color;
        }
            }
        activeDocument.activeLayer.hasSelectedArtwork = false

            //включение всех слоев
            for (i=0; i<app.activeDocument.layers.length; i++){
            app.activeDocument.layers[i].visible = true;
            }
 

VAN1985

Участник
Топикстартер
Сообщения
20
Реакции
0
То есть если нет слоя "Cut" переходить к действию со слоем "Crease", не создавая спота "CUT" и ничего не крася им...
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Можно просто завернуть критический кусок в try { ... } catch ( err ) { }
 
  • Спасибо
Реакции: VAN1985

VAN1985

Участник
Топикстартер
Сообщения
20
Реакции
0
Доброго всем Времени суток.
Возник еще такой вопрос: где-то в документе иллюстратора (за пределами артборда) существует текстовая линия на ней есть надпись (скажем "С ОБОРОТА") как заставить скрипт обнаружить текстовую линию с этой надписью?

Заранее Спасибо!
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Перебирать все textFrame и проверять contents на совпадение с данной строкой
 

VAN1985

Участник
Топикстартер
Сообщения
20
Реакции
0
Перебирать все textFrame и проверять contents на совпадение с данной строкой
А можно немножко по подробней если вас не затруднит... просто что нужно сделать я понимаю а как это сделать не очень... заранее спасибо
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
JavaScript:
for (var i=0;i<app.activeDocument.textFrames.length;i++)
    {
        if (app.activeDocument.textFrames.contents=="искомый текст")
        {
            //нужное действие
            break; // ну или искать дальше - тогда не break
        }
    }
 

VAN1985

Участник
Топикстартер
Сообщения
20
Реакции
0
Еще раз всем большущее спасибо за ответы.
Теперь возник такой вопрос по скрипту на иллюстратор: возможно ли включить поиск слоя по части названия? Если да то каким образом???
 

splxgf

12 лет на форуме
Сообщения
7 740
Реакции
3 421

VAN1985

Участник
Топикстартер
Сообщения
20
Реакции
0
1. Да.
2. Берется имя слоя и ищется вхождение части названия
Посмотреть вложение 127632

Большущее спасибо!!!
немного переписав под свои нужды получил:

JavaScript:
for (var i = app.activeDocument.layers.length - 1; i >= 0; i-- ) {
if ( new String( app.activeDocument.layers[i].name ).indexOf("PERF") == 0 ) {
app.activeDocument.layers[i].visible = true;
}
}

И возник такой (понимаю глупый) вопрос как найденный слой сделать активным???

Еще раз Большое спасибо!!!
 

splxgf

12 лет на форуме
Сообщения
7 740
Реакции
3 421
Возможно
Код:
app.activeDocument.activeLayer = app.activeDocument.layers[i];
 
  • Спасибо
Реакции: VAN1985

VAN1985

Участник
Топикстартер
Сообщения
20
Реакции
0
Добрый Вечер...
И вновь вопрос: как удалить найденный текст:

JavaScript:
// Получить данные артборда
                        docRef = app.activeDocument;
                        var aIndex = docRef.artboards.getActiveArtboardIndex();
                        var artboard = docRef.artboards[aIndex];
                        var aRect = artboard.artboardRect;
                        var aLeft = aRect[0];
                        var aRight = aRect[2];
                        var aTop = aRect[1];
                        var aBottom = aRect[3];
// если есть комент поставить его в артборд
for (var i=0;i<app.activeDocument.textFrames.length;i++)
    {
    if (app.activeDocument.textFrames.contents='с некашированной стороны');
        {
        //NO = app.activeDocument.textFrames.contents='с некашированной стороны';
        //NO.remove();
        // Поставить текст лайн
        pointTextRef11 = app.activeDocument.activeLayer.textFrames.add();
        // Установить по координатам
        pointTextRef11.top = aTop - 90*2.834645;
        pointTextRef11.left = aLeft + 10*2.834645;
        // Покрасить в нужный цвет из поллитры сватч
        var range = pointTextRef11.textRange;
        var attributes = range.characterAttributes;
        attributes.fillColor = app.activeDocument.swatches["[Registration]"].color
        attributes.size = 36*2.834645*0.35
        pointTextRef11.contents = "C некашированной стороны"
            break; // ну или искать дальше - тогда не break
        }
    }
Мои бесплодные попытки сделать это строки 15 и 16 (в данный момент изолированные)...
смысл такой: Если текст 'с некашированной стороны' есть в документе, поставить согласно заданным параметрам текст "C некашированной стороны", найденный удалить...

Заранее
Большое спасибо!!!
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Самый простой способ для нужного удаляемого фрагмента создать textRange и его contents присвоить ""