Skip to content

Commit 67e8acf

Browse files
committed
Remove manual duplication to adapt more properties
Closes #3
1 parent c46e3b7 commit 67e8acf

1 file changed

Lines changed: 70 additions & 108 deletions

File tree

src/explode_shape_layer.jsx

Lines changed: 70 additions & 108 deletions
Original file line numberDiff line numberDiff line change
@@ -113,19 +113,26 @@ function explode() {
113113
}
114114

115115
function emptyDuplicateLayer(layer) {
116-
117116
var new_layer = layer.containingComp.layers.addShape();
118117

119-
copyProperty('anchorPoint', layer, new_layer);
120-
copyProperty('position', layer, new_layer);
121-
copyProperty('scale', layer, new_layer);
122-
copyProperty('rotation', layer, new_layer);
123-
copyProperty('opacity', layer, new_layer);
118+
new_layer['anchorPoint'].setValue( layer['anchorPoint'].value );
119+
new_layer['position'].setValue( layer['position'].value );
120+
new_layer['scale'].setValue( layer['scale'].value );
121+
new_layer['rotation'].setValue( layer['rotation'].value );
122+
new_layer['opacity'].setValue( layer['opacity'].value );
124123

125124
return new_layer;
126-
127125
}
128126

127+
var treeChildPrefix = "⌞ ";
128+
var propertiesBlacklist = [
129+
'ADBE Vector Taper StartWidthPx',
130+
'ADBE Vector Taper EndWidthPx',
131+
'ADBE Vector Taper Wave Cycles',
132+
'ADBE Vector Stroke Dashes',
133+
'ADBE Vector Materials Group',
134+
];
135+
129136
/**
130137
* Copy properties of a layer to another (recursive).
131138
*
@@ -134,119 +141,68 @@ function emptyDuplicateLayer(layer) {
134141
* @param {Number} level
135142
*/
136143
function copyProperties(origin, target, level) {
137-
var indent = repeatStr(" ", level === undefined ? 0 : level);
138-
var prefix = indent + "⌞-";
144+
var indent = repeatStr(" ", level);
139145

140-
cDebug(indent + origin.name);
146+
// if(level === 0) {
147+
cDebug(indent + origin.name);
148+
// }
141149

150+
// Process (copy) each property of the origin to the target
142151
for(var i=1; i <= origin.numProperties; i++) {
152+
var originalProp = origin.property(i);
153+
var matchName = originalProp.matchName;
143154

144-
var _prop = origin.property(i);
155+
// Do not copy disabled properties
156+
if(!originalProp.enabled) {
157+
cDebug(indent + treeChildPrefix + matchName + " (skipped: disabled)");
158+
continue;
159+
};
160+
145161

146-
if(!_prop.enabled || !target.canAddProperty(_prop.matchName)) return;
162+
// Get or create the target property
163+
var targetProp = target.property(matchName);
147164

148-
// Skipped properties
149-
if(arrayIncludes(['ADBE Vector Materials Group'], _prop.matchName)) {
150-
cDebug(prefix + _prop.matchName + " (skipped)");
165+
if(!targetProp) {
166+
targetProp = target.addProperty(matchName);
167+
}
168+
169+
// Still no property ? Then the property is probably not supported
170+
if(!targetProp) {
171+
cDebug(indent + treeChildPrefix + matchName + " (skipped: cannot be added)");
151172
continue;
152173
}
153174

154-
cDebug(prefix + _prop.matchName);
155-
156-
var prop = target.addProperty(_prop.matchName);
157-
158-
switch (_prop.matchName) {
159-
160-
case 'ADBE Vector Filter - Merge':
161-
copyProperty('mode', _prop, prop)
162-
break;
163-
164-
case 'ADBE Vector Graphic - Stroke':
165-
copyProperty('composite', _prop, prop);
166-
copyProperty('color', _prop, prop);
167-
copyProperty('strokeWidth', _prop, prop);
168-
copyProperty('lineCap', _prop, prop);
169-
copyProperty('lineJoin', _prop, prop);
170-
copyProperty('miterLimit', _prop, prop);
171-
break;
172-
173-
case 'ADBE Vector Graphic - Fill':
174-
copyProperty('composite', _prop, prop);
175-
copyProperty('fillRule', _prop, prop);
176-
copyProperty('color', _prop, prop);
177-
break;
178-
179-
case 'ADBE Vector Transform Group':
180-
copyProperty('anchorPoint', _prop, prop);
181-
copyProperty('position', _prop, prop);
182-
copyProperty('scale', _prop, prop);
183-
copyProperty('skew', _prop, prop);
184-
copyProperty('skewAxis', _prop, prop);
185-
copyProperty('rotation', _prop, prop);
186-
copyProperty('opacity', _prop, prop);
187-
break;
188-
189-
case 'ADBE Vector Shape - Rect':
190-
copyProperty('shapeDirection', _prop, prop)
191-
copyProperty('size', _prop, prop)
192-
copyProperty('position', _prop, prop)
193-
copyProperty('roundness', _prop, prop)
194-
break;
195-
196-
case 'ADBE Vector Shape - Ellipse':
197-
copyProperty('shapeDirection', _prop, prop)
198-
copyProperty('size', _prop, prop)
199-
copyProperty('position', _prop, prop)
200-
break;
201-
202-
case 'ADBE Vector Shape - Star':
203-
copyProperty('shapeDirection', _prop, prop)
204-
copyProperty('type', _prop, prop)
205-
copyProperty('points', _prop, prop)
206-
copyProperty('position', _prop, prop)
207-
copyProperty('rotation', _prop, prop)
208-
copyProperty('innerRadius', _prop, prop)
209-
copyProperty('outerRadius', _prop, prop)
210-
copyProperty('innerRoundness', _prop, prop)
211-
copyProperty('outerRoundness', _prop, prop)
212-
break;
213-
214-
case 'ADBE Root Vectors Group':
215-
case 'ADBE Vectors Group':
216-
case 'ADBE Vector Group':
217-
copyProperties(_prop, prop, level + 1);
218-
break;
219-
220-
case 'ADBE Vector Shape - Group':
221-
prop.property('ADBE Vector Shape').setValue( _prop.property('ADBE Vector Shape').value );
222-
break;
223-
224-
// case 'Vector Stroke Taper':
225-
// copyProperty('startLength', _prop, prop);
226-
// copyProperty('endLength', _prop, prop);
227-
// copyProperty('startWidth', _prop, prop);
228-
// copyProperty('endWidth', _prop, prop);
229-
// copyProperty('startEase', _prop, prop);
230-
// copyProperty('endEase', _prop, prop);
231-
// break;
232-
233-
case 'ADBE Vector Blend Mode':
234-
prop.setValue( _prop.value );
235-
break;
236-
237-
default:
238-
cDebug(prefix + '>> not supported!');
239-
break;
175+
// Skip properties that cannot be set without being displayed
176+
if(arrayIncludes(propertiesBlacklist, matchName)) {
177+
cDebug(indent + "⚬ " + matchName + " (skipped: not editable when hidden)");
178+
continue;
179+
}
180+
181+
// Handle property
182+
if(typeof originalProp.setValue === "function") {
183+
cDebug(indent + treeChildPrefix + matchName);
184+
targetProp.setValue(originalProp.value);
185+
continue;
186+
}
187+
188+
// Handle property groups/layers
189+
if(originalProp.numProperties > 0) {
190+
cDebug(indent + treeChildPrefix + matchName);
191+
copyProperties(originalProp, targetProp, level + 1);
192+
continue;
240193
}
241194

195+
cDebug(indent + "⦵ " + matchName + " (skipped: no reason)");
242196
}
243-
244-
}
245-
246-
function copyProperty(name, origin, target) {
247-
target[name].setValue( origin[name].value );
248197
}
249198

199+
/**
200+
* Check if an element (the needle) is present in a given array.
201+
*
202+
* @param {Array} arr
203+
* @param {*} needle
204+
* @returns Boolean
205+
*/
250206
function arrayIncludes(arr, needle) {
251207
for(var i=arr.length - 1; i>=0; i--){
252208
if(arr[i] === needle) {
@@ -257,6 +213,13 @@ function arrayIncludes(arr, needle) {
257213
return false;
258214
}
259215

216+
/**
217+
* Repeat a string a given times into a single string output.
218+
*
219+
* @param {String} str
220+
* @param {Number} amount
221+
* @returns String
222+
*/
260223
function repeatStr(str, amount) {
261224
var rtn = "";
262225
for(var i=0; i<amount; i++) {
@@ -266,7 +229,6 @@ function repeatStr(str, amount) {
266229
}
267230

268231
function createUI(that) {
269-
270232
if(that instanceof Panel) {
271233

272234
var _panel = that;
@@ -276,13 +238,13 @@ function createUI(that) {
276238
var _panel = new Window('palette', configs.title, undefined, {
277239
resizeable : true,
278240
});
241+
279242
_panel.show();
280243

281244
}
282245

283246
var btn = _panel.add("button", [10, 10, 100, 30], "Explode layer");
284247

285-
// _panel.text = configs.title;
286248
_panel.bounds.width = 120;
287249
_panel.bounds.height = 40;
288250

0 commit comments

Comments
 (0)