Я работал с функцией, которую нашел здесь в stackoverflow, которая, насколько я могу судить, работает, группируя слои, выгружая имена слоев в массив, а затем разгруппируя их.
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();
К сожалению, когда слои не выбраны и эта функция запущена, Photoshop выдает сообщение
Команда «Группировать слои» в настоящее время недоступна.
Есть ли способ хотя бы вернуть нулевое значение, когда это происходит без остановки скрипта? Таким образом, я мог бы отобразить сообщение о необходимости выбора слоев, когда оно равно нулю.
ИЛИ Есть ли способ определить, что слои не выбраны, прежде чем функция попытается запустить функцию группировки?
Любая помощь приветствуется!
Что-то вроде этого должно работать....
var activelayer = application.document.activeLayer;
if(activeLayer){
var layers = getSelectedLayers();
}else{
alert("Select a Layer");
}
code
//Вы могли бы проверить, что это за слой. ArtLayers Не содержит массив слоев внутри // activeLayer.typename === "LayerSet" // если Layerset проверяет длину массива app.activeDocument.activeLayer.layers //activeLayer.typename === "ArtLayer" // если artLayer он может иметь "вид" // Или вы можете проверить границы слоя, чтобы увидеть, code
выглядит ли его пустое форматирование ужасно, извините за это.Я думаю, что это сработает, я проверил это... Проверив objType, вы можете увидеть, является ли он массивом или LayerSet/Folder. Я надеюсь, что это поможет вам на правильном пути.
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;
}
p2или