2017-09-01 4 views
0
var Doc = activeDocument; 
var newLayerSet = Doc.layerSets.add();   
var count = 0; 

alert(Doc.layers.length); //A 
for(var i=0; i<Doc.layers.length ; i++){ 
    if(Doc.layers[i].name.indexOf ("MMRE") != -1){ 
     Doc.layers[i].move(newLayerSet, ElementPlacement.INSIDE); 
    } 
    count++; 
} 
alert(count); //B 

Es ist Skript. Ich verstehe das Programm nicht.Photoshop-Skriptfehler (Anzahl der Ebenen)

alert(Doc.layers.length); //A' result is 73. 
but 'alert(count); //B result is 45. 

Ist es möglich? WARUM?

+0

Sie modifizieren 'Doc.layers', es wird kürzer, während du über sie iterieren (Ich nehme an). – deceze

Antwort

0

Zunächst fügen Sie jedes Mal, wenn das Skript ausgeführt wird, eine neue Gruppe hinzu. Dein Skript zählt keine Ebenen in Gruppen. Sie müssen eine rekursive Funktion haben, um alle Ebenen (einschließlich Gruppen und Untergruppen) zu finden. Arbeiten mit Gruppen ist ein Schmerz :(

ich Ihren Code geändert haben für eine rekursive Funktion zu ermöglichen:

var Doc = activeDocument; 
var newLayerSet = Doc.layerSets.add();   
var count = 0; 

var allLayers = new Array(); 
var theLayers = collectAllLayers(app.activeDocument, 0); 
count = theLayers; 

alert("A: " + allLayers.length); //A 
alert("B: " + count); //B 


// function collect all layers 
function collectAllLayers (theParent, level) 
{ 
    for (var m = theParent.layers.length - 1; m >= 0; m--) 
    { 
    var theLayer = theParent.layers[m]; 

    // apply the function to layersets; 
    if (theLayer.typename == "ArtLayer") 
    { 
     if(theLayer.name.indexOf ("MMRE") != -1) 
     { 
      theLayer.move(newLayerSet, ElementPlacement.INSIDE); 
     } 
    } 
    else 
    { 
     allLayers.push(level + theLayer.name); 
     collectAllLayers(theLayer, level + 1) 
     count++; 
    } 
    } 
    return count; 
} 
Verwandte Themen