任意の選択範囲を作成するにはselectionオブジェクトのselect関数を使用します。

Selection.select (region, type, feather, antiAlias) 

 

<引数>

region array 選択範囲の座標
type object 選択範囲の作成条件
feather object 選択範囲のぼかし幅
antiAlias boolean アンチエイリアスするか否か

 

「region」は選択範囲の座標点 [x, y] の配列を、さらに必要な点の数だけ二重配列化したものを渡します。単純な矩形であれば [ [x1, y1], [x2, y2], [x3, y3], [x4, y4] ] となり、形が複雑になるほど多くの座標点が必要になります。なお、座標の単位はルーラの単位に関わらずピクセルで指定します。

「type」は選択範囲を「新規に作成」にするか、既存の選択範囲に「追加」するかなどの条件を、SelectionType定数(参照)で渡します。

「feather」は選択範囲のぼかし幅で、「antiAlias」はアンチエイリアスするか否かをtrue/falseで渡します(オプション)。

var region= [ [50, 50], [50, 200], [200, 200], [200, 50] ];
activeDocument.selection.select(region, SelectionType.REPLACE, 0, false);

 

<楕円選択に対応する> 

select関数は楕円の選択範囲には直接対応していません(ひたすら座標を打ち込めば可能ですが……)。よって、スクリプトで動的に「自由変形」のアクションを生成して実行することになります。

以下の関数はあらかじめ矩形か楕円、または多角形を伝えることにより、select関数よりも簡単に矩形や楕円の選択範囲を作成出来るようになっています。

function act_select (shape, type, antiAlias) {
    var setPolygon= function (pts){
        var desc= new ActionDescriptor();
        desc.putUnitDouble( charIDToTypeID('Hrzn'), charIDToTypeID('#Rlt'), pts[0] );
        desc.putUnitDouble( charIDToTypeID('Vrtc'), charIDToTypeID('#Rlt'), pts[1] );
        return desc;
    }
    var actDesc= new ActionDescriptor();
    var ref= new ActionReference();
    ref.putProperty( charIDToTypeID('Chnl'), charIDToTypeID('fsel') );
    actDesc.putReference( charIDToTypeID('null'), ref );
    var region= new ActionDescriptor();
    if (shape=='Plgn') {
        var ptsList= new ActionList();
        for (var i=0; i < arguments[3].length; i++) {
            ptsList.putObject( charIDToTypeID('Pnt '), setPolygon(arguments[3][i]) );
            
        }
        region.putList( charIDToTypeID('Pts '), ptsList );
    } else {
        region.putUnitDouble( charIDToTypeID('Left'), charIDToTypeID('#Rlt'), arguments[3][0] );
        region.putUnitDouble( charIDToTypeID('Top '), charIDToTypeID('#Rlt'), arguments[3][1] );
        region.putUnitDouble( charIDToTypeID('Rght'), charIDToTypeID('#Rlt'), arguments[3][2] );
        region.putUnitDouble( charIDToTypeID('Btom'), charIDToTypeID('#Rlt'), arguments[3][3] );
    }
    actDesc.putObject( charIDToTypeID('T   '), charIDToTypeID( shape ), region );
    if (antiAlias) { actDesc.putBoolean( charIDToTypeID('AntA'), antiAlias ); }
    executeAction( charIDToTypeID( type ), actDesc, DialogModes.NO );
}
act_select('Rctn', 'setd', false, [1242, 158, 2154, 1070]); // 矩形の新規選択
act_select('Elps', 'AddT', false, [1242, 158, 2154, 1070]); // 楕円の追加選択
var ptsList=[ [1200, 186], [1600, 1150], [2350, 200] ];
act_select('Plgn', 'setd', true, ptsList); // 三角形の新規選択

 

<引数>

shape string 選択範囲の形
矩形='Rctn'
楕円='Elps'
多角形='Plgn'
type object 選択範囲の作成条件
現在の選択範囲から除外='SbtF'
現在の選択範囲に追加='AddT'
現在の選択範囲と共通する範囲='IntW'
新規作成='setd'
antiAlias boolean アンチエイリアスするか否か
第4引数 array 選択範囲の座標

 

「shape」には選択範囲の形に対応する文字列を渡します(上記の表参照)。

「type」には選択範囲の作成条件に対応する文字列を渡します(上記の表参照)。

第4引数にはselect関数と同じ要領で座標の配列を渡しますが、矩形と楕円の場合は左上と右下の座標を [ x1, y1, x2, y2 ] として渡します。x1とy1が左上でx2とy2が右下の座標になります。いずれの場合も座標の単位はルーラの単位に関わらずピクセルで指定します。

 

なお、このようにスクリプトで動的にアクションを生成するコードの作成は、ユーザーの動作(=アクション)を記録してスクリプト化する「Scripting Listener」というプラグインを使うと便利です。

参照:アクションをスクリプト化する(Scripting Listener)

 

 

Joomla templates by a4joomla