Expresiones
Como usar TextLayerBounds
by _TheAway on May.10, 2009, under Expresiones
Esta expresión es especifica para el TextLayerBounds y para una composición con varias capas. Es totalmente inutil en el Karaoke 1.3.1 ya que directamente esta expresion ya forma parte del Master.
//Escribe aquí el nombre de la composición donde se han creado las lineas del SSA
Compo=comp(”Composicion Karaoke”);
if (time >0 && Compo.layer(1).outPoint>time)
{
a=Compo.numLayers;
while (a>0 && Compo.layer(a).inPoint<=time)
{
a=a-1;
}
//Aqui Compo.layer(a+1) es el layer actual
layerActual=Compo.layer(a+1);
//Si no estas usando el Karaoke 1.X sobra el if, lo aplicarias directamente tendrias que
//borrar desde aqui
if(layerActual.name!=”Master”)
{
//Hasta aquÃ
izquierda=layerActual.effect(”TextLayerBounds”)(”Superior izquierda”)[0];
derecha=layerActual.effect(”TextLayerBounds”)(”Inferior derecha”)[0];
abajo=layerActual.effect(”TextLayerBounds”)(”Inferior izquierda”)[1];
arriba=layerActual.effect(”TextLayerBounds”)(”Superior izquierda”)[1];
//abajo + arriba / 2 es, como sabeis, la media aritmetica. Luego estará centrado en la altura de la capa
[izquierda,(abajo+arriba)/2]
//Si sobra el if borras tambien desde aquÃ
}
else
{
[-100,0]
}
//Hasta aquÃ
}
else
{
//si no hay ninguna capa ponlo en 0,0
[0,0]
}
Como acceder a los valores de los efectos usando expresiones
by _TheAway on May.10, 2009, under Expresiones
Acceder a los efectos de las capas es sencillo. Ya que existe una funcion para ello, Effect(). Sin embargo, acceder a un parametro de el efecto no es tan obvio.
En las expresiones, AE trata a los efectos y sus parametros como un arbol. Al usar effect. Cada vez que abres y cierras parentesis, estas accediendo a un nodo hijo de el inmediato a la izquierda. De forma que si haces:
thisLayer.effect(”Glow”);
Lo que está devolviendo es el nodo de este arbol , el efecto en si, y seria algo que a nosotros no nos valdria para nada. Ya que no guarda ninguna informacion de utilidad. Para acceder a lo que nos seria util, vamos, a los valores. Hemos de elegir algun parametro.
Para ello una vez elegido el efecto hay que volver a direccionar el parametro. Que como dije arriba, es con los parentesis. Asi esta expresion:
thisLayer.effect(”Glow”)(”Alpha”);
Esta seleccionando el valor del parametro Alpha de el efecto Glow. Si por algun casual este parametro fueses un parametro compuesto y tuviera otros parametros dependiendo de ellos seria otra vez abrir y cerrar parentesis para seleccionar un parametro hijo.
En ejemplo practico:
Si aplicas TextLayerBounds a una capa de texto y quieres acceder al valor del punto de la esquina inferior derecha desde otra capa seria escribir:
derecha=thisComp.layer(”Texto”).effect(”TextLayerBounds”)(”Inferior derecha”);
En este caso derecha tendria el valor del punto asociado.
X=thisComp.layer(”Texto”).effect(”TextLayerBounds”)(”Inferior derecha”)[0];
Y=thisComp.layer(”Texto”).effect(”TextLayerBounds”)(”Inferior derecha”)[1];
Asi obtienes el valor X e Y respectivamente del punto.
Fade in fade out sencillo con expresiones
by _TheAway on May.10, 2009, under Expresiones
layerActual=thisLayer;
tiempo=0.5;
if (time>layerActual.inPoint && time < layerActual.outPoint )
{
if (time < layerActual.inPoint+tiempo )
{
linear(time,layerActual.inPoint ,layerActual.inPoint+tiempo,0,100)
}
else if (time>layerActual.outPoint-tiempo )
{
linear(time,layerActual.outPoint-tiempo ,layerActual.outPoint,100,0)
}
else
{
100
}
}
else
{
0
}
Expresión que recorre los layers.
by _TheAway on May.10, 2009, under Expresiones
Compo=thisComp;
if (time >0 && Compo.layer(1).outPoint > time )
{
a=Compo.numLayers;
while (a >0 && Compo.layer(a).inPoint<=time)
{
a=a-1;
}
//Aqui Compo.layer(a+1) es el layer actual
layerActual=Compo.layer(a+1);
// Se realiza lo que haya que realizar
}
else
{
//caso nulo
}
Realiza una acción entre 2 markers
by _TheAway on May.10, 2009, under Expresiones
layerActual=thisLayer;
//Extrae los markers de el layer
marcadores=layerActual.marker;
ind=marcadores.nearestKey(time).index;
if (ind<=2)
{
valor=marcadores.key(2).time-marcadores.key(1).time;
indA=1;
}
else {
if (marcadores.key(ind).time<time && marcadores.numKeys>ind)
{
ind=ind+1;
}
//indice anterior
indA=marcadores.key(ind-1).index;
//tiempo de el indice siguiente
valor=marcadores.key(ind).time-marcadores.key(indA).time;
}
//Se realiza la operacion que se quiera realizar en este caso es un incremento gradual de 0 a 1
//en el tiempo entre los markers
linear(time,marcadores.key(indA).time,marcadores.key(ind).time,0,1)