【InDesign】EDICOLOR機能を再現(3)【オブジェクトを均等アキに分布】
今回は、自作ではなくご紹介です。
こういうオブジェクト群があるとき、
我々が望む等間隔の整列(分布)とは
大体こうだろうと思うんですが、整列パネルの「分布」を使うと
↓
結果はこうなります。違う、そうじゃない・・
そりゃま算数で数値を出したりひと手間加えれば出来ますが、速攻でやって欲しいわけです。
EDICOLORでは出来ます
も、もういいよね?出しちゃっても
で、これをInDesignで実現するには、スクリプトという事になります
dtptokadensyo.blog.fc2.com
DTPとか電書(ゆう様)
この結果を得たい時は、整列パネルが必ずこうである必要があります
ただ配布のままだとctrl + Z一回で「実行前」までに戻れないので、下記にdoScript追加版を記します。
doScript(ctrl + Zで処理前まで戻れる)版(水平)
//DESCRIPTION:水平(左右)方向:均等アキ整列(CS6以降)
(function()
{
app.doScript (Main, ScriptLanguage.JAVASCRIPT, null, UndoModes.FAST_ENTIRE_SCRIPT);
function Main()
{
var
mD = app.activeDocument,
mS = app.selection,
selKey = mD.selectionKeyObject;
if (dType)
{
var dType = mS[0].constructor.name;
}
if(mS == 0 || dType =="Text"|| dType =="Paragraph"|| dType =="TextColumn"|| dType =="Character")
{ //選択オブジェクトが左記以外ならなにもしない
} else { //何か選択していて、
if (selKey == null)
{ //キーオブジェクトが選択されていなければ選択範囲内で、
mD.distribute (
mS,
DistributeOptions.HORIZONTAL_SPACE, //水平方向に等間隔に分布
// DistributeOptions.VERTICAL_SPACE, //垂直方向に等間隔に分布
AlignDistributeBounds.ITEM_BOUNDS,);
} else { //キーオブジェクトを起点に、
var dis = prompt("左右何ミリ空きにしますか?","0","間隔を指定して、水平方向に等間隔に分布");
if(dis != null)
{
mD.distribute (
mS,
DistributeOptions.HORIZONTAL_SPACE, //水平方向に等間隔に分布
// DistributeOptions.VERTICAL_SPACE, //垂直方向に等間隔に分布
AlignDistributeBounds.KEY_OBJECT,
true,
dis+"mm",
mD.selectionKeyObject ,);
}else{
}
}}
}
})();
doScript(ctrl + Zで処理前まで戻れる)版(垂直)
//DESCRIPTION:垂直(天地)方向:均等アキ整列(CS6以降)
(function()
{
app.doScript (Main, ScriptLanguage.JAVASCRIPT, null, UndoModes.FAST_ENTIRE_SCRIPT);
function Main()
{
var
mD = app.activeDocument,
mS = app.selection,
selKey = mD.selectionKeyObject;
if (dType)
{
var dType = mS[0].constructor.name;
}
if (mS == 0 || dType =="Text"|| dType =="Paragraph"|| dType =="TextColumn"|| dType =="Character"){ //選択オブジェクトが左記以外ならなにもしない
} else { //何か選択していて、
if (selKey == null)
{ //キーオブジェクトが選択されていなければ選択範囲内で、
mD.distribute (
mS,
//DistributeOptions.HORIZONTAL_SPACE, //水平方向に等間隔に分布
DistributeOptions.VERTICAL_SPACE, //垂直方向に等間隔に分布
AlignDistributeBounds.ITEM_BOUNDS,);
} else { //キーオブジェクトを起点に、
var dis = prompt("上下何ミリ空きにしますか?","0","間隔を指定して、垂直方向に等間隔に分布");
if (dis != null)
{
mD.distribute (
mS,
//DistributeOptions.HORIZONTAL_SPACE, //水平方向に等間隔に分布
DistributeOptions.VERTICAL_SPACE, //垂直方向に等間隔に分布
AlignDistributeBounds.KEY_OBJECT,
true,
dis+"mm",
mD.selectionKeyObject ,);
}else{
}
}}
}
})();
因みに、「等間隔に分布」の使い方だけさらっと。
↓