(クリックで動きます)
160422a

■整列はもっとラクチンになる!わさっと一発で揃える方法を考えましたー   

おつかれさまです。GOROLIB DESIGNです。

先般公開しましたマージンに整列ですが、

参考:イラストレーターにマージン設定!マージンと整列パネルを完全連動させるスクリプトです

よくよく考えると現在の整列パネルの処理って、

「えーっとこのオブジェクトは上側に揃えたいから、上に揃えるコマンドを選択しよう!」

などと「アタマと神経と筋肉の処理」が1回分ずつ多いんです。

おお、でましたね。いつものヘンタイ考察!

相変わらずヘンタイですねぇ(自分で)。


だって、いちばん近い所に素直に移動するだけでいいじゃないですか。と考えたのが今回のスクリプトです。

いちばん近いマージンに自動で移動します。そう、マージンに自動で整列してくれるんです。


ダウンロードにてご利用ください。
Gorolib17_TranslateToMarginAuto.jsx

(クリックで動きます)
160422a


マージン登録してあればマージンに揃いますし、そうでなければアクティブアートボードに揃います。

マージンに整列を使ってみたい方は、こちらを参考にしてください。

参考:イラストレーターにマージン設定!マージンと整列パネルを完全連動させるスクリプトです

なお、プレビュー境界のオンオフにも対応していますので「見た目の整列」も可能です!やるぅ!(自分で(笑))
(クリックで動きます)
160422b


ではでは出羽の海。


(追記160422)ちなみにこのスクリプト「思考不要で整列する」のがコンセプトです。実務としては2〜3のオブジェクトをさっと揃えるのが主でしょう。本文のような整列ケースはありえませんね…(笑)

(クリックで動きます)
160422_1643



※ソースも公開しておきます。
最大値取得のところが納得いかない(笑)adobeの関数ヘンなんだよなぁ。
━━━━━
// Gorolib17_TranslateToMarginAuto
// Copyright (C) 2016 GOROLIB DESIGN All Rights Reserved.
// v1.0

#targetengine 'ArtboardMarginSave'

var DOC = activeDocument
var SEL = DOC.selection
var ABD = DOC.artboards[DOC.artboards.getActiveArtboardIndex()]
var STB = app.preferences.getBooleanPreference("includeStrokeInBounds")

if ( MGNsav == undefined )  var MGNsav = ABD.artboardRect

if ( SEL ) {

// 選択オブジェクトの座標取得
function BNDfn ( SELx ) {
if ( STB == true ) {
var BNDx = SELx.visibleBounds;
} else {
var BNDx = SELx.geometricBounds;
}
return BNDx
}

// 最小マージン取得
function MGNfn ( SELx ) {
// 配列:4辺のマージンとオブジェクトの距離
var BNDx = BNDfn( SELx )
var AR1 = [
Math.abs( MGNsav[0] - BNDx[0] ) ,
Math.abs( MGNsav[1] - BNDx[1] ) ,
Math.abs( MGNsav[2] - BNDx[2] ) ,
Math.abs( MGNsav[3] - BNDx[3] ) 
]
// マージン比較の初期値
var MGNx = AR1[0]
var MINx = 0

// 最小マージンの取得
for ( var N=0 ; N<AR1.length ; N++ ) {
if ( MGNx > AR1[N] ) { 
MGNx = AR1[N]
MINx = N
}
}
return MINx
}

// メイン処理
for ( var N=0 ; N<SEL.length ; N++ ) {
BND = BNDfn( SEL[N])

// 最小マージン判定(関数呼び出し)
MIN = MGNfn ( SEL[N] )

if ( MIN == 0 ) {
var TRNx = MGNsav[0] - BND[0]
var TRNy = 0
} else if ( MIN == 1 ) {
var TRNx = 0
var TRNy = MGNsav[1] - BND[1]
} else if ( MIN == 2 ) {
var TRNx = MGNsav[2] - BND[2]
var TRNy = 0
} else if ( MIN == 3 ) {
var TRNx = 0
var TRNy = MGNsav[3] - BND[3]
}
// 最も近いマージンへ移動
SEL[N].translate(TRNx,TRNy)
}
}
━━━━━