2019/01/08 コメントで指摘をいただいた「レイヤー削除」に関する処理を追加しました。
納品のたびに「レイヤーの削除」「アートボードの削除」をやっているが、手作業だと漏れがある。
毎回の作業なので半自動化するために、レイヤーとアートボードの命名規則を作り、scriptを組む。
命名規則の例
- 削除したいレイヤー名
- 「抜き罫」、「図面用」
- 削除したいアートボード名
- 「図面用」
レイヤー名を指定して削除
行う操作の順序は以下の通り。
- 特定のレイヤー名を検索 1
- 検索したレイヤーのindexNumberを保存
- indexNumberに基づいて削除
抜き罫削除.js
// 「抜き罫」レイヤー削除
removeNUKIKEI(activeDocument);
function removeNUKIKEI(docObj)
{
var i = searchLayerNum (docObj, "抜き罫");
if( i == -1 ){
// 抜き罫レイヤーがないなら何もしない
}
else{
var layObj = docObj.layers;
removeLayer(layObj, i);
}
}
// レイヤー名検索
function searchLayerNum(docObj,layName){
layObj = docObj.layers;
for (i=0; i<layObj.length; i++){
if( layObj[i].name == layName ){
return i;
}
}
return -1; // 見つからなかったら-1を返す
}
// レイヤー削除
function removeLayer(layObj, tgtNum){
layObj[tgtNum].locked = false;
// 非表示レイヤはremove()しようとするとエラー失敗する
layObj[tgtNum].visible = true;
layObj[tgtNum].remove();
}
アートボードも名前から削除
アートボードもレイヤーと同様に名前から検索し、削除することが可能。
図面用削除.js
// 図面用アートボードとレイヤーの削除
removeDRAWING(activeDocument);
function removeDRAWING(docObj){
var i = searchArtboardNum (docObj, "図面用");
if( i == -1 ){
// 図面用アートボードがないなら何もしない
}
else{
var artObj = docObj.artboards;
artObj[i].remove();
}
i = searchLayerNum (docObj, "図面用");
if( i == -1 ){
// 図面用レイヤーがないなら何もしない
}
else{
var layObj = docObj.layers;
removeLayer(layObj, i);
}
}
// アートボード名検索
function searchArtboardNum(docObj,artName){
artObj = docObj.artboards;
for (i=0; i<artObj.length; i++){
if( artObj[i].name == artName ){
return i;
}
}
return -1; // 見つからなかったら-1を返す
}
// レイヤー名検索
function searchLayerNum(docObj,layName){
layObj = docObj.layers;
for (i=0; i<layObj.length; i++){
if( layObj[i].name == layName ){
return i;
}
}
return -1; // 見つからなかったら-1を返す
}
// レイヤー削除
function removeLayer(layObj, tgtNum){
layObj[tgtNum].locked = false;
// 非表示レイヤはremove()しようとするとエラー失敗する
layObj[tgtNum].visible = true;
layObj[tgtNum].remove();
}
-
同名のレイヤーが存在しないことが前提。同名レイヤーをまとめて削除したい場合は、indexNumberを配列に格納すれば対応できるが、そもそも同名レイヤーがあると混乱の元なので避けたほうが良い。 ↩