Выражения. 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]; //Расположить слой по центру композиции