0

我一直在使用我在 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 会抛出该消息

“图层组”命令当前不可用。

有没有办法在脚本停止的情况下至少返回一个空值?这样我就可以在它为空时显示一条关于需要选择图层的消息。

或者有没有办法确定在函数尝试运行分组函数之前没有选择任何图层?

任何帮助是极大的赞赏!

4

1 回答 1

0

我在此处提供的 xtools 中使用 Stdlib 中的一个函数:http: //ps-scripts.sourceforge.net/xtools.html。只需在运行上面的代码之前检查从 Stdlib.getSelectedLayers() 返回的数组的长度 - 或检查库中的代码以根据您自己的需要进行修改。

再次阅读您的问题,我想知道上面的代码是否不是同一库中的 getSelectedLayers 函数?如果是这样,您是否尝试过在运行它之前检查 activeDocument?我想如果您选择了任何图层,至少其中一个应该处于活动状态?

于 2015-02-21T12:51:02.353 回答