ExtendScript Level 2

Сразу не будем углубляться в тяжёлый код, начнём с чего-то лёгкого. Приступим.

 var a = "This is a simple string of text";
 alert(a.length);

AE выдаст количество символов заключённой в переменную "а". Теперь создадим слово, которое будет являться объектом поиска.

 var a = "This is a simple string of text";
 var b = "text";

 alert(a.indexOff(b));

AE выдаст порядковй номер символа, когда начинается наш объект поиска. Если мы будем искать несуществующее слово, допусти "cat", то AE выдаст значение -1, что значит такого не существует. Для тех кто постоянно забывает, что за фигню мне АЕ выкидывает(-1), можем сделать следующее

 var a = "This is a simple string of text";
 var b = "cat";

 alert(a.indexOff(b) == (-1));

В результате получим "true". Также есть второй способ по поиску.

alert(a.match(b)); 

Если объект найден, то АЕ выдаст наш поисковый объект, если не найден, то АЕ выдаст null




Поработаем с предыдущем примером. Нам нужно заменить в переменной "а" все "simple" на "happy". Делается это так.

 var a = "This is a simple string of text";
 var b = "happy";

alert(a.replace(new RegExp("simple", "g"), b));

Выражение говорит следующее: зaмени все simple глобально на happy

Также можем вывести в alert определённое количество символов заключённых в переменную.

 var a = "This is a simple string of text"; 
 alert(a.substr(0, 4));
Мы задали показать символы начиная с самого начала и на 4 вперёд. Аналогично с 10 символа и на 4 вперёд alert(a.substr(10, 4)); Очень полезно знать , что указывая отрицательное число (-5), то счёт будет идти с конца

Следующий метод split() будет разделять вашу переменную в указанном месте пополам на массивы.

var a = "First.Second";
alert(a.split("."));

АЕ нам выдаст значение первого и второго массива через запятую(Если точек больше чем одна, то и массивов будет такое же количество)

var a = "First.Second";
alert(a.split(".")[1]);

В данном случае АЕ нам выдаст значение только второго массива




Некоторые полезные штуки. Сделать все буквы заглавными

var a = "Hello World";
alert(a.toUpperCase());

Теперь все буквы маленькими.

var a = "Hello World";
alert(a.toLowerCase());

Чаще всего на практике мы будем делать, что-то такое.

var pic = "myPicture.jpg";
var action = pic.split(".");
var result = action[1].toUpperCase();

alert(result);




Теперь будем прописывать кейфрэймы через ExtendScript:

var prop1 = app.project.item(1).layer(1).property("ADBE Transform Group").property("ADBE Position");

var fourKeys=4;

app.beginUndoGroup("Keys");

for(var k=0; k<fourKeys; k++){
prop1.addKey(4);
}

app.endUndoGroup();

 Что мы здесь сделали так это прописали доступ к параметру Position объекта. Следующие создали undoGroup, чтобы можно было легко вернуть действия в начальный вид. В группе прописали цикл for, который создаёт 4 кейфрейма на 0, 1, 2, 3 секундах. Время композиции всегда в секундах, если Вам удобно во фреймах работать, то нужно перевести секунды во фреймы.

 Но в данном случае мы никак не анимировали наш солид мы просто создали 4 кейфрейма. Теперь попробуем прописать движение солида:

var prop1 = app.project.item(1).layer(1).property("ADBE Transform Group").property("ADBE Position");

var fourKeys=4;
var addTheseKeys = new Array(1, 2, 3,4);
var keyValues = new Array([120,120], [200,200], [80,80], [150,150]);

app.beginUndoGroup("Keys");

for(var k=0; k<fourKeys; k++){
prop1.setValueAtTime(addTheseKeys[k], keyValues[k]);
}

app.endUndoGroup();

Мы создали четыре переменных с координатами. И в цикле прописали применить кейфреймы к объекту. Если у Вас много лэеров, то цикл может занять больше времени для обработки. В этом случае вместо цикла for используем аналогичную функцию:

setValuesAtTimes(addTheseKeys, keyValues);

Результат такой же.

Чтобы вывести данные кейфреймов напишем вот такой скрипт:

var prop1 = app.project.item(1).layer(1).property("ADBE Transform Group").property("ADBE Position");

var keyLength = prop1.numKeys;
var vals = new Array();


app.beginUndoGroup("Keys"); 
for(var k=0; k<fourKeys; k++){
vals[vals.length] = prop1.keyValue(k+1);
}app.endUndoGroup();

alert(vals);




Сейчас разберём большую тему это чтение текстового файла с помощью ExtendScript и перенесение содержимого текстового файла в After Effects.

var newFile = File.openDialog("Choose File to Read"); // - функция, которая вызывает окно для того чтобы выбрать файл

if(newFile != null){
 var a = readDocumen(newFile, 0).contentAry
// - Если файл не равен нулю(тоесть если он существует), то выполняется чтение действующего файла(newFile) и пропускается 0 строчек, тоесть читается весь файл. В итоге мы вызываем две величины

app.beginUndoGroup("Import Text");
 createNewComps(a);
app.endUndoGroup();
}

function readDocument(inputDoc, linesToSkip){
 var curDoc = new File(inputDoc);
  if (curDoc.exists){
   var contentAry = new Array();
   curDoc.open("r") // создаём новый файл. На основе выбранного. Проверяем существует ли он, если да, то создаём новый массив и читаем наш файл

while(!curDoc.eof){ // eof - EndOfFile
  contentAry[contentAry.length] = curDoc.readln();
  } // до тех пор пока мы не находимся в коцце файла, то заносим в массив каждые строки
  curDoc.close(); 
 } // - в данном случае мы написали функцию, которая будет открывать файл, читать его и закрывать. Это всё будет происходить за сценой, мы этого не увидим
contentary.splice(0, lineToSkip);

 var contentList = contentAry.join("_ART_").toString.replace(new RegExp("_ART_", "g"), "r"); // так как одна строка у нас является одним значением в массиве, то вместо запятое вставляем новую строку
contentAry = contentAry;
return{
'contentAry': contentAry;
'contentList': contentList;
} // так как в самом начале мы прописали ...(newFile, 0).contentAry , то значит мы запрашиваем в виде массива. Но если мы прописали бы вот так :...(newFile, 0).contentList, то мы бы запросили всё содержимое текстового файла в виде списка
}


На этом этапе остановимся, всё желательно переварить и понять. Так как это функция, то её очень удобно свернуть и будет у нас видна толкько одна вот такая строка : 
function readDocument(inputDoc, linesToSkip){

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

No comments:

Post a Comment