Skip to content

Commit 7acfca1

Browse files
committed
Shuffle layers
1 parent 7a1c1c6 commit 7acfca1

File tree

1 file changed

+109
-0
lines changed

1 file changed

+109
-0
lines changed

shuffleSelected.jsx

+109
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
/*
2+
Shuffles all selected layers. If none layers selected. shuffles all layers in comp
3+
4+
CC-BY, Alex Kravchenko, 2016
5+
*/
6+
7+
var shuffleLayers = this;
8+
9+
shuffleLayers.shuffle = function(arr)
10+
{
11+
for (var i = arr.length; i; i--)
12+
{
13+
var j = Math.floor(Math.random() * i);
14+
var x = arr[i - 1];
15+
arr[i - 1] = arr[j];
16+
arr[j] = x;
17+
}
18+
}
19+
20+
shuffleLayers.getActiveComp = function()
21+
{
22+
var myComp = app.project.activeItem;
23+
if(!myComp)
24+
return null;
25+
if(!(myComp instanceof CompItem))
26+
return null;
27+
return myComp;
28+
}
29+
30+
shuffleLayers.start = function()
31+
{
32+
app.beginUndoGroup("Shuffle Layers");
33+
var myComp = shuffleLayers.getActiveComp();
34+
if(!myComp)
35+
{
36+
alert("Please open composition");
37+
return 0;
38+
}
39+
40+
//get all selected layers
41+
var selLayers = [];
42+
if(myComp.selectedLayers.length == 0)
43+
for(var i=1; i<=myComp.numLayers;i++)
44+
selLayers.push(myComp.layer(i));
45+
else
46+
for(var i=0; i<myComp.selectedLayers.length;i++)
47+
selLayers.push(myComp.selectedLayers[i]);
48+
49+
//order selected layers by index
50+
var flag = true;
51+
while(flag)
52+
{
53+
flag = false;
54+
for(var i=0;i<selLayers.length-1;i++)
55+
if(selLayers[i].index > selLayers[i+1].index)
56+
{
57+
flag = true;
58+
var x = selLayers[i];
59+
selLayers[i] = selLayers[i+1];
60+
selLayers[i+1] = x;
61+
}
62+
}
63+
64+
//save original indexes, to put layers back there later
65+
var oldIndexes = [];
66+
for(var i=0;i<selLayers.length;i++)
67+
oldIndexes.push(selLayers[i].index);
68+
69+
//shuflle selected layers
70+
shuffleLayers.shuffle(selLayers);
71+
72+
//$.bp();
73+
74+
//put all layers to the bottom of the comp, to avoid interference
75+
for(var i=0;i<selLayers.length;i++)
76+
{
77+
var curLayer = selLayers[i];
78+
var locked = curLayer.locked;
79+
curLayer.locked = false;
80+
curLayer.moveToEnd();
81+
curLayer.locked = locked;
82+
}
83+
84+
//put shuffled layers back to old indexes
85+
for(var i=0;i<selLayers.length;i++)
86+
{
87+
var curLayer = selLayers[i];
88+
var newIndex = oldIndexes[i];
89+
var locked = curLayer.locked;
90+
91+
curLayer.locked = false;
92+
93+
if(newIndex == 1)
94+
{
95+
//$.writeln("Gonna move " + curLayer.index+" to the top");
96+
curLayer.moveToBeginning();
97+
}
98+
else
99+
{
100+
//$.writeln("Gonna move " + curLayer.index+" after " + myComp.layer(newIndex-1).index);
101+
curLayer.moveAfter(myComp.layer(newIndex-1));
102+
}
103+
curLayer.locked = locked;
104+
}
105+
106+
app.endUndoGroup();
107+
}
108+
109+
shuffleLayers.start();

0 commit comments

Comments
 (0)