Illustrator CS3〜CS6編 レイヤーを複製する

今回のスクリプトはアクティブになっているレイヤーの内容を複製するものです。手作業だとレイヤーの複製は簡単にできます。ところが、スクリプトではなぜかレイヤーを複製する機能がありません。図形や文字を複製する機能はあるのですが、不思議です。
まず、以下のスクリプトはサブレイヤーを除くレイヤー内容を複製します。サブレイヤーを複製したくない場合やサブレイヤーがない場合に使えます。


var srcLayer = app.activeDocument.activeLayer;
var dstLayer = app.activeDocument.layers.add(); // 新規レイヤーを作成
for(var i=0; i<srcLayer.pageItems.length; i++){
var src = srcLayer.pageItems[i].duplicate();
src.move(dstLayer, ElementPlacement.PLACEATEND);
}

サブレイヤーが含まれる場合には以下のスクリプトを使うとサブレイヤーごと複製されます。サブレイヤーの名前なども、そのままコピーされます。ただし、通常の図形とサブレイヤーの順番に関しては同じように複製されません。

var srcLayer = app.activeDocument.activeLayer;
var dstLayer = app.activeDocument.layers.add(); // 新規レイヤーを作成
dupLayer(srcLayer, dstLayer);
// レイヤーを複製(再帰)
function dupLayer(srcLayer, dstLayer){
for(var i=0; i<srcLayer.pageItems.length; i++){
var src = srcLayer.pageItems[i].duplicate();
src.move(dstLayer, ElementPlacement.PLACEATEND);
}
for(i=0; i<srcLayer.layers.length; i++){
var dstLayer2 = dstLayer.layers.add(); // 新規レイヤーを作成
dstLayer2.name = srcLayer.layers[i].name;
dupLayer(srcLayer.layers[i], dstLayer2);
}
}

[サンプルをダウンロード]