(クリックで動きます)

■実は今まで苦戦してました!ちょっとラクになりますわぁ^ ^
おつかれさまです。@gorolibです。
今回ご提案するのは、1つのオブジェクトを「オブジェクトとアートボードのスキマの中央に自動配置する」スクリプトです。
ぱ、ぱーどぅん?(笑)
ええと(汗)、こういう場合です。
ロゴをオブジェクトとアートボードのスキマの中央に配置させる感じです。あとからロゴ追加〜とかそういうときですね。
ダウンロードにてご利用ください。タテヨコバージョンがあります。
<タテ>
<ヨコ>
※今回は条件があります。
(1)これから揃えるほうを前面にしてください。
(2)それを「アートボードの揃える側」においてください。
(3)スキマの基準となるオブジェクトも選択してください(2つ選択します)
■オブジェクトとアートボードのスキマって実は基準がとりづらかったのです
ちょっと個別具体的すぎたので、汎用的な説明を。
(クリックで動きます)
たとえばピンク(グレーの箱よりも前面にしています)。
グレーの箱と同時に選択してヨコ版のスクリプトを流すと、こうなります。
左側においてあるので、グレーの箱とアートボードの左側とのスキマの中央に揃います。
なお、さらにグレーの箱のy軸の中央に揃えているのはご愛嬌(笑)このほうが使いやすいので…。
ちなみにピンクを右側に置くとこうなります。
■スマートガイドではサポートされていません!
余談ですがスマートガイドではこの基準はサポートされていません!
いや悔しいじゃないですか、だいたいいつもスクリプト作った後に「スマートガイドで出ます!」という事態になること多いスからねぇ…。今回は検証しましたが、スマートガイドでは出ないようです。
お役に立てれば幸いです!
ではでは出羽の海。
※ソースは参考まで。
━━━━━
━━━━━
// Gorolib26_AlignToBlankCenterV
// Copyright (C) 2016 GOROLIB DESIGN All Rights Reserved.
// v1.0
var DOC = activeDocument
var SEL = DOC.selection
var ABD = DOC.artboards
var RCT = ABD[ABD.getActiveArtboardIndex()].artboardRect
var STB = app.preferences.getBooleanPreference("includeStrokeInBounds")
// 選択オブジェクトの座標取得
function BNDfn ( SELz ) {
// クリッピングマスク
if ( SELz.typename == "GroupItem" && SELz.clipped == true ) {
var BNDx = SELz.pageItems[0].geometricBounds
// プレビュー境界オン
} else if ( STB == true ) {
var BNDz = SELz.visibleBounds
} else {
var BNDz = SELz.geometricBounds
}
return BNDz
}
// メイン処理
if ( SEL.length != 2 ) {
alert("2つのオブジェクトを選択してください")
} else {
var BND0 = BNDfn ( SEL[0] )
var BND1 = BNDfn ( SEL[1] )
var x0 = ( BND0[0] + BND0[2] ) / 2
var y0 = ( BND0[1] + BND0[3] ) / 2
var Cx = ( BND1[0] + BND1[2] ) / 2
var M1 = Math.abs( RCT[1] - y0 )
var M3 = Math.abs( RCT[3] - y0 )
if ( M1 < M3 ) {
var Cy = ( RCT[1] + BND1[1] ) / 2
} else {
var Cy = ( RCT[3] + BND1[3] ) / 2
}
SEL[0].translate( Cx - x0 , Cy - y0 )
}
━━━━━// Gorolib25_AlignToBlankCenterH
// Copyright (C) 2016 GOROLIB DESIGN All Rights Reserved.
// v1.0
var DOC = activeDocument
var SEL = DOC.selection
var ABD = DOC.artboards
var RCT = ABD[ABD.getActiveArtboardIndex()].artboardRect
var STB = app.preferences.getBooleanPreference("includeStrokeInBounds")
// 選択オブジェクトの座標取得
function BNDfn ( SELz ) {
// クリッピングマスク
if ( SELz.typename == "GroupItem" && SELz.clipped == true ) {
var BNDx = SELz.pageItems[0].geometricBounds
// プレビュー境界オン
} else if ( STB == true ) {
var BNDz = SELz.visibleBounds
} else {
var BNDz = SELz.geometricBounds
}
return BNDz
}
// メイン処理
if ( SEL.length != 2 ) {
alert("2つのオブジェクトを選択してください")
} else {
var BND0 = BNDfn ( SEL[0] )
var BND1 = BNDfn ( SEL[1] )
var x0 = ( BND0[0] + BND0[2] ) / 2
var y0 = ( BND0[1] + BND0[3] ) / 2
var Cy = ( BND1[1] + BND1[3] ) / 2
var M0 = Math.abs( RCT[0] - x0 )
var M2 = Math.abs( RCT[2] - x0 )
if ( M0 < M2 ) {
var Cx = ( RCT[0] + BND1[0] ) / 2
} else {
var Cx = ( RCT[2] + BND1[2] ) / 2
}
SEL[0].translate( Cx - x0 , Cy - y0 )
}━━━━━
コメント