У меня проблема с рекурсивной функцией. Я попытаюсь объяснить как можно лучше: У меня есть фотошоп-документ, содержащий различные смарт-объекты, все имена: Smart_Objectname. Smarts может также содержать другие Smarts.Loop trough parallel Слои
Теперь я попытаюсь написать функцию, которая проходит через весь документ и открывает смарт (ищет с регулярным выражением для «Smart»), если он содержит другой, он откроет следующий и так далее. Если последнее достигнуто, он начинает сохранять каждый слой внутри умного имени с именем «Layername.png» в виде png и снова закрывает его. Затем он сохраняет слои Smart до тех пор, пока не вернется к корневому документу.
«Идет более глубоко в умную часть» уже работает. Но если у меня есть два Smart-объекта в одной и той же иерархии, он не будет работать и будет устанавливать неправильный слой как активный, когда он будет углубляться в первый. Я просто не могу найти ошибку, но что-то кажется неправильным с моим кодом. Любая помощь или простой способ сделать это было бы здорово :)
Вот мой код до сих пор ... может быть немного сложнее:
findSmart(app.activeDocument.layerSets); //call it
function findSmart(layerNode) {
for (var i=0; i<layerNode.length; i++) {
var res = /Smart/;// a reg exp
var mat = collectNamesAM(res);// get array of matching layer indexes
for(var y = 0; y < mat.length; y++){
makeActiveByIndex(mat[y], false);
// do something with layer
var activeLayer = app.activeDocument.activeLayer;
//Open smart
//=======================================================
var idplacedLayerEditContents = stringIDToTypeID("placedLayerEditContents");
var desc45 = new ActionDescriptor();
executeAction(idplacedLayerEditContents, desc45, DialogModes.NO);
}//next Smart match if any
//Go deeper
findSmart(layerNode[i].layerSets);
var len = app.activeDocument.layers.length;
for (var i = 0; i < len; i++) {
var layer = app.activeDocument.layers[i];
//search for all .png Layers to save
var id = ".png";
var exist = layer.name.slice(-id.length) == id; // true
app.activeDocument.activeLayer = layer;
var activeLayer = app.activeDocument.activeLayer;
//save pic if .png
if(exist){
saveAll(); //just opens each layer in another doc and saves it as png then closes the documents without saving
}//end if
}//end for
// Close the Smart Object and move to next one
activeDocument.close(SaveOptions.DONOTSAVECHANGES);
}//first smart
}//end function