-
Grouping layers in a comp with using prefix and precomposing them (Extendscript)
Hi there,
I’m trying to precomposing layers within a comp by using layer’s name. I need to group layers which has same prefix and precompose them together. I’ve attached a photo and the code block. Might be there’s better and shorter way. I’ve just tried to make it work, i might be follow a wrong path.
if (importAiFiles.canImportAs(ImportAsType.COMP_CROPPED_LAYERS)) {
var importAiFiles = new ImportOptions(File(selectAiFiles[i]));
importAiFiles.importAs = ImportAsType.COMP_CROPPED_LAYERS;
var aiComp = app.project.importFile(importAiFiles);
aiComp.name = selectAiFiles[i].name.slice(0, -3);
//var aiCompCropped = [0]
var layerNamesArr = [];
var layerIndexArr = [];
for (var k = 1; k <= aiComp.numLayers; k++) {
if (k == aiComp.numLayers) {
break;
}
var tempNameArr = [aiComp.layers[k]];
var tempIndexArr = [k];
for (var l = k + 1; l <= aiComp.numLayers; l++) {
if (aiComp.layers[k].name.slice(0, 2) == aiComp.layers[l].name.slice(0, 2)) {
tempNameArr.push(aiComp.layers[l]);
tempIndexArr.push(l);
}
}
var isContiune = false;
if (layerNamesArr.length >= 1) {
var checkIndex = layerNamesArr.length - 1;
for (var c = 0; c < layerNamesArr[checkIndex].length; c++) {
if (layerNamesArr[checkIndex][c].name === aiComp.layers[k].name) {
isContiune = true;
}
}
}
if (isContiune) {
continue;
}
layerNamesArr.push(tempNameArr);
layerIndexArr.push(tempIndexArr);
}
}
for (var j = 0; j < layerNamesArr.length; j++) {
aiComp.layers.precompose([layerIndexArr[j].toString()], layerNamesArr[j][0].name, false);
}
for (var d = 1; d <= aiComp.numLayers; d++) {
aiComp.layer(d).copyToComp(mainComp)
}var importAiFiles = new ImportOptions(File(selectAiFiles[i])); if (importAiFiles.canImportAs(ImportAsType.COMP_CROPPED_LAYERS)) { importAiFiles.importAs = ImportAsType.COMP_CROPPED_LAYERS; var aiComp = app.project.importFile(importAiFiles); aiComp.name = selectAiFiles[i].name.slice(0, -3); //var aiCompCropped = [0] var layerNamesArr = []; var layerIndexArr = []; for (var k = 1; k <= aiComp.numLayers; k++) { if (k == aiComp.numLayers) { break; } var tempNameArr = [aiComp.layers[k]]; var tempIndexArr = [k]; for (var l = k + 1; l <= aiComp.numLayers; l++) { if (aiComp.layers[k].name.slice(0, 2) == aiComp.layers[l].name.slice(0, 2)) { tempNameArr.push(aiComp.layers[l]); tempIndexArr.push(l); } } var isContiune = false; if (layerNamesArr.length >= 1) { var checkIndex = layerNamesArr.length - 1; for (var c = 0; c < layerNamesArr[checkIndex].length; c++) { if (layerNamesArr[checkIndex][c].name === aiComp.layers[k].name) { isContiune = true; } } } if (isContiune) { continue; } layerNamesArr.push(tempNameArr); layerIndexArr.push(tempIndexArr); } } for (var j = 0; j < layerNamesArr.length; j++) { aiComp.layers.precompose([layerIndexArr[j].toString()], layerNamesArr[j][0].name, false); } for (var d = 1; d <= aiComp.numLayers; d++) { aiComp.layer(d).copyToComp(mainComp) }