[AI CC-CC2021] Вопрос по скриптописанию

eugeny

15 лет на форуме
Сообщения
859
Реакции
210
Все это просто замечательно, но, к сожалению, в случае адобовского жабаскрипта это недостижимая роскошь: валидность некоторых операций можно проверить только сгенерировав ошибку.
не доводим до ошибки проверкой валидных свойств.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 229
Реакции
10 851
Ну сейчас лениво вспоминать, но, например, вполне возможна ситуация, когда ранее вполне валидный обьект внезапно прекратил свое существование и обоащение к нему в лучшем случае вызывает ошибку а в худшем - крэш. Справедливости ради, надо сказать, что лидер по подобным капканам все таки фотошоп, его идеология action - сплошное минное поле с завязанными глазами
 

ACTPOHOM

Топикстартер
12 лет на форуме
Сообщения
2 981
Реакции
1 133
И снова я, и снова с нубским вопросом.
Почему не работает вызов функции ?
Код:
var myDocument = app.documents.add();
var myTextFrame = myDocument.textFrames.add();


var arraySpots = app.activeDocument.spots;



newSPOTcolor("Cut", 0, 100, 100, 0);    // это работает
newSPOTcolor("Crease", 100, 100, 0, 0);  // это работает
newSPOTcolor("Regmark", 0  , 0, 0, 100);   // это работает


var obj1 = myDocument.pathItems.polygon (100, 100, 72.0, 6);
obj1.filled = true;

obj1.fillColor = newSPOTcolor("newColor", 100, 0, 0, 0);  // НО  это почему не рабюотает ?





//создание SPOT цвета
function newSPOTcolor(name, c,m,y,k) {

     var newSpot = app.activeDocument.spots.add();
          newSpot.name = name;
          newSpot.colorType = ColorModel.SPOT;
          newSpot.color = new CMYKColor;
          newSpot.color.cyan = c;
          newSpot.color.magenta = m;
          newSpot.color.yellow = y;
          newSpot.color.black = k;
     return newSpot;

}
 

Вложения

  • Screen Shot 2019-05-27 at 12.26.11.png
    Screen Shot 2019-05-27 at 12.26.11.png
    29.7 КБ · Просм.: 477

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 229
Реакции
10 851
Ты точно читаешь невнимательно. Глянь пример сообщением выше. Где у тебя созддание SpotColor?
 

ACTPOHOM

Топикстартер
12 лет на форуме
Сообщения
2 981
Реакции
1 133
Ты точно читаешь невнимательно. Глянь пример сообщением выше. Где у тебя созддание SpotColor?
я просто не вкурил, разницу между классами Spot и SpotColor до сих пор.


вызов заработал, даже красит спотом, но не привязывается к объекту в библиотеке свотчей


Код:
var obj1 = myDocument.pathItems.polygon (100, 100, 72.0, 6);
obj1.filled = true;
var newSpotColor = newSPOTcolor("newColor1", 100, 100, 0, 0);
obj1.fillColor = newSpotColor;

//создание SPOT цвета
function newSPOTcolor(name, c,m,y,k) {

    var newSpot = app.activeDocument.spots.add();
    newSpot.name = name;
    newSpot.colorType = ColorModel.SPOT;
    newSpot.color = new CMYKColor;
    newSpot.color.cyan = c;
    newSpot.color.magenta = m;
    newSpot.color.yellow = y;
    newSpot.color.black = k;

    var newSpotColor = new SpotColor(); //создаем экземпляр класса SpotColor с именем newSpotColor
    newSpotColor.spot = newSpot;  // присваиваем ему характеристики newSpot
    newSpotColor.tint = 80;

    return newSpotColor;

}
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 229
Реакции
10 851
К свотчам и не должно привязываться. Мы ж вроде договорились что забываем про свотчи?
 

ACTPOHOM

Топикстартер
12 лет на форуме
Сообщения
2 981
Реакции
1 133
Понял, радуюсь пока нормальному созданию спотов, это уже хорошо;
 

ACTPOHOM

Топикстартер
12 лет на форуме
Сообщения
2 981
Реакции
1 133
@_MBK_ Спасиоь большое за терпение и разъяснение.

стало получаться, конечно надо учить классы с методами.
сделал функцию создания цвета и функцию создания полигона, и работает даже.

Код:
function createPolygon (x, y, r, side, filled, stroked, fColor, sColor) {

    var obj = myDocument.pathItems.polygon (x, y, r, side);
    obj.filled = filled;
    obj.stroked = stroked;
    obj.fillColor = fColor;
    obj.strokeColor = sColor;

}


//создание SPOT цвета
function newSPOTcolor(name, c,m,y,k, tint) {

    var newSpot = app.activeDocument.spots.add();
    newSpot.name = name;
    newSpot.colorType = ColorModel.SPOT;
    newSpot.color = new CMYKColor;
    newSpot.color.cyan = c;
    newSpot.color.magenta = m;
    newSpot.color.yellow = y;
    newSpot.color.black = k;

    var newSpotColor = new SpotColor(); //создаем экземпляр класса SpotColor с именем newSpotColor
    newSpotColor.spot = newSpot;  // присваиваем ему характеристики newSpot
    newSpotColor.tint = tint;

    return newSpotColor;

}
 
Последнее редактирование:

ACTPOHOM

Топикстартер
12 лет на форуме
Сообщения
2 981
Реакции
1 133
есть вопрос.

у меня скрипт меняет недопустимые символы на подчеркивания
.replace(/&/g, '_')
есть возможность так же выступить с заменой символа ' (тилда) ?
 

_MBK_

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

у меня скрипт меняет недопустимые символы на подчеркивания
.replace(/&/g, '_')
есть возможность так же выступить с заменой символа ' (тилда) ?
Да. А что мешает?
 

ACTPOHOM

Топикстартер
12 лет на форуме
Сообщения
2 981
Реакции
1 133
Код:
'.replace(/'/g, '_')

// дело в том, что '  воспринимается как открытая кавычка, как ее прикрыть, что бы она поспринималась символом ?
 

ACTPOHOM

Топикстартер
12 лет на форуме
Сообщения
2 981
Реакции
1 133
коварные клиенты шлют названия файлов как им вздумается, и некоторое програмное обеспечение впадает в ступор увидев такие файлы
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 229
Реакции
10 851
Так экранировать надо. Как ты формулируешь грепзапрос на замену кавычек?
 

ACTPOHOM

Топикстартер
12 лет на форуме
Сообщения
2 981
Реакции
1 133
Это смартнейма в виде JavaScript в которую передается имя файла, и возвращает значение уже с заменой.


Код:
var transliterate = function(text) {

    text = text
           .replace(/&/g, '_')
        .replace(/__/g, '_')
        .replace(/;/g, '_')
        .replace(/!/g, '_')
        .replace(/%/g, '_')
        .replace(/&#8216/g, '_')
        .replace(/&#8217/g, '_')
        .replace(/&#8242/g, '_')
        .replace(/@/g, '_');

    return text;
};transliterate('<<file/>>');
 

ACTPOHOM

Топикстартер
12 лет на форуме
Сообщения
2 981
Реакции
1 133
я попробовал вместо кавычек ставить их код, &#8242 но именно с этой кавычкой не срабатывает все равно
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 229
Реакции
10 851
А если вот так
/\'/g
 
  • Спасибо
Реакции: ACTPOHOM

ACTPOHOM

Топикстартер
12 лет на форуме
Сообщения
2 981
Реакции
1 133
походу проблема не в коде. а именно в передаче этой строки в код.
я попробовал его так же вписать с экранированием прямо в скрипте, и он отличо заменился.
 

Вложения

  • Screen Shot 2019-06-06 at 11.56.00.png
    Screen Shot 2019-06-06 at 11.56.00.png
    67.6 КБ · Просм.: 452