-
ExtendScript – Call function() from parameter .expression
Hello forum,
I’m hoping someone can point me in the right direction here. I have a script that generates keyframes and a number of control layers with sliders applied based on a dropdown list selection (Dropdown range 1-10)—All working.
However, I am trying to apply an expression to a parameter of the selected layer via .expression, that is generated by a for() loop within a function—Not working.
I do not know if what I’m trying to do is possible or not.
Here’s what I have for the function keyFrameExpression();
pal.grp.groupFive.generateKeyFrameButton.onClick = function() {
app.beginUndoGroup("Generate Keyframes");
var frameOffset = 30; //30FPS
var activeComp = app.project.activeItem;
var offsetInSecs = frameOffset * activeComp.frameDuration;
var myLayers = activeComp.selectedLayers;
if (myLayers.length > 0) {
function keyFrameExpression(){
var key = [];
for(i = 1; i <=pal.grp.groupFive.keyDrop.selection.index; i++){
key[i] = "thisComp.layer('" +myLayers[0].name+ '_key_'+i + "').effect('Slider Control')('Slider').value;\n" +
"if(numKeys > 2){\n" +
"if (time < key(2).time){\n" +
"key1;\n" +
"} else if (time < key('" +[i+2]+ "').time){\n" +
" '" +key[i+1]+ "';\n" +
"}\n" +
"}else{\n" +
"key1;\n" +
"};\n"
}
}
And later on in the script, where the Range Selector is added and where the keyFrameExpression function is called;
//Range Selector 1
var animator1 = myLayers[0].Text.Animators.addProperty("ADBE Text Animator");
animator1.name = ("Keyframe Control '"+pal.grp.groupFive.keyParameterType.selection.text+"'")
var selector1 = animator1.property("ADBE Text Selectors").addProperty("ADBE Text Selector"); //range selector
//selector1.name = ("'"+pal.grp.groupFive.keyBasedOnDrop.selection.text+"'");
var baseUnit = selector1.property("Advanced").property("Units").setValue(2); //Change Range Selector Units to "Index"
var baseBasedOn = selector1.property("Advanced").property("Based On").setValue(pal.grp.groupFive.keyBasedOnDrop.selection.index); // Change Range Selector Based On
selector1.property("ADBE Text Index Start").expression = keyFrameExpression();
selector1.property("ADBE Text Index End").setValue(200); // change Out range to 200
My desired result of selector1.property(“ADBE Text Index Start”).expression = keyFrameExpression(); is that it applies an expression to the (“ADBE Text Index Start”) property that looks like this;
"key1 = thisComp.layer('control-layer-name-1').effect('Slider Control')('Slider)).value;\n" +
"key2 = thisComp.layer('control-layer-name-2').effect('Slider Control')('Slider)).value;\n" +
"key3 = thisComp.layer('control-layer-name-3').effect('Slider Control')('Slider)).value;\n" +
"key4 = thisComp.layer('control-layer-name-4').effect('Slider Control')('Slider)).value;\n" +
"key5 = thisComp.layer('control-layer-name-5').effect('Slider Control')('Slider)).value;\n" +
"if(numKeys > 2){\n" +
"if (time < key(2).time){\n" +
"key1;\n" +
"} else if (time < key(3).time){\n" +
"key2;\n" +
"} else if (time < key(4).time){\n" +
"key3;\n" +
"} else if (time < key(5).time){\n" +
"key4;\n" +
"} else {\n" +
"key5;\n" +
"}\n" +
"}else{\n" +
"key1;\n" +
"};\n"
If I change how the .expression is called to the above desired example, everything in the script works.
Anyone out there know if what I’m attempting is possible, and if not, any suggestions how I should change my approach?
Thanks in advance,
Ronan
Sorry, there were no replies found.