Activity › Forums › Adobe After Effects Expressions › Is there any idea why this gave undefined error?
-
Is there any idea why this gave undefined error?
Posted by Palak Bhatt on July 29, 2020 at 8:08 pmCheck below code, Please let me know why this code give error “undefined”
var myLayers = app.project.activeItem.selectedLayers;
if (myLayers.length > 0){
for (var i=0; i <= thisComp.selectedLayers.length; i++){
var d = myLayers[i].index;
alert(myLayers[i].index);
}app.project.activeItem.layer(d).moveAfter(app.project.activeItem.layer(d+10));
}else{
alert ("No layers selected.");
}
Filip Vandueren replied 6 years ago 2 Members · 6 Replies -
6 Replies
-
Palak Bhatt
July 29, 2020 at 9:16 pmThanks ☺ Brothers i have no words for you.
I have the other question
I am trying to move all selected layers at every Nth number.What should i do this code to works?
var d = 0;
var myLayers = app.project.activeItem.selectedLayers;
var myMove = app.project.activeItem;if (myLayers.length > 0){
for (var i=0; i < myLayers.length; i++){
d = myLayers[i].index;
}
myMove.layer(d).moveAfter(myMove.layer(d+10));}else{
alert ("No layers selected.");
}
-
Palak Bhatt
July 29, 2020 at 9:24 pmThe problem is on above code is only moved last number of selected layer, How can I move bulk layers at once? at fixed number of layers
-
Palak Bhatt
July 29, 2020 at 9:37 pmI Got it ☺
Check it below
Thank you, BrotherI want to add you on Facebook if you don’t mind
give me your id if possible, You are super pro :)))
many thanksver NumberOfMove = 10;
var myLayers = app.project.activeItem.selectedLayers;
var myMove = app.project.activeItem;if (myLayers.length > 0){
for (var i=0; i < myLayers.length; i++){
var d = myLayers[i].index;
myMove.layer(d).moveAfter(myMove.layer(d+NumberOfMove));
}}else{
alert ("No layers selected.");
} -
Palak Bhatt
July 29, 2020 at 9:49 pmCorrected and tested
Now its finalvar d = 0;
var NumberOfMove = 2;
var myLayers = app.project.activeItem.selectedLayers;
var myMove = app.project.activeItem;if (myLayers.length > 0){
for (var i=0; i < myLayers.length; i++){
d = myLayers[i].index;myMove.layer(d).moveAfter(myMove.layer(d+NumberOfMove+myLayers.length));
}}else{
alert ("No layers selected.");
} -
Filip Vandueren
July 30, 2020 at 11:46 amI don’t really understand how you want the layers to move with this code, It seems very unpredictable.
If you want the layers to move down by “numberOfMove”, it’s best to cycle through them backwards, because moving a layer will change the indexes of all the layers after it.
So we first order the selectedLayers by index descending (they are in the list in the order that they were clicked on, not in the order of index)I’ve changed the code a bit so it also works for negative numbers.
var numberOfMove = 2;
var myComp = app.project.activeItem;
var myLayers = myComp.selectedLayers;myLayers.sort( function(a,b) { return b.index - a.index }); // reverse sort layers by index
if (numberOfMove < 0) myLayers.reverse(); // except if we're moving backwards, then we do want sorted by index ascendingif (myLayers.length > 0){
for (var i=0; i< myLayers.length; i++){
d = Math.min ( d , myComp.numLayers-i); // never move than the number of layers
if (myLayers[i].index!==d) { // can't move a layer after itself
myLayers[i].moveAfter(myComp.layer(d));
}
} else {
d= Math.max (d, 1+i); // never less than 1st layer
if (myLayers[i].index!==d) { // can't move a layer before itself
myLayers[i].moveBefore(myComp.layer(d));
}
}
}}else{
alert ("No layers selected.");
}
Reply to this Discussion! Login or Sign Up