Различие скриптинга CS2 и CS3-5

Статус
Закрыто для дальнейших ответов.

chesen

Топикстартер
15 лет на форуме
Сообщения
553
Реакции
49
В скриптах CS3-5 есть функция docRef.suspendHistory.
CS2 на ней спотыкается и скрипт далее не выполняется.
Как обойти эту проблему, заменив только эту строку и продолжить выполнение условий?
 

kstati

иɯɐɯɔʞ
10 лет на форуме
Сообщения
1 138
Реакции
512
Возможно, в скриптовании фотошопа есть и более элегантное решение, но 100% будет работать финт с обработкой исключений:
Код:
try {
        блок, который, возможно, создаст рантайм-ошибки;
} catch ( err ) {
       блок, выполняющийся при ошибке, может быть и пустым.
}

Если интересны конкретные изменения в скриптинге разных версий, то можно почитать кучку мануалов с официального сайта. Разделы наподобие «Changes since earlier versions» в первых главах содержат конкретику.
 
Последнее редактирование:

splxgf

12 лет на форуме
Сообщения
7 744
Реакции
3 425
Да вообще можно убрать, насколько понял эта строка делает только одну отмену в истории, вместо всех действий скрипта.
Код:
public function suspendHistory(historyString:String, javaScriptString:String):void
Ну или точнее оставить вызов в последнем аргументе.
 

kstati

иɯɐɯɔʞ
10 лет на форуме
Сообщения
1 138
Реакции
512
Да вообще можно убрать, насколько понял эта строка делает только одну отмену в истории, вместо всех действий скрипта.
Не-а. «Allows a single undo for all actions taken in the script.»
Заморозка истории действий позволяет одной отменой вернуть все, что натворит скрипт.
 

splxgf

12 лет на форуме
Сообщения
7 744
Реакции
3 425
Угу, только этот скрипт передается аргументом... Соответственно аргумент нужно вызвать нативно.
 

chesen

Топикстартер
15 лет на форуме
Сообщения
553
Реакции
49
Ловля ошибки не помогает. Скрипт играет без остановки и результата. Надо менять первую часть строки, но оставить дальнейшие вызовы.
Может что-то типа app.purge(PurgeTarget.HISTORYCACHES); ?
 

splxgf

12 лет на форуме
Сообщения
7 744
Реакции
3 425
Приведите проблемную строчку полностью.
 

chesen

Топикстартер
15 лет на форуме
Сообщения
553
Реакции
49
Код:
* Автор:  PavelK (Riflio)
*/
   
   

if (!app.documents.length > 0) { //--если нет активных документов
alert('Нет документа для работы!');
} else {
    if (app.activeDocument.artLayers.length<=1) {
        alert('Нет слоёв для работы! Слои должны быть в корне, не в папках/группах!');
    } else {
        app.preferences.rulerUnits = Units.PIXELS;
        app.preferences.typeUnits = TypeUnits.PIXELS;
        var _docRef = app.activeDocument;  //-- получили документ, в котором работаем    
         _docRef.suspendHistory('ChaosLayers', 'Init()'); //-- Что бы в истории вместо кучи действий было только одно это
     }
}
 

chesen

Топикстартер
15 лет на форуме
Сообщения
553
Реакции
49
Такая же беда во всех скриптах для CS3 при запуске на CS2
 

splxgf

12 лет на форуме
Сообщения
7 744
Реакции
3 425
Код:
 _docRef.suspendHistory('ChaosLayers', 'Init()'); //-- Что бы в истории вместо кучи действий было только одно это
заменить на
Код:
Init();
 
  • Спасибо
Реакции: chesen

kstati

иɯɐɯɔʞ
10 лет на форуме
Сообщения
1 138
Реакции
512
даже не так. Правильнее - по возможности сохранять функционал, при невозможности - не париться и использовать стабильную альтернативу:
Код:
try {
    _docRef.suspendHistory('ChaosLayers', 'Init()');
} catch (err) {
   Init();
}
 

chesen

Топикстартер
15 лет на форуме
Сообщения
553
Реакции
49
Спасибо, все срослось. Вроде все просто, но в полтинник лет основы программирования не хотят укладываться под пену других навыков и умений:)
 

chesen

Топикстартер
15 лет на форуме
Сообщения
553
Реакции
49
Архиполезный скрипт для работы со слоями тоже не играет с CS2. Различии, видимо, в интерфейсе.
Есть ли возможность запустить?
 

Вложения

  • Layer Saver.rar
    7.5 КБ · Просм.: 222
Статус
Закрыто для дальнейших ответов.