Ich habe mit einer Funktion gearbeitet, die ich hier auf Stackoverflow gefunden habe und die, soweit ich das beurteilen kann, funktioniert, indem sie die Ebenen gruppiert, Ebenennamen in ein Array ablegt und dann die Gruppierung aufhebt.
function getSelectedLayers(){
var idGrp = stringIDToTypeID( "groupLayersEvent" );
var descGrp = new ActionDescriptor();
var refGrp = new ActionReference();
refGrp.putEnumerated(charIDToTypeID( "Lyr " ),charIDToTypeID( "Ordn" ),charIDToTypeID( "Trgt" ));
descGrp.putReference(charIDToTypeID( "null" ), refGrp );
executeAction( idGrp, descGrp, DialogModes.ALL );
var resultLayers=new Array();
for (var ix=0;ix<app.activeDocument.activeLayer.layers.length;ix++){resultLayers.push(app.activeDocument.activeLayer.layers[ix])}
var id8 = charIDToTypeID( "slct" );
var desc5 = new ActionDescriptor();
var id9 = charIDToTypeID( "null" );
var ref2 = new ActionReference();
var id10 = charIDToTypeID( "HstS" );
var id11 = charIDToTypeID( "Ordn" );
var id12 = charIDToTypeID( "Prvs" );
ref2.putEnumerated( id10, id11, id12 );
desc5.putReference( id9, ref2 );
executeAction( id8, desc5, DialogModes.NO );
return resultLayers;
}
var layers = getSelectedLayers();
Wenn keine Ebenen ausgewählt sind und diese Funktion ausgeführt wird, wirft Photoshop leider die Meldung
Der Befehl „Ebenen gruppieren“ ist derzeit nicht verfügbar.
Gibt es eine Möglichkeit, zumindest einen Nullwert zurückzugeben, wenn dies geschieht, ohne dass das Skript zum Stillstand kommt? Auf diese Weise könnte ich eine Meldung anzeigen, dass Ebenen ausgewählt werden müssen, wenn sie null ist.
ODER Gibt es eine Möglichkeit festzustellen, dass keine Ebenen ausgewählt sind, bevor die Funktion versucht, die Gruppierungsfunktion auszuführen?
Jede Hilfe wird sehr geschätzt!
So etwas sollte funktionieren....
var activelayer = application.document.activeLayer;
if(activeLayer){
var layers = getSelectedLayers();
}else{
alert("Select a Layer");
}
code
// Sie könnten überprüfen, um welche Art von Ebene es sich handelt. ArtLayers enthalten kein Layer-Array // activeLayer.typename === "LayerSet" // if Layerset prüft die Länge des app.activeDocument.activeLayer.layers-Arrays //activeLayer.typename === "ArtLayer" // if artLayer kann eine "Art" haben // Oder Sie könnten die Grenzen der Ebene überprüfen, um zu sehen, ob ihre leere code
Formatierung schrecklich aussieht, tut mir leid.Ich denke, das wird funktionieren, ich habe es getestet ... Indem Sie den objType überprüfen, können Sie sehen, ob es sich um ein Array oder ein LayerSet/Folder handelt. Ich hoffe, das bringt Sie auf den richtigen Weg.
function getSelectedLayers(){
var objType = typeof app.activeDocument.activeLayer.layers;
if(objType !== "undefined"){
var len = app.activeDocument.activeLayer.layers.length;
if(len > 0){
var idGrp = stringIDToTypeID( "groupLayersEvent" );
var descGrp = new ActionDescriptor();
var refGrp = new ActionReference();
refGrp.putEnumerated(charIDToTypeID( "Lyr " ),charIDToTypeID( "Ordn" ),charIDToTypeID( "Trgt" ));
descGrp.putReference(charIDToTypeID( "null" ), refGrp );
executeAction( idGrp, descGrp, DialogModes.ALL );
var resultLayers=new Array();
for (var ix=0;ix<len;ix++){
resultLayers.push(app.activeDocument.activeLayer.layers[ix])
};
var id8 = charIDToTypeID( "slct" );
var desc5 = new ActionDescriptor();
var id9 = charIDToTypeID( "null" );
var ref2 = new ActionReference();
var id10 = charIDToTypeID( "HstS" );
var id11 = charIDToTypeID( "Ordn" );
var id12 = charIDToTypeID( "Prvs" );
ref2.putEnumerated( id10, id11, id12 );
desc5.putReference( id9, ref2 );
executeAction( id8, desc5, DialogModes.NO );
return resultLayers;
}
}
return null;
}
p2oder