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údorect.height // alturarect.top // distância do topo ao anchor pointrect.left // distância da esquerda ao anchor pointBackground que acompanha o texto
// aplica em Scale da layer de fundovar 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]);centerExpressõ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:SSvar 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 slidervar valor = thisComp.layer("CONTROLES").effect("Contador")("Slider");Math.round(valor).toString()// texto que muda baseado em condiçãovar op = thisComp.layer("Elemento").transform.opacity;if (op > 50) { "VISÍVEL"} else { "OCULTO"}// exibe nome da layer abaixothisComp.layer(thisLayer.index + 1).name