0

ここでスタックオーバーフローで見つけた関数を使用して、レイヤーをグループ化し、レイヤー名を配列にダンプしてからグループ化を解除することでわかる限り機能します。

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 はメッセージをスローします。

コマンド「グループレイヤー」は現在利用できません。

スクリプトが停止せずにこれが発生したときに、少なくとも null 値を返す方法はありますか? そうすれば、null のときにレイヤーを選択する必要があるというメッセージを表示できます。

または関数がグループ化関数を実行しようとする前に、レイヤーが選択されていないことを確認する方法はありますか?

どんな助けでも大歓迎です!

4

1 に答える 1

0

http://ps-scripts.sourceforge.net/xtools.htmlで入手できる xtools の Stdlib の関数を使用します。上記のコードを実行する前に、Stdlib.getSelectedLayers() から返された配列の長さを確認するか、ライブラリのコードを調べて、必要に応じて変更してください。

あなたの質問をもう一度読んで、上記のコードは同じライブラリの getSelectedLayers 関数ではないのでしょうか? もしそうなら、実行する前に activeDocument をチェックしようとしましたか? レイヤーを選択した場合、少なくともそのうちの 1 つをアクティブにする必要があると思いますか??

于 2015-02-21T12:51:02.353 に答える