Выражения. After Effects. Метод sourceRectAtTime(t = time, include Extents = false)
Метод sourceRectAtTime(t = time, includeExtents = false) в After Effects используется для получения размеров и положения прямоугольной области слоя (например, текста или шейпа) в указанный момент времени.
Список эффектов и не только After Effects
Выражения After Effects список
Метод sourceRectAtTime работает только с текстовыми и шейповыми слоями. Для других типов слоев (например, видео) оно вернет размеры композиции.
t — время, на которое запрашивается информация (по умолчанию — time, т.е. текущее время). Можно указать конкретное время, например, sourceRectAtTime(2, false), чтобы получить размеры на 2-й секунде.
По умолчанию — false.
Если установить true, метод учтет границы для текста или обводку для шейпов. Это полезно, если нужно включить рамку текста, заданную в настройках, но в большинстве случаев false достаточно для работы с реальным содержимым.
Вот свойства объекта, возвращаемого sourceRectAtTime(time, includeExtents):
top
Расстояние от верхней границы слоя до верхней границы содержимого. Число (float). Значение в пикселях, может быть отрицательным.
left
Расстояние от левой границы слоя до левой границы содержимого. Число (float). Значение в пикселях, может быть отрицательным.
width
Ширина ограничивающего прямоугольника содержимого слоя. Число (float). Значение в пикселях, всегда положительное число.
height
Высота ограничивающего прямоугольника содержимого слоя. Число (float). Значение в пикселях, всегда положительное число.
var rect = thisLayer.sourceRectAtTime(time, false);
// Получим:
//rect.top // например: -142
//rect.left // например: -270
//rect.width // например: 272
rect.height // например: 126
Значения top и left — смещения от (0,0) якорной точки содержимого.
——-
Переместить Anchor Point в центр текста, чтобы удобно анимировать Применяется к Anchor Point.
var rect = thisLayer.sourceRectAtTime(time, false);
centerX = rect.left + rect.width / 2; // Определяем центр текстового блока
centerY = rect.top + rect.height / 2;[centerX, centerY]; // Возвращаем полученные координаты центра
———
Пример доступа к параметрам:
Вариант 1
rect = sourceRectAtTime(time, false);
Width = rect.width;
Height = rect.height;[Width, Height];
Вариант 2
x = thisLayer.sourceRectAtTime(time, false).width;
y = thisLayer.sourceRectAtTime(time, false).height; //Масштаб
[x, y];
———————-
Связать размеры двух слоев
var textLayer = thisComp.layer(«Text»);
var Text = textLayer.sourceRectAtTime(time, false);
var WidthText = Text.width;
var HeightText = Text.height;
var formLayer = thisComp.layer(«Слой-фигура 1»);
var rect = formLayer.sourceRectAtTime(time, false);
var WidthForm = rect.width;
var HeightForm = rect.height;[WidthForm — WidthText, HeightText — HeightForm];
Вариант 2 с методом Math.abs()
var textLayer = thisComp.layer(«Text»);
var Text = textLayer.sourceRectAtTime(time, false);
var WidthText = Text.width;
var HeightText = Text.height;
var formLayer = thisComp.layer(«Слой-фигура 1»);
var rect = formLayer.sourceRectAtTime(time, false);
var WidthForm = rect.width;
var HeightForm = rect.height;[Math.abs(WidthForm — WidthText), Math.abs(HeightForm — HeightText)];
Вариант 3
var textLayer = thisComp.layer(«Text»);
var Text = textLayer.sourceRectAtTime(time, false);
var WidthText = Text.width;
var HeightText = Text.height;
var formLayer = thisComp.layer(«Слой-фигура 1»);
var rect = formLayer.sourceRectAtTime(time, false);
var WidthForm = rect.width;
var HeightForm = rect.height;[Math.abs(WidthForm — WidthText) + 50, Math.abs(HeightForm — HeightText) + 50];
———————————-
// Извлекаем размеры содержимого на текущем кадре
var rect = thisLayer.sourceRectAtTime(time, false);
// Задаем желаемую ширину, например, ширину композиции
var targetWidth = thisComp.width;
// Вычисляем процентное соотношение масштаба по оси X
var scaleX = (targetWidth / rect.width) * 100;
var scaleY = transform.scale[1];[scaleX, scaleY];
// Если требуется сохранить пропорции, можно использовать одинаковый масштаб для обеих осей:[scaleX, scaleX];
[thisComp.width / 2, thisComp.height / 2]; //Расположить слой по центру композиции