Activity › Forums › Adobe After Effects Expressions › Highest Keyframe Value
-
Highest Keyframe Value
Posted by Kevin Snyder on January 3, 2022 at 9:23 pmI’m using the expression below to get the highest keyframe value of an animated property. The only problem is that properties that are more than one value, like position, have to be separated, which doesn’t work for scale. Is there a way to get the highest value without separating the dimensions and specify which value it’s measuring?
For example, find the highest x position keyframe value whether the dimensions are separated or not.
a = thisComp.layer("Shape Layer 1").transform.xPosition; max = a.value; for (i = 1; i <= a.numKeys; i++){ max = Math.max(max,a.key(i).value); } max
Kevin Snyder replied 3 years, 3 months ago 4 Members · 14 Replies -
14 Replies
-
Levi Borland
January 4, 2022 at 1:56 amThis for has a algorithmic efficiency of 2^n. In other words it completes two tasks each iteration (n standing for the total number of repeated iterations)Those two tasks are checking the current value of the next index, and then comparing it to the current max value. It then needs to repeat this process for the entire list of values. As you mentioned, this would not scale well at all. This becomes further complicated as positional data is usually stored as a 2 value (X and Y) or 3 value array (3D Z Position, X, and Y). This requires the additional use of the variable a in your code. But there is an easy way to reference to a specific dimension value, and that is by it’s index.
transform.Position.value[0] = X Value
transform.Position.value[1] = Y Value
transform.Position.value[2] = Z Value (If you are working with 3D Layers)
_______________________________________
try this….might work and might not….I am typing it out here and not in an IDE or AE Expression Field.
———————————————>
max = thisComp.layer(“Shape Layer 1”).transform.Position.value[0];
for (i = 1; i<=thisComp.layer(“Shape Layer 1”).transform.Position.numkeys; i++) {
max = Math.max(max, max.key(i).value);
}
max
The example above might not be perfect but it removes at least one step of assigning an A variable each iteration. As well as eliminates the need to have the algorithm manually assign a temp value to Max by extracting the X Position Data. This instead just assigns the value of the Shape Layers X Position Value by referring to it by it’s array index.
As mentioned this code may not work as I am typing it out here. I would also suggest assigning a different variable name for max such as maxXPosVal so it doesn’t get confused with the Math.max method you are calling. It will also make future code review easier when you have spent some time apart.
I hope this all made sense, and I also hope I didn’t just make a fool of myself with the code. I just started JavaScript recently but have tons of experience with Java. Pretty similar, just slightly different syntax.
Let me know if this solves your query, or at least help you along in the right direction.
-
Kevin Snyder
January 5, 2022 at 10:20 pmThank you for your effort. For some reason, this method won’t work. I’m not why as I have done it that way in the past, but in this case, it returns a syntax error.
-
Levi Borland
January 12, 2022 at 3:28 pmCan you screenshot the syntax error. It probably is because I didn’t put punctuation in the right place or something.
-
Kevin Snyder
January 12, 2022 at 9:34 pmI tried that right after I posted the image. The same error on line one occurs.
-
Andrei Popa
January 12, 2022 at 9:59 pmYour quotes are wrong, probably formatted from the forum. Delete and re-write them.
-
Levi Borland
January 12, 2022 at 9:59 pmClick on the orange or yellow triangle with the exclamation point to the left of the red arrow. It should give you more info. Can you screenshot that?
-
Levi Borland
January 12, 2022 at 10:15 pmNevermind, I put it into AE and it doesn’t give any meaningful help.
-
Levi Borland
January 12, 2022 at 10:30 pmDelete the quotes around shape layer 1 and shape layer 1. Re type the quotes and then Shape Layer 1 inside the new quotes. Perhaps they are two opening quotes, or closing quotes instead of one of each.
Reply to this Discussion! Login or Sign Up