Quantcast
Channel: Adobe Community : Popular Discussions - Illustrator Scripting
Viewing all articles
Browse latest Browse all 12845

How do you recursively loop through sublayers and groups?

$
0
0

I've been fairly successful looping through an AI file, and was able to loop through layers and pull text Layers, to a specified layer. Problem being, that I also want to capture anything that's nested in groups, and depending on which way I put the try statements, it will only catch parts of the editorial in my file. The problem occurs within the traverseSubs function, I had both groupItems and layers in one loop, but it wasn't fully going through anything, so I set 2 different variables to loop through.

 

actDoc = app.activeDocument;

textLayerName = "Live Editorial"

layLen = actDoc.layers.length;

function catchText(grabTextFrom,whereTo) {

    try{textCatchLayer = actDoc.layers.getByName(whereTo)}

    catch(e){

        var textCatchLayer = actDoc.layers.add();

        textCatchLayer.name = textLayerName;

        textCatchLayer.printable = false;

        textCatchLayer.zOrder(ZOrderMethod.BRINGTOFRONT);

    }

    var tF = grabTextFrom.textFrames

    var tFL = tF.length;

    for ( i = 0; i < tFL; i++) {

       tF[i].duplicate(textCatchLayer, ElementPlacement.PLACEATEND);

    }

}

 

function traverseSubs(current) {

        catchText(current,textLayerName);

        for ( h = 0; h < current.groupItems.length; h++) {

            try{if(current.groupItems.length > 0) traverseSubs(current.groupItems[h])}

            catch(e) {$.write(e)}

        }

        for ( i = 0; i < current.layers.length; i++) {

            try{ if(current.layers.length > 0) traverseSubs(current.layers[h])}

            catch(e) {$.write(e)}

        }

}

 

for (j = 0; j < layLen; j++){

        curLay = actDoc.layers[j];

        if(curLay.name == textLayerName) continue;

        traverseSubs(curLay);

}

 

I also tried the below:

 

tF = app.activeDocument.textFrames

tFL = tF.length

  for(i=0;i<tFL;i++){

        tF[i].duplicate(app.activeDocument.layers.getByName("Live Editorial "), ElementPlacement.PLACEATEND);

}

 

But it only grabbed the same Text 5 times.


Viewing all articles
Browse latest Browse all 12845

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>