: Toggle visibility for sublayers in AI I want to toggle the visibility of the sublayers with a certain name. Now, I've seen it done for a layer: #target illustrator all_layers = app.activeDocument.layers.getByName("Layer
I want to toggle the visibility of the sublayers with a certain name. Now, I've seen it done for a layer:
#target illustrator
all_layers = app.activeDocument.layers.getByName("Layer 8")
all_layers.visible = ! all_layers.visible
Here is how I reference a sublayer, but I cannot connect the dots.
How to reference a sublayer by name in an Illustrator script?
Thanks!
More posts by @Harper654
1 Comments
Sorted by latest first Latest Oldest Best
Considering that you are working with groups (and not nested layers), the below script will toggle the “hidden” attribute of groups within layers (and nested layers):
// jshint -W118
// globals app
// jshint ignore:start #target illustrator #targetengine main
// jshint ignore:end
function loop(flag, layers) {
var groups, groupsCount;
var subLayers, subLayersCount;
var i1, i1l;
var i2, i2l;
// Loop over layers:
for (i1 = 0, i1l = layers.length; i1 < i1l; i1++) {
$.writeln('Layer: ', layers[i1].name);
// Get layer groups:
groups = layers[i1].groupItems;
groupsCount = groups.length;
// If there are nested groups:
if (groupsCount) {
for (i2 = 0, i2l = groups.length; i2 < i2l; i2++) {
$.writeln('Group: ', groups[i2].name);
// Does group match flag?
if (groups[i2].name.toLowerCase() == flag) {
// Flag matched, so toggle hidden attribute:
groups[i2].hidden = ( ! groups[i2].hidden);
}
}
}
// Get layer layers:
subLayers = layers[i1].layers;
subLayersCount = layers.length;
// If there are nested layers:
if (subLayersCount) {
// Call self and recurse:
loop(flag, subLayers);
}
}
}
if (app.documents.length > 0) {
// This script assumes you want to toggle visibility of “groups”
// with a name that matches first argument passed below.
loop(
'featured product', // Group name used to toggle visibility.
app.activeDocument.layers
);
}
Test file: test.ai
Note that I didn’t take into account nested layers with the name of “featured product”, but (not having given this scenario too much thought) you could simply add a condition to toggle the layer visibility for that layer instead of recursing into it's contents.
Ideas for a slight improvements to the code:
Prompt the user to input a string as the target group name to toggle
Include an option to show/hide layers in that same prompt window (as a checkbox perhaps?)
Wrap code in IIFE plus general house cleaning of syntax
Be warned that I have not stress-tested the above code, so caveat emptor. :)
Terms of Use Create Support ticket Your support tickets Stock Market News! © vmapp.org2024 All Rights reserved.