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

VAN1985

Участник
Топикстартер
Сообщения
17
Оценка реакций
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

фея
12 лет на форуме
Сообщения
1 568
Оценка реакций
793
Ну, дак, убрать этот кусок кода из кода... А лучше вывесите весь код, так понятнее будет
 

_MBK_

Пикирующий бомбардировщик
12 лет на форуме
Сообщения
26 643
Оценка реакций
8 892
Для начала постить код на форум в специальных тэгах
 

Gad

Участник
Сообщения
292
Оценка реакций
105
Код:
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

Участник
Топикстартер
Сообщения
17
Оценка реакций
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

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

_MBK_

Пикирующий бомбардировщик
12 лет на форуме
Сообщения
26 643
Оценка реакций
8 892
Можно просто завернуть критический кусок в try { ... } catch ( err ) { }
 

VAN1985

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

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

_MBK_

Пикирующий бомбардировщик
12 лет на форуме
Сообщения
26 643
Оценка реакций
8 892
Перебирать все textFrame и проверять contents на совпадение с данной строкой
 

VAN1985

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

_MBK_

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

VAN1985

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

splxgf

10 лет на форуме
Сообщения
6 989
Оценка реакций
3 111

VAN1985

Участник
Топикстартер
Сообщения
17
Оценка реакций
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;
}
}
И возник такой (понимаю глупый) вопрос как найденный слой сделать активным???

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