Skip to content

Commit aad45e9

Browse files
committed
Code refactoring
1 parent 0d9290c commit aad45e9

2 files changed

Lines changed: 120 additions & 115 deletions

File tree

src/explode_shape_layer.jsx

Lines changed: 119 additions & 114 deletions
Original file line numberDiff line numberDiff line change
@@ -1,140 +1,154 @@
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

140154
function 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-
203207
function 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);

src/utils.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ function consLog(text) {
44
}
55

66
function listMatchNames(object) {
7-
7+
88
for(var i=1; i <= object.numProperties; i++) {
99

1010
var prop = object.property(i);

0 commit comments

Comments
 (0)