Activity › Forums › Adobe After Effects Expressions › simple if then statement based on character length
-
simple if then statement based on character length
-
Adam Greenberg
January 26, 2021 at 2:50 pmHi everyone, I am sure the problem is only with the way I wrote this. I have done and modified countless expressions over the years, but this one isn’t working.
I want my if then statement to change position by 100 pixels based on character length in a text, so here is my expression in the position property of a different layer.
a=thisComp.layer(“text”).text.sourceText.length
if (a>32),[960,540] else [960, 640]
thanks so much for any help.
To further explain the reasoning, I plan on making my text a paragraph text with a limited length horizontally, so that once the text starts appearing on the second line, the expression will move the other layer down, basically keeping this layer a certain amount of pixels lower than the text. I think there might even be better way to create this expression based on sourcerectattime for the height, but Im not sure how.
Thank you
-
Kevin Camp
January 26, 2021 at 8:17 pmI would do it with using sourceRectAtTime().
Parent the layer to the text layer and try this:
rect = parent.sourceRectAtTime() ;
y = rect.top + rect.height ;
value + [ 0, y ]
-
Trent Armstrong
January 26, 2021 at 9:14 pmAdam,
I’m curious if it’s not doing what you want or if it’s breaking. I realized after much gnashing of teeth that the new expression engine asks for more coding language like:
if (a>32) {[960,540]} else {[960, 640]}
Kevin may have gotten you to the right place, but I wanted to make sure you’re not experiencing a “gotcha”.
Trent
-
Adam Greenberg
January 26, 2021 at 10:23 pmTrent, it was showing an error the way I wrote it. But I have no way of knowing the exact problem. your expression works perfectly. Thanks so much
-
Adam Greenberg
January 26, 2021 at 10:24 pmThanks Kevin, yes this looks amazing. I’m going to try this.
Thanks so much
-
Adam Greenberg
January 26, 2021 at 10:41 pmKevin, what if I don’t want to parent it. I may have other things that the text layer is doing that I don’t want the null to follow. I figured out how to modify the beginning by writing the following;
rect = thisComp.layer(“titre”).sourceRectAtTime() ;
y = rect.top + rect.height ;
value + [ 0, y-160 ]
but the problem is the null moves exponentially away from the text, as the text goes into more and more lines. I’m sure it’s an easy fix but I cant figure out the logic on this one, especially rect.top
Thanks again for any help
-
Trent Armstrong
January 27, 2021 at 3:11 pmAdam,
That is good info. I think the problem, at least for the syntax, was the braces for the if/then statement.
if (something) {this} else {that}
— or —
if (something) {
this
} else {
that
}
I’m not sure about your exponential movement issue, but you might need to multiply the height * .5.
We’re all pulling for you!
Reply to this Discussion! Login or Sign Up
Log in to reply.