11/* @requires utils.jsx */
22
3- function explodeLayer ( layers ) {
3+ function explodeLayer ( layer ) {
44
55 consLog ( '==============\n==============' ) ;
66
7- // Check if multiple layers selected
8- if ( layers . length > 1 ) {
9- alert ( "Select a single shape layer" ) ;
10- return ;
11- }
7+ // Get the elements of the original shape layer
8+ var contents = layer . property ( "Contents" ) ;
9+ var layers = [ ] ;
1210
13- // Get the selected layer
14- var layer = layers [ 0 ] ;
11+ if ( contents . numProperties > configs . itemAmountWarning ) {
1512
16- // Check if the layer is null or wrong type
17- if ( layer == undefined || layer . matchName !== 'ADBE Vector Layer' ) {
18- alert ( "Select a shape layer" ) ;
19- return ;
20- }
13+ var go = confirm (
14+ 'You have more than ' + configs . itemAmountWarning + ' elements. '
15+ + 'Execution time might be long, are you sure you want to continue ?'
16+ ) ;
2117
22- var comp = layer . containingComp ;
23-
24- // Get the elements of the original shape layer
25- var contents = layer . property ( "Contents" ) ;
26- var n_layers = [ ] ;
18+ if ( ! go ) return ;
2719
28- if ( contents . numProperties > configs . itemAmountWarning && ! confirm ( 'You have more than ' + configs . itemAmountWarning + ' elements. Execution time might be long, are you sure you want to continue ?' ) )
29- return ;
20+ }
3021
3122
3223 // Browse through contents array
3324 for ( var i = contents . numProperties ; i > 0 ; i -- ) {
3425
3526 // Get the original property
36- var o_prop = contents . property ( i ) ;
27+ var _prop = contents . property ( i ) ;
3728
3829 // Skip the property if not enabled
39- if ( o_prop . enabled ) {
30+ if ( ! _prop . enabled ) continue ;
4031
41- // Duplicate the original layer and rename with property name
42- var n_layer = comp . layers . addShape ( ) ;
43- n_layer . name = o_prop . name ;
44- n_layer . enabled = false ;
32+ // Duplicate the original layer and rename with property name
33+ var new_layer = emptyDuplicateLayer ( layer )
4534
46- n_layers . push ( n_layer ) ;
35+ new_layer . name = layer . name + ' - ' + _prop . name ;
36+ new_layer . enabled = false ;
4737
48- copyLayerTransform ( layer , n_layer ) ;
38+ layers . push ( new_layer ) ;
4939
50- // Get the elements of the new layer
51- var n_layerContents = n_layer . property ( "Contents" ) ;
40+ if ( ! new_layer . property ( "Contents" ) . canAddProperty ( _prop . matchName ) ) continue ;
5241
53- insertPropertyToContents ( o_prop , n_layerContents , '' )
42+ var prop = new_layer . property ( "Contents" ) . addProperty ( _prop . matchName )
5443
55- }
44+ copyProperties ( _prop , prop , '' )
45+
46+ }
47+
48+ for ( var i = 0 ; i < layers . length ; i ++ ) {
49+ layers [ i ] . enabled = true ;
50+ }
51+
52+ }
5653
54+ function explode ( ) {
55+
56+ // Check if multiple layers selected
57+ if ( app . project . activeItem . selectedLayers . length > 1 ) {
58+ alert ( "Select a single shape layer" ) ;
59+ return ;
5760 }
5861
59- for ( var i = 0 ; i < n_layers . length ; i ++ ) {
60- n_layers [ i ] . enabled = true ;
62+ var selectedLayer = app . project . activeItem . selectedLayers [ 0 ] ;
63+
64+ // Check if the layer is null or wrong type
65+ if ( selectedLayer == undefined || selectedLayer . matchName !== 'ADBE Vector Layer' ) {
66+ alert ( "Select a shape layer" ) ;
67+ return ;
6168 }
6269
70+ explodeLayer ( selectedLayer ) ;
71+
6372}
6473
65- function insertPropertyToContents ( prop , contents , prefix ) {
74+ function emptyDuplicateLayer ( layer ) {
6675
67- if ( ! contents . canAddProperty ( prop . matchName ) )
68- return false ;
76+ var new_layer = layer . containingComp . layers . addShape ( ) ;
6977
70- var n_prop = contents . addProperty ( prop . matchName )
78+ copyProperty ( 'anchorPoint' , layer , new_layer ) ;
79+ copyProperty ( 'position' , layer , new_layer ) ;
80+ copyProperty ( 'scale' , layer , new_layer ) ;
81+ copyProperty ( 'rotation' , layer , new_layer ) ;
82+ copyProperty ( 'opacity' , layer , new_layer ) ;
7183
72- for ( var i = 1 ; i <= prop . numProperties ; i ++ ) {
84+ return new_layer ;
7385
74- var innerProp = prop . property ( i ) ;
86+ }
7587
76- if ( innerProp . enabled && n_prop . canAddProperty ( innerProp . matchName ) ) {
88+ function copyProperties ( origin , target , prefix ) {
7789
78- consLog ( prefix + innerProp . matchName ) ;
90+ for ( var i = 1 ; i <= origin . numProperties ; i ++ ) {
7991
80- var p = n_prop . property ( innerProp . matchName ) ? n_prop . property ( innerProp . matchName ) : n_prop . addProperty ( innerProp . matchName ) ;
92+ var _prop = origin . property ( i ) ;
8193
82- switch ( innerProp . matchName ) {
94+ if ( ! _prop . enabled || ! target . canAddProperty ( _prop . matchName ) ) return ;
8395
84- case 'ADBE Vector Filter - Merge' :
85- copyProperty ( 'mode' , innerProp , p )
86- break ;
96+ consLog ( prefix + _prop . matchName ) ;
8797
88- case 'ADBE Vector Materials Group' :
89- consLog ( prefix + '-- skipped' ) ;
90- break ;
98+ var prop = target . addProperty ( _prop . matchName ) ;
9199
92- case 'ADBE Vector Graphic - Stroke' :
93- copyPropertyStroke ( innerProp , p ) ;
94- break ;
100+ switch ( _prop . matchName ) {
95101
96- case 'ADBE Vector Graphic - Fill ' :
97- copyPropertyFill ( innerProp , p ) ;
98- break ;
102+ case 'ADBE Vector Filter - Merge ' :
103+ copyProperty ( 'mode' , _prop , prop )
104+ break ;
99105
100- case 'ADBE Vector Transform Group' :
101- copyPropertyTransform ( innerProp , p ) ;
102- break ;
106+ case 'ADBE Vector Materials Group' :
107+ consLog ( prefix + '-- skipped' ) ;
108+ break ;
103109
104- case 'ADBE Vector Shape - Rect ' :
105- copyPropertyRect ( innerProp , p ) ;
106- break ;
110+ case 'ADBE Vector Graphic - Stroke ' :
111+ copyPropertyStroke ( _prop , prop ) ;
112+ break ;
107113
108- case 'ADBE Vector Shape - Ellipse ' :
109- copyPropertyEllipse ( innerProp , p ) ;
110- break ;
114+ case 'ADBE Vector Graphic - Fill ' :
115+ copyPropertyFill ( _prop , prop ) ;
116+ break ;
111117
112- case 'ADBE Vector Shape - Star ' :
113- copyPropertyStar ( innerProp , p ) ;
114- break ;
118+ case 'ADBE Vector Transform Group ' :
119+ copyPropertyTransform ( _prop , prop ) ;
120+ break ;
115121
116- case 'ADBE Root Vectors Group' :
117- case 'ADBE Vectors Group' :
118- case 'ADBE Vector Group' :
119- insertPropertyToContents ( innerProp , n_prop , prefix += ' ' )
120- break ;
122+ case 'ADBE Vector Shape - Rect' :
123+ copyPropertyRect ( _prop , prop ) ;
124+ break ;
121125
122- case 'ADBE Vector Shape - Group ' :
123- copyPropertyShape ( innerProp , p ) ;
124- break ;
126+ case 'ADBE Vector Shape - Ellipse ' :
127+ copyPropertyEllipse ( _prop , prop ) ;
128+ break ;
125129
126- default :
127- p . setValue ( innerProp . value ) ;
130+ case 'ADBE Vector Shape - Star' :
131+ copyPropertyStar ( _prop , prop ) ;
132+ break ;
128133
134+ case 'ADBE Root Vectors Group' :
135+ case 'ADBE Vectors Group' :
136+ case 'ADBE Vector Group' :
137+ copyProperties ( _prop , prop , prefix += ' ' )
138+ break ;
129139
140+ case 'ADBE Vector Shape - Group' :
141+ copyPropertyShape ( _prop , prop ) ;
142+ break ;
130143
131- }
144+ case 'ADBE Vector Blend Mode' :
145+ prop . setValue ( _prop . value ) ;
146+ break ;
132147
133148 }
134149
135150 }
136151
137-
138152}
139153
140154function copyProperty ( name , origin , target ) {
@@ -155,18 +169,18 @@ function copyPropertyStroke(origin, target) {
155169 copyProperty ( 'miterLimit' , origin , target ) ;
156170
157171 // TOFIX : dash are present, no mater if deleted or not ! (disabled for now)
158- if ( false && origin . dash . enabled ) {
159-
160- for ( var i = 1 ; i <= origin . dash . numProperties ; i ++ ) {
161-
162- var dashProp = origin . dash . property ( i ) ;
163-
164- if ( dashProp . enabled )
165- target . dash . addProperty ( dashProp . matchName ) . setValue ( dashProp . value ) ;
166-
167- }
168-
169- }
172+ // if(false && origin.dash.enabled) {
173+ //
174+ // for(var i=1; i <= origin.dash.numProperties; i++) {
175+ //
176+ // var dashProp = origin.dash.property(i);
177+ //
178+ // if(dashProp.enabled)
179+ // target.dash.addProperty(dashProp.matchName).setValue(dashProp.value);
180+ //
181+ // }
182+ //
183+ // }
170184
171185}
172186
@@ -190,16 +204,6 @@ function copyPropertyTransform(origin, target) {
190204
191205}
192206
193- function copyLayerTransform ( origin , target ) {
194-
195- copyProperty ( 'anchorPoint' , origin , target ) ;
196- copyProperty ( 'position' , origin , target ) ;
197- copyProperty ( 'scale' , origin , target ) ;
198- copyProperty ( 'rotation' , origin , target ) ;
199- copyProperty ( 'opacity' , origin , target ) ;
200-
201- }
202-
203207function copyPropertyRect ( origin , target ) {
204208 copyProperty ( 'shapeDirection' , origin , target )
205209 copyProperty ( 'size' , origin , target )
@@ -225,40 +229,41 @@ function copyPropertyStar(origin, target) {
225229 copyProperty ( 'outerRoundness' , origin , target )
226230}
227231
228- function createUI ( thisObj ) {
232+ function createUI ( that ) {
229233
230- if ( thisObj instanceof Panel ) {
234+ if ( that instanceof Panel ) {
231235
232- var myPanel = thisObj ;
236+ var myPanel = that ;
233237
234238 } else {
235239
236- var myPanel = new Window ( 'palette' , configs . title , undefined , {
240+ var _panel = new Window ( 'palette' , configs . title , undefined , {
237241 resizeable : true ,
238242 } ) ;
239- myPanel . show ( ) ;
243+ _panel . show ( ) ;
240244
241245 }
242246
243- var btn = myPanel . add ( "button" , [ 10 , 10 , 100 , 30 ] , "Explode layer" ) ;
247+ var btn = _panel . add ( "button" , [ 10 , 10 , 100 , 30 ] , "Explode layer" ) ;
244248
245- myPanel . text = configs . title ;
246- myPanel . bounds . width = 120 ;
247- myPanel . bounds . height = 40 ;
249+ _panel . text = configs . title ;
250+ _panel . bounds . width = 120 ;
251+ _panel . bounds . height = 40 ;
248252
249253 btn . onClick = function ( ) {
250254
251255 var t_start = new Date ( ) . getTime ( ) ;
252256
253- explodeLayer ( app . project . activeItem . selectedLayers ) ;
257+ explode ( ) ;
258+
254259
255260 var t_end = new Date ( ) . getTime ( ) ;
256261 consLog ( 'Execution time : ' + ( t_end - t_start ) + 'ms' ) ;
257262
258263 }
259264
260- return myPanel ;
265+ return _panel ;
261266
262267}
263268
264- var myToolsPanel = createUI ( this ) ;
269+ var _panel = createUI ( this ) ;
0 commit comments