Um pequeno acréscimo aos scripts acima.
Depois de testar os que estão no Ps, me deparei com o fato de que, se houver grupos no fluxo de trabalho atual, os scripts não funcionarão corretamente. Eles não levam em conta camadas dentro de grupos, conhecidas como layerSets em linguagem de script; quando o script lista através de "camadas", ele lida apenas com elementos de nível superior (camadas fora de grupos e grupos).
Então, tentei ajustá-los a necessidades mais amplas.
Os scripts modificados estão abaixo; eles podem manipular adequadamente fluxos de trabalho com camadas e grupos de nível superior e elementos aninhados em grupos de nível superior. Com mais hierarquia, eles também funcionarão, se a camada ativa não for duas vezes aninhada, o elemento (caso contrário, "para baixo", o script alternará para a camada superior e "para cima", o script, simplesmente, não fará nada). Mas eu raramente lidei com mais de uma vez grupos aninhados e na pior das hipóteses posso fazer um bom clique do mouse se for necessário (use atalhos legados Alt + [/], eles ainda funcionam em todas as camadas não ocultas). / p>
Desculpe, eu não sou de longe um programador, então código funcional completo está além do meu cérebro; Além disso, esses scripts são muito volumosos também, suponho. Mas eles funcionam. (Por exemplo, atribuo "up" -ciclo a F3, "down" -ciclo a F4 e "toggle-visibility" -script a F2; para mim, essa combinação é bastante prática e economiza muito tempo).
"Cycle-down" -script
var doc = app.activeDocument;
var currentLayer = doc.activeLayer;
//===========
var gropp = doc.layerSets.length;
var docl = doc.layers.length;
var sublayer = 0;
//alert(gropp)
for (i=0; i < gropp;)
{
sublayer = sublayer + doc.layerSets[i].layers.length;
i++;
}
//==============
var a = -1
var kk = -1
var aa = -1
//если активный слой - элемент высшего порядка:
for(i=0; i<docl;)
{
if(doc.layers[i]==currentLayer)
{
a=i;
i = docl;
}
else{ i++;}
}
//если активный слой - элемент группы:
if (a<0)
{
for (i=0; i<gropp;)
{
var subdocl = doc.layerSets[i].layers.length;
for (k=0; k<subdocl;)
{
if(doc.layerSets[i].layers[k]==currentLayer)
{
aa = i;
kk = k;
k = doc.layerSets[i].layers.length;
i = gropp-1;
}
else { k++; }
}
i++;
}
}
//ACTIVATING
//если активный слой - слой высшего порядка:
if (kk<0)
{
//если активный слой - группа (т.е. нижележ. слой - внутри её):
for (i=0; i<gropp;)
{
if (doc.layerSets[i] == currentLayer)
{
var nLayer = doc.layerSets[i].layers[0];
var check = nLayer.visible;
doc.activeLayer = nLayer;
var isGroup = true;
var isActived = true;
if (check == false)
doc.activeLayer.visible = false;
i = gropp;
}
else {i++;}
}
//если активный слой - простой слой (будет обрабатываться в try-catch):
if (isGroup != true)
{
for (i=0; i<docl;)
{
if (doc.layers[i]==currentLayer)
{
numm = i;
i=docl;
}
else {i++;}
}
}
}
else
//(если активный слой - подобъект (элемент группы), т.е. известны (неотриц.) aa и kk:
{
//если элемент группы - последний в ней (будет обрабатываться в try-catch):
if (kk == subdocl-1)
{
for (i=0; i<docl;)
{
if (doc.layers[i] == doc.layerSets[aa])
{
numm = i;
i = docl;
}
else {i++;}
}
}
//если не последний в группе, то проще:
else
{
var nLayer = doc.layerSets[aa].layers[kk+1];
var check = nLayer.visible;
doc.activeLayer = nLayer;
var isActived = true;
if (check == false)
doc.activeLayer.visible = false;
}
}
//try-catch секция для последних вариантов (самых нижних слоёв):
try
{
//alert ("isActived is " + isActived)
if (isActived != true)
{
var nLayer = doc.layers[numm+1];
var check = nLayer.visible;
doc.activeLayer = nLayer;
if (check == false)
doc.activeLayer.visible = false;
}
}
catch(e)
{
var nLayer = doc.layers[0];
var check = nLayer.visible;
doc.activeLayer = nLayer;
if (check == false)
doc.activeLayer.visible = false;
}
Script "Cycle-up"
var doc = app.activeDocument;
var currentLayer = doc.activeLayer;
var gropp = doc.layerSets.length;
var docl = doc.layers.length;
var a = -1
var kk = -1
var aa = -1
//если активный слой - элемент высшего порядка:
for(i=0; i<docl;)
{
if(doc.layers[i]==currentLayer)
{
a=i;
i = docl;
}
else{ i++;}
}
//если активный слой - элемент группы:
if (a<0)
{
for (i=0; i<gropp;)
{
var subdocl = doc.layerSets[i].layers.length;
for (k=0; k<subdocl;)
{
if(doc.layerSets[i].layers[k]==currentLayer)
{
aa = i;
kk = k;
k = doc.layerSets[i].layers.length;
//модернизируем скрипт: вносим сразу в этот цикл обработку активизации.
//если элемент группы - первый в ней (активизируем саму группу - гипероним):
if (kk==0)
{
var pLayer = doc.layerSets[i];
var check = pLayer.visible;
doc.activeLayer = pLayer;
//var isGroup = true;
var isActived = true;
if (check == false)
doc.activeLayer.visible = false;
}
//если не первый, то просто слой вверх:
else
{
var pLayer = doc.layerSets[i].layers[kk-1];
var check = pLayer.visible;
doc.activeLayer = pLayer;
var isActived = true;
if (check == false)
doc.activeLayer.visible = false;
}
i = gropp-1;
}
else { k++; }
}
i++;
}
}
//если активный слой - высший элемент; нам известно (неотриц) a:
else
{
if (a==0)
a=docl;
for (i=0; i<gropp;)
{
//если предыдущий слой - последний элемент находящейся выше группы:
if (doc.layerSets[i] == doc.layers[a-1])
{
var subdocl = doc.layerSets[i].layers.length;
var pLayer = doc.layerSets[i].layers[subdocl-1];
var check = pLayer.visible;
doc.activeLayer = pLayer;
var isActived = true;
if (check == false)
doc.activeLayer.visible = false;
i = gropp;
}
else {i++;}
}
if (isActived != true)
{
var pLayer = doc.layers[a-1];
var check = pLayer.visible;
doc.activeLayer = pLayer;
if (check == false)
doc.activeLayer.visible = false;
}
}
"Bonus" - "toggle visibility" -script
var currentLayer = activeDocument.activeLayer;
currentLayer.visible = !currentLayer.visible
Nota:
Salve-os como arquivos * .jsx e coloque em C: \ Arquivos de Programas \ Adobe \% Sua Pasta de Versões da Adobe% \ Presets \ Scripts