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