イラレJavaScript - デフォルト原点とマルチアートボードへの対応案
イラレのスクリプトで CS5 のデフォルト原点変更に対応する方法を考えてみた。
最初に原点をアクティブなアートボードの左下に移し、最後に元に戻すというもの。
CS3 以前では、特に原点の位置を変更しない。
Win 版 Illustrator CS, CS3, CS4, CS5 で動作確認。
※ 21:25 少し修正しました。(this.activeDocument となってた箇所を app.activeDocument に訂正)
※ 2013.02.11:〔修正〕this にする必要がないところは var にしました。
// --------------------------------------------------------- // A fix for the change of the document origin in CS5, // and for the multi-artboard in CS4 or later. // This function locates the active artboard's origin on the // bottom left at first, and restores it at the end. // // USAGE: // var g_origin = Origin(); // ... (do something in legacy style) // g_origin.restore(); function Origin(){ var ver15_or_later = (parseFloat(version.substr(0, 2)) >= 15); // CS5 or later var ver14 = (version.substr(0, 2) == "14"); // CS4 if(ver15_or_later){ var saved_coord_system = app.coordinateSystem; app.coordinateSystem = CoordinateSystem.ARTBOARDCOORDINATESYSTEM; var idx = app.activeDocument.artboards.getActiveArtboardIndex(); var ab = app.activeDocument.artboards[idx]; var o = ab.rulerOrigin; var r = ab.artboardRect; var saved_origin = [o[0], o[1]]; ab.rulerOrigin = [0, r[1] - r[3]]; } else if(ver14){ var o = app.activeDocument.rulerOrigin; var saved_origin = [o[0], o[1]]; app.activeDocument.rulerOrigin = [0, 0]; } this.restore = function(){ if(ver15_or_later){ ab.rulerOrigin = saved_origin; app.coordinateSystem = saved_coord_system; } else if(ver14){ app.activeDocument.rulerOrigin = saved_origin; } }; return this; } // --------------------------------------------------------- var g_origin = Origin(); main(); g_origin.restore();
作ってる最中に、現在公開中のスクリプトは CS4 のマルチアートボードに対応してなかったんだとわかった。
CS4 を入手したのが最近なもので。近いうちに CS5 対応と併せて更新します。