先日の某セミナーで、隣に座った人と話した「こんなのあったらいいなぁ」を形にしてみました。
理想
・指定する行数に長体処理を行う。
・Illustratorで改段処理。
方法
テキスト原稿をマークダウンで記載し、それを手掛かりとして指定の行数になるように処理をする。
Illustratorでの改段は無理なので、これもマークダウン記載から段頭になるまで改行を入れる。
。。。色々試してみたが、テキストにマーク付けすること自体面倒くさそうだし、しかも正規表現で対象のテキストを取得しても、その文字が何行持っているかを取得できそうにない。
考えるのも面倒になったので、文字を選択しておいて、指定の行数になるようなシンプルな仕様にしました。
※探求心が足りない。。。
▲UIはこんな感じ。
「取り消し」「やり直し」は編集メニューと同じ処理をします。
▲0.1%刻みで長体処理をするようにしました。
文字多いと少し時間がかかる。。。
▲Illustratorのバージョンによって数値を書き換える必要がある。
CC 2018は22。CC 2017は21。
コードは以下。
指定行に長体処理_ボタン版.jsx
#target illustrator-22
#targetengine main
/*////////////////////////////////////////////////// 変数定義 ////////////////////////////////////////////////////////////////////*/
var doc = app.activeDocument; //ドキュメント
/*/////////////////////////////////////////////// 入力ダイアログ表示 ////////////////////////////////////////////////////////*/
win = new Window("palette", "指定行数に長体処理", [200, 150, 350, 300]);
var para01Btn = win.add("button", [10, 10, 70, 30], "1行");
var para02Btn = win.add("button", [10, 35, 70, 55], "2行");
var para03Btn = win.add("button", [10, 60, 70, 80], "3行");
var para04Btn = win.add("button", [75, 10, 135, 30], "4行");
var para05Btn = win.add("button", [75, 35, 135, 55], "5行");
var para06Btn = win.add("button", [75, 60, 135, 80], "6行");
var unDoBtn = win.add("button", [10, 90, 70, 110], "取り消し");
var reDoBtn = win.add("button", [75, 90, 135, 110], "やり直し");
var cancelBtn = win.add("button", [10, 120, 135, 140], "キャンセル");
win.show(); //ウィンドウを表示
win.center(); //センターに表示
/*//////////////////////////////////////////////////////////// 関数 //////////////////////////////////////////////////////////////*/
//▼1~6行のボタンが押されたとき
para01Btn.onClick = function () { //1行
num = 1;
btProcess();
};
para02Btn.onClick = function () { //2
num = 2;
btProcess();
};
para03Btn.onClick = function () { //3行
num = 3;
btProcess();
};
para04Btn.onClick = function () { //4行
num = 4;
btProcess();
};
para05Btn.onClick = function () { //5行
num = 5;
btProcess();
};
para06Btn.onClick = function () { //6行
num = 6;
btProcess();
};
//▼取り消しボタンが押されたとき
unDoBtn.onClick = function () {
var bridgeTalk = new BridgeTalk(); //BridgeTalkを使用
bridgeTalk.target = "illustrator-22";
bridgeTalk.body = "undo();"
bridgeTalk.send();
};
//▼やり直しボタンが押されたとき
reDoBtn.onClick = function () {
var bridgeTalk = new BridgeTalk(); //BridgeTalkを使用
bridgeTalk.target = "illustrator-22";
bridgeTalk.body = "redo();"
bridgeTalk.send();
};
//▼キャンセルボタンが押されたとき
cancelBtn.onClick = function () {
win.close();
};
//▼長体処理関数 BridgeTalk
function btProcess() {
var bridgeTalk = new BridgeTalk(); //BridgeTalkを使用
bridgeTalk.target = "illustrator-22";
bridgeTalk.body = "setBtnValue(num);"
bridgeTalk.send();
}
//▼行数を指定する関数
function setBtnValue(num) {
var sel=doc.selection;
var paraLen = doc.selection.paragraphs.length; //選択している段落数
//▼エラー処理
if (paraLen > 1) {
alert("選択している文字が段落に跨ってます。\r\nご確認ください。");
return;
}
while (sel.lines.length > num) { //指定した行数になるまで-1づつ長体をかける
sel.horizontalScale -= 0.1;
}
}
//▼取り消し関数
function doUnDo() {
undo();
}
//▼やり直し関数
function doReDo() {
redo();
}
感想
はじめdropdownlistで作っていたがWindows10だと切れてしまったのでボタンにしました。
長体を100%に戻すボタン、長体率を上げるボタンなども設けてもいいかと思った。
関数周りをもう少しスマートに書けるようになりたい。。。