■ついに、ついにできました!もう整列基準はアートボード固定で大丈夫です

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

ついにイラストレーターの整列基準をサクッと変更できないか問題に終止符を打ちます!


…打つところです。


打とうかな。


いやいや、とりあえずお茶ね(自信なし(笑))


発端は整列パネルの整列基準を「アートボードに整列」のままで、等間隔に分布させると、
こーんなになったり、
53bdd0d3-s

こーんなになったりするのが
aad9a584-s

イヤでイヤで仕方なかったことです。

しかし整列パネルの整列基準は、ショートカットなどでサクサクと変更することがどうしてもできず、悶々としていたのです。

では、整列基準は「アートボードに整列」のままに、選択オブジェクトを等間隔に分布できればいいのではないか?というのが今回の趣旨であり、これでこの問題に終止符を打ちたい所存なのであります。

スクリプトとアクションのセットでダウンロードしてください。

整列処理はさすがにスクリプト化できなかったので、アクションを用意しておいて、それを呼び出す形式にしました。

スクリプトを起動して、アクションを呼び出す形です。

以下、ダウンロードにてお願いいたします。

(アクション)
DistributeSpace.aia

(スクリプト)
Gorolib_DistributeSpaceHorizontal.jsx
Gorolib_DistributeSpaceVertical.jsx


アクションの登録について。
参考:イラストレーターでアクションの読み込みを行う方法

スクリプトの登録について。
参考:イラストレーターでスクリプトをサクッと起動する方法

なお、スクリプトからアクションを呼び出せるのはイラストレーターCS6以降になりますので、ご了承くださいませ…。


■選択範囲を一瞬だけアートボード化します。


では行きます。整列基準は「アートボードに整列」のままでいいんです!
47

57
13

仕組みはいつもどおりシンプル。
・選択範囲を一瞬だけアートボード化して
・その間にササッと整列し、
・何事もなかったかのように元のアートボードに戻します(笑)


ではでは出羽の海。




※コードは以下のとおりです。
━━━━━━━━━━
// Gorolib_DistributeSpaceHorizontal
// Copyright (C) 2016 GOROLIB DESIGN All Rights Reserved.
// v1.0

DOC = activeDocument;
SEL = DOC.selection;

//最前面の選択オブジェクトの位置をスタートとする
RCT = SEL[0].visibleBounds;
x1 = RCT[0];
y1 = RCT[1];
x2 = RCT[2];
y2 = RCT[3];

//選択範囲を抽出する
for ( N=0 ; N<SEL.length ; N++ ) {
    // 選択オブジェクトのサイズを取得
    BND = SEL[N].visibleBounds;

    // 最大サイズを比較抽出
    if ( BND[0] < x1 )  x1 = BND[0];
    if ( BND[1] > y1 )  y1 = BND[1];
    if ( BND[2] > x2 )  x2 = BND[2];
    if ( BND[3] < y2 )  y2 = BND[3];
}

//アクティブなアートボードを取得して保存
ABD = DOC.artboards[DOC.artboards.getActiveArtboardIndex()];
SAV = ABD.artboardRect;

//選択範囲をアートボードに変換
RCT[0]  =  x1;
RCT[1]  =  y1;
RCT[2]  =  x2;
RCT[3]  =  y2;
ABD.artboardRect = RCT;

//等間隔に分布(アクション起動)
app.doScript("DistributeSpaceHorizontal", "DistributeSpace");

//元のアートボードに戻す
ABD.artboardRect = SAV;



━━━━━━━━━━
// Gorolib_DistributeSpaceVertical
// Copyright (C) 2016 GOROLIB DESIGN All Rights Reserved.
// v1.0

DOC = activeDocument;
SEL = DOC.selection;

//最前面の選択オブジェクトの位置をスタートとする
RCT = SEL[0].visibleBounds;
x1 = RCT[0];
y1 = RCT[1];
x2 = RCT[2];
y2 = RCT[3];

//選択範囲を抽出する
for ( N=0 ; N<SEL.length ; N++ ) {
    // 選択オブジェクトのサイズを取得
    BND = SEL[N].visibleBounds;

    // 最大サイズを比較抽出
    if ( BND[0] < x1 )  x1 = BND[0];
    if ( BND[1] > y1 )  y1 = BND[1];
    if ( BND[2] > x2 )  x2 = BND[2];
    if ( BND[3] < y2 )  y2 = BND[3];
}

//アクティブなアートボードを取得して保存
ABD = DOC.artboards[DOC.artboards.getActiveArtboardIndex()];
SAV = ABD.artboardRect;

//選択範囲をアートボードに変換
RCT[0]  =  x1;
RCT[1]  =  y1;
RCT[2]  =  x2;
RCT[3]  =  y2;
ABD.artboardRect = RCT;

//等間隔に分布(アクション起動)
app.doScript("DistributeSpaceVertical", "DistributeSpace");

//元のアートボードに戻す
ABD.artboardRect = SAV;
━━━━━━━━━━