La secuencia de comandos que itera a través de las capas se detiene a la mitad

Estoy tratando de iterar a través de cada capa en un documento y, por alguna razón, mi secuencia de comandos solo pasa por la primera mitad (13 de 25) y luego en 14 dice que el elemento no existe. ¿Podrían ayudarme a averiguar por qué? A continuación se muestra el fragmento de código que pasa por cada capa

function processLayers(extension)
{
    var doc = app.activeDocument;
    //go through each layer and create a folder
    alert('length is ' + doc.artLayers.length);
    var length = doc.artLayers.length;
    for (var layer = 0; layer < length; layer++)
    {
        var folderName = generateFolderName(doc.artLayers[layer].name, extension);
        //create folder in photoshop with folderName
        var folder = doc.layerSets.add();
        folder.name = folderName;
        doc.artLayers[layer].move(folder, ElementPlacement.INSIDE);     
    }
}

Respuestas (4)

Como no tengo una copia de trabajo de su secuencia de comandos, esto es un poco difícil para mí, pero escribí una secuencia de comandos antes y aquí hay una función que arroja y oculta todas las capas:

function hideLayers(ref) {
    var len = ref.layers.length;
    for (var i = 0; i < len; i++) {
        var layer = ref.layers[i];
        if (layer.typename == 'LayerSet') hideLayers(layer);
        else layer.visible = false;
    }
}

Notará que simplemente toma la longitud del objeto de capas y luego itera sobre cada capa. En ese sentido, los guiones son casi idénticos. Si se encuentra un grupo de capas (como lo comprueba la ifdeclaración), realiza una llamada recursiva para ocultar todas las capas anidadas. (También mi refparámetro es activeDocument).

Lo que sugeriría, para fines de depuración, es ver si puede ejecutar mi función sin errores. Si es así, entonces sabe que el problema no es con la iteración de todas las capas, sino con la lógica que está tratando de ejecutar en cada capa, y luego asegúrese de que cualquier lógica que esté tratando de usar sea válida en ese tipo de capa (ráster, texto, forma, etc.)

Otra técnica sería llenar su ciclo con alertas útiles (o mejor aún, solo registros o puntos de interrupción) y verificar el valor de las variables a medida que llegan.

Hay muchas razones por las que un script puede detenerse prematuramente. Muchas veces depende del documento. En este caso, podría ser un carácter incorrecto en el nombre de una capa . Intenta eliminar la capa 14 y observa qué sucede.

Para depurar, ejecute su secuencia de comandos desde el kit de herramientas ExtendScript de Adobe. Puede dejar que se atasque o puede establecer descansos específicos para inspeccionar puntos particulares en el proceso.

También agregue que podría ser un problema de agrupación. Es posible que deba aislar todo en una capa y no tener nada en una carpeta.

La inserción de capas en grupos de carpetas es el flujo de trabajo al importar archivos PSD a ToonBoom Harmony. Mirando el código anterior, iterar hacia adelante parece ser el problema, ya que cada vez que agrega un grupo, probablemente se agregue al recuento de capas. ¡Retroceder resuelve el problema para mí! espero que esto ayude.

function PrepLayersForToonBoomImport()
{
    var doc = app.activeDocument;
    //go through each layer and create a folder
    //alert('length is ' + doc.artLayers.length);
    var length = doc.artLayers.length-1;
    for (var layer = length; layer >= 0 ; layer--)
    {
        var folderName = doc.artLayers[layer].name;
        //create folder in photoshop with folderName
        var folder = doc.layerSets.add();
        folder.name = folderName;
        doc.artLayers[layer].move(folder, ElementPlacement.INSIDE);     
    }
}

PrepLayersForToonBoomImport()