【Javascript】Photoshopで複数選択したレイヤーを移動する方法

実現したいこと

お世話になります。

只今JavascriptでPhotoshopファイルを開き、
ArtLayerを複数選択し、その状態で別のグループレイヤーへ
一発で移動をしたいと考えています。

なぜ複数選択状態で一発移動したいかというと、
1つ1つレイヤー移動をしてしまうと調整レイヤーの
効果が解除されてしまうので、対象レイヤーを選択した上で、
一発で移動できれば調整レイヤーの効果を維持したまま
移動ができるかと。。。

発生している問題・分からないこと

該当のソースを実行することでグループレイヤー内のArtLayerを
複数選択状態にすることはできました。

その状態で一発で移動する処理として以下コードを書いたのですが、
グループレイヤー内の1番目のレイヤーしか移動できない状態です。。

Javascript

1 doc.activeLayer.move(newGroup, ElementPlacement.PLACEATBEGINNING);

なんとなくこれでは実現できないよな、、、
とは思いつつも複数選択レイヤーに対して
処理を実行する方法がわからずに困っています。。

複数選択レイヤーに対して処理を実行する方法を
知っている方いらっしゃいましたらご教授いただけますと幸いです。。

該当のソースコード

/* グループレイヤーを指定のグループレイヤーへ移動 グループレイヤー自体をコピーしたり移動することはできないため、 同名のフォルダを作成し、その中にグループレイヤー内のレイヤーを 移動して、最後にグループレイヤーを削除する処理とする */ function copyLayersInOrder(TargetGroup , LayerSets) { var newGroup = TargetGroup.layerSets.add(); newGroup.name = LayerSets.name; doc.activeLayer = LayerSets.layers[0]; // 元のグループのレイヤーを新しいグループに移動 for (var j = LayerSets.layers.length - 1; j >= 0; j--) { if (LayerSets.layers[j].typename === "ArtLayer") { // レイヤーの選択 selectByID(LayerSets.layers[j].id); } else if (LayerSets.layers[j].typename === "LayerSet") { copyLayersInOrder(newGroup ,LayerSets.layers[j]); } } doc.activeLayer.move(newGroup, ElementPlacement.PLACEATBEGINNING); // 元のグループを削除 LayerSets.remove(); } /* 引数のレイヤーIDを基にレイヤーを選択状態にする */ function selectByID(id) { var desc1 = new ActionDescriptor(); var ref1 = new ActionReference(); ref1.putIdentifier(charIDToTypeID('Lyr '), id); desc1.putReference(charIDToTypeID('null'), ref1); desc1.putEnumerated(stringIDToTypeID("selectionModifier"), stringIDToTypeID("selectionModifierType"), stringIDToTypeID("addToSelection")); executeAction(charIDToTypeID('slct'), desc1, DialogModes.NO); }

試したこと・調べたこと

上記の詳細・結果

該当のソースを実行することでグループレイヤー内のArtLayerを
複数選択状態にすることはできました。

その状態で一発で移動する処理書いたのですが、
グループレイヤー内の1番目のレイヤーしか移動できない状態です。。

補足

特になし

コメントを投稿

0 コメント