AE TIPS | Форматируем арабские цифры в римские
@dimanas1Доброго времени суток, давно не было постов и настало время исправлять это! Начнём с того что, представьте себе ситуацию, вы — учитель истории и вам нужно сделать титр c указанием века в углу экрана, например, с периода 100 в. до н. э. до 21 в. н. э. что займёт скорее всего минут 20-30 вашего времени, но с помощью этого урока это можно будет исправить (или это можно исправить, если дружишь с учителем по информатике), приступим!

Рассмотрим что у нас должно получиться

Задача:
Написать в слайдер контрол год и получить век римскими. Для нашей эры и до нашей эры.
Решение:
Создадим текстовый слой. Вешаем на него 1 слайдер контрол, 2 чексбокс контрола.
year = год.
era = будет ли у нас подпись эры.
RU/ENG = переключатель русского на английский
Прописываем в сурсТекст следующее выражение:

// for sourceText
var num = effect("year")("Slider");
var century = Math.ceil(Math.abs(num) / 100);
var era = effect("era")("Checkbox");
var lang = effect("RU/ENG")("Checkbox");
var beforeThisEraRU = " \u0432. \u0434\u043e \u043d. \u044d."
var beforeThisEraENG = " B.C."
if (lang == 0) beforeThisEra = beforeThisEraRU; else beforeThisEra = beforeThisEraENG;
var result = '';
var roma = ['M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I'];
var arab = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1];
var arab_n = [-1000, -900, -500, -400, -100, -90, -50, -40, -10, -9, -5, -4, -1];
for (var x = 0; x < roma.length; x++) {
while (century >= arab[x]) {
result += roma[x];
century -= arab[x];
};
while (century <= arab_n[x]) {
result += roma[x];
century -= arab_n[x];
}
};
if (era == 1 && num < 0) result = result + beforeThisEra;
else result;
result;
В целом всё готово!
Теперь поднимем уровень и попытаемся решить задачу из описания.

Задача:
Нам нужно создать 121 слой с названием века, чтобы в названии слоя был указан сам век, с указанием принадлежности к эре, и отрендерить каждый слой.
Решение:
Создавать руками 121 слой довольно нудное занятие, поэтому решим это небольшим скриптом:

Немного опишу что происходит в скрипте:
— Создаем минимальное и максимальное количество,
— Пушим в массив все значения которые нам нужны (начиная с минимального и заканчивая максимальным),
— Создаём цикл для всех веков (можно было конечно вместо значения, указать длину массива),
— Создаём текстовый слой, даём ему название из массива веков, создаем слайдер контрол, к нему в прописываем выражение, которое будет получать значение из названия слоя (хотя тут можно было пойти по другому и вместо этого туда присвоить i), далее создаём 2 чекбокса, и немного видоизменённое выражение для сурсТекста (стоит обратить внимание на бэкслешы, они нужны в конце каждой строки, и конечно же соблюдать у всех кавычек одинаковый рисунок, или экранить их),
— Цикл закончился, удаляем 0 век.
Здесь можно ознакомиться с текстовым файлом скрипта.
И теперь воспользуемся скриптом renderLayers и каждый слой просчитаем (на гифке я немного оплашал с названием слоёв)
Всем спасибо за то, что дочитали до этого места.
Кстати, я решил дублировать посты на Medium.
Если у вас есть свои готовые кейсы оптимизации рутинных задач для AE или задача, которая вас заставляет каждый день реализовывать собственноручно, то пишите мне в личку, попробуем что-нибудь придумать.
Блокировка Телеграмма никак не повлияет на выпуск постов в этом блоге.
Если вам интересны подобные фишки, то подписывайтесь на Телеграм-канал.