Skip to main content

sourceRectAtTime e expressões de texto

Duas das features menos conhecidas das expressões do after que resolvem problemas comuns em projetos reais.

sourceRectAtTime: bounding box dinâmica

Retorna as dimensões e posição do bounding box de uma layer num determinado momento.

var rect = thisLayer.sourceRectAtTime(time);
rect.width // largura do conteúdo
rect.height // altura
rect.top // distância do topo ao anchor point
rect.left // distância da esquerda ao anchor point

Background que acompanha o texto

// aplica em Scale da layer de fundo
var textLayer = thisComp.layer("Meu Texto");
var rect = textLayer.sourceRectAtTime(time);
var padding = 40;
var bgRect = thisLayer.sourceRectAtTime(time);
var scaleX = (rect.width + padding) / bgRect.width * 100;
var scaleY = (rect.height + padding) / bgRect.height * 100;
[scaleX, scaleY]

Centralizar um elemento em outro

var textLayer = thisComp.layer("Texto");
var rect = textLayer.sourceRectAtTime(time);
var center = textLayer.toComp([
rect.left + rect.width/2,
rect.top + rect.height/2
]);
center

Expressões em source text

Clica no stopwatch de Source Text (não das propriedades de transform) pra adicionar expressão.

// frame atual
"Frame: " + Math.round(time / thisComp.frameDuration)
// timer MM:SS
var t = Math.floor(time);
var min = Math.floor(t / 60);
var sec = t % 60;
var minStr = min < 10 ? "0" + min : "" + min;
var secStr = sec < 10 ? "0" + sec : "" + sec;
minStr + ":" + secStr
// contador animado via slider
var valor = thisComp.layer("CONTROLES").effect("Contador")("Slider");
Math.round(valor).toString()
// texto que muda baseado em condição
var op = thisComp.layer("Elemento").transform.opacity;
if (op > 50) {
"VISÍVEL"
} else {
"OCULTO"
}
// exibe nome da layer abaixo
thisComp.layer(thisLayer.index + 1).name